Module Name: src Committed By: christos Date: Thu Nov 21 15:54:17 UTC 2013
Modified Files: src/sys/sys: queue.h Log Message: Add a CIRCLEQ_END() macro to reduce diff with other queue.h To generate a diff of this commit: cvs rdiff -u -r1.55 -r1.56 src/sys/sys/queue.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/sys/queue.h diff -u src/sys/sys/queue.h:1.55 src/sys/sys/queue.h:1.56 --- src/sys/sys/queue.h:1.55 Wed Jul 17 11:50:59 2013 +++ src/sys/sys/queue.h Thu Nov 21 10:54:17 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: queue.h,v 1.55 2013/07/17 15:50:59 pooka Exp $ */ +/* $NetBSD: queue.h,v 1.56 2013/11/21 15:54:17 christos Exp $ */ /* * Copyright (c) 1991, 1993 @@ -604,16 +604,16 @@ struct { \ */ #if defined(_KERNEL) && defined(QUEUEDEBUG) #define QUEUEDEBUG_CIRCLEQ_HEAD(head, field) \ - if ((head)->cqh_first != (void *)(head) && \ - (head)->cqh_first->field.cqe_prev != (void *)(head)) \ + if ((head)->cqh_first != CIRCLEQ_END(head) && \ + (head)->cqh_first->field.cqe_prev != CIRCLEQ_END(head)) \ panic("CIRCLEQ head forw %p %s:%d", (head), \ __FILE__, __LINE__); \ - if ((head)->cqh_last != (void *)(head) && \ - (head)->cqh_last->field.cqe_next != (void *)(head)) \ + if ((head)->cqh_last != CIRCLEQ_END(head) && \ + (head)->cqh_last->field.cqe_next != CIRCLEQ_END(head)) \ panic("CIRCLEQ head back %p %s:%d", (head), \ __FILE__, __LINE__); #define QUEUEDEBUG_CIRCLEQ_ELM(head, elm, field) \ - if ((elm)->field.cqe_next == (void *)(head)) { \ + if ((elm)->field.cqe_next == CIRCLEQ_END(head)) { \ if ((head)->cqh_last != (elm)) \ panic("CIRCLEQ elm last %p %s:%d", (elm), \ __FILE__, __LINE__); \ @@ -622,7 +622,7 @@ struct { \ panic("CIRCLEQ elm forw %p %s:%d", (elm), \ __FILE__, __LINE__); \ } \ - if ((elm)->field.cqe_prev == (void *)(head)) { \ + if ((elm)->field.cqe_prev == CIRCLEQ_END(head)) { \ if ((head)->cqh_first != (elm)) \ panic("CIRCLEQ elm first %p %s:%d", (elm), \ __FILE__, __LINE__); \ @@ -647,7 +647,7 @@ struct name { \ } #define CIRCLEQ_HEAD_INITIALIZER(head) \ - { (void *)&head, (void *)&head } + { CIRCLEQ_END(&head), CIRCLEQ_END(&head) } #define CIRCLEQ_ENTRY(type) \ struct { \ @@ -659,8 +659,8 @@ struct { \ * Circular queue functions. */ #define CIRCLEQ_INIT(head) do { \ - (head)->cqh_first = (void *)(head); \ - (head)->cqh_last = (void *)(head); \ + (head)->cqh_first = CIRCLEQ_END(head); \ + (head)->cqh_last = CIRCLEQ_END(head); \ } while (/*CONSTCOND*/0) #define CIRCLEQ_INSERT_AFTER(head, listelm, elm, field) do { \ @@ -668,7 +668,7 @@ struct { \ QUEUEDEBUG_CIRCLEQ_ELM((head), (listelm), field) \ (elm)->field.cqe_next = (listelm)->field.cqe_next; \ (elm)->field.cqe_prev = (listelm); \ - if ((listelm)->field.cqe_next == (void *)(head)) \ + if ((listelm)->field.cqe_next == CIRCLEQ_END(head)) \ (head)->cqh_last = (elm); \ else \ (listelm)->field.cqe_next->field.cqe_prev = (elm); \ @@ -680,7 +680,7 @@ struct { \ QUEUEDEBUG_CIRCLEQ_ELM((head), (listelm), field) \ (elm)->field.cqe_next = (listelm); \ (elm)->field.cqe_prev = (listelm)->field.cqe_prev; \ - if ((listelm)->field.cqe_prev == (void *)(head)) \ + if ((listelm)->field.cqe_prev == CIRCLEQ_END(head)) \ (head)->cqh_first = (elm); \ else \ (listelm)->field.cqe_prev->field.cqe_next = (elm); \ @@ -690,8 +690,8 @@ struct { \ #define CIRCLEQ_INSERT_HEAD(head, elm, field) do { \ QUEUEDEBUG_CIRCLEQ_HEAD((head), field) \ (elm)->field.cqe_next = (head)->cqh_first; \ - (elm)->field.cqe_prev = (void *)(head); \ - if ((head)->cqh_last == (void *)(head)) \ + (elm)->field.cqe_prev = CIRCLEQ_END(head); \ + if ((head)->cqh_last == CIRCLEQ_END(head)) \ (head)->cqh_last = (elm); \ else \ (head)->cqh_first->field.cqe_prev = (elm); \ @@ -700,9 +700,9 @@ struct { \ #define CIRCLEQ_INSERT_TAIL(head, elm, field) do { \ QUEUEDEBUG_CIRCLEQ_HEAD((head), field) \ - (elm)->field.cqe_next = (void *)(head); \ + (elm)->field.cqe_next = CIRCLEQ_END(head); \ (elm)->field.cqe_prev = (head)->cqh_last; \ - if ((head)->cqh_first == (void *)(head)) \ + if ((head)->cqh_first == CIRCLEQ_END(head)) \ (head)->cqh_first = (elm); \ else \ (head)->cqh_last->field.cqe_next = (elm); \ @@ -712,12 +712,12 @@ struct { \ #define CIRCLEQ_REMOVE(head, elm, field) do { \ QUEUEDEBUG_CIRCLEQ_HEAD((head), field) \ QUEUEDEBUG_CIRCLEQ_ELM((head), (elm), field) \ - if ((elm)->field.cqe_next == (void *)(head)) \ + if ((elm)->field.cqe_next == CIRCLEQ_END(head)) \ (head)->cqh_last = (elm)->field.cqe_prev; \ else \ (elm)->field.cqe_next->field.cqe_prev = \ (elm)->field.cqe_prev; \ - if ((elm)->field.cqe_prev == (void *)(head)) \ + if ((elm)->field.cqe_prev == CIRCLEQ_END(head)) \ (head)->cqh_first = (elm)->field.cqe_next; \ else \ (elm)->field.cqe_prev->field.cqe_next = \ @@ -727,29 +727,31 @@ struct { \ #define CIRCLEQ_FOREACH(var, head, field) \ for ((var) = ((head)->cqh_first); \ - (var) != (const void *)(head); \ + (var) != CIRCLEQ_END(head); \ (var) = ((var)->field.cqe_next)) #define CIRCLEQ_FOREACH_REVERSE(var, head, field) \ for ((var) = ((head)->cqh_last); \ - (var) != (const void *)(head); \ + (var) != CIRCLEQ_END(head); \ (var) = ((var)->field.cqe_prev)) /* * Circular queue access methods. */ -#define CIRCLEQ_EMPTY(head) ((head)->cqh_first == (void *)(head)) #define CIRCLEQ_FIRST(head) ((head)->cqh_first) #define CIRCLEQ_LAST(head) ((head)->cqh_last) +#define CIRCLEQ_END(head) ((void *)(head)) #define CIRCLEQ_NEXT(elm, field) ((elm)->field.cqe_next) #define CIRCLEQ_PREV(elm, field) ((elm)->field.cqe_prev) +#define CIRCLEQ_EMPTY(head) \ + (CIRCLEQ_FIRST(head) == CIRCLEQ_END(head)) #define CIRCLEQ_LOOP_NEXT(head, elm, field) \ - (((elm)->field.cqe_next == (void *)(head)) \ + (((elm)->field.cqe_next == CIRCLEQ_END(head)) \ ? ((head)->cqh_first) \ : (elm->field.cqe_next)) #define CIRCLEQ_LOOP_PREV(head, elm, field) \ - (((elm)->field.cqe_prev == (void *)(head)) \ + (((elm)->field.cqe_prev == CIRCLEQ_END(head)) \ ? ((head)->cqh_last) \ : (elm->field.cqe_prev))