diff options
author | Kevin Wolf <kwolf@redhat.com> | 2015-06-10 13:47:35 +0200 |
---|---|---|
committer | Kevin Wolf <kwolf@redhat.com> | 2015-06-12 17:04:59 +0200 |
commit | ae81693004fd95f7013e42811944707a92948d9a (patch) | |
tree | 937270c2d5dea8ba579c74bf13014d7e7bb79030 | |
parent | 6ee4ce1ee75a651c246d926c2302281b51981f6d (diff) | |
download | qemu-ae81693004fd95f7013e42811944707a92948d9a.zip qemu-ae81693004fd95f7013e42811944707a92948d9a.tar.gz qemu-ae81693004fd95f7013e42811944707a92948d9a.tar.bz2 |
queue.h: Add QLIST_FIX_HEAD_PTR()
If the head of a list has been moved to a different memory location, the
le_prev link in the first list entry has to be fixed up. Provide a macro
that implements this fixup.
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Max Reitz <mreitz@redhat.com>
-rw-r--r-- | include/qemu/queue.h | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/include/qemu/queue.h b/include/qemu/queue.h index f781aa2..a8d3cb8 100644 --- a/include/qemu/queue.h +++ b/include/qemu/queue.h @@ -117,6 +117,12 @@ struct { \ } \ } while (/*CONSTCOND*/0) +#define QLIST_FIX_HEAD_PTR(head, field) do { \ + if ((head)->lh_first != NULL) { \ + (head)->lh_first->field.le_prev = &(head)->lh_first; \ + } \ +} while (/*CONSTCOND*/0) + #define QLIST_INSERT_AFTER(listelm, elm, field) do { \ if (((elm)->field.le_next = (listelm)->field.le_next) != NULL) \ (listelm)->field.le_next->field.le_prev = \ |