mpi@ reminded me I had this diff cooking. This diff renames SIMPLEQ_* to STAILQ_* in /usr/src/sys/sys to unify with FreeBSD and Linux.
I added aliases at the end of queue.h to avoid breaking base too much. they will be removed as soon as diff 2,3,4,5,6,7 are commited. net/sniproxy has a patch to define STAILQ_*, it may be removed later. Index: buf.h =================================================================== RCS file: /cvs/src/sys/sys/buf.h,v retrieving revision 1.112 diff -u -p -r1.112 buf.h --- buf.h 29 Nov 2019 01:04:08 -0000 1.112 +++ buf.h 25 Dec 2020 14:24:08 -0000 @@ -105,15 +105,15 @@ void bufq_quiesce(void); void bufq_restart(void); /* fifo */ -SIMPLEQ_HEAD(bufq_fifo_head, buf); +STAILQ_HEAD(bufq_fifo_head, buf); struct bufq_fifo { - SIMPLEQ_ENTRY(buf) bqf_entries; + STAILQ_ENTRY(buf) bqf_entries; }; /* nscan */ -SIMPLEQ_HEAD(bufq_nscan_head, buf); +STAILQ_HEAD(bufq_nscan_head, buf); struct bufq_nscan { - SIMPLEQ_ENTRY(buf) bqf_entries; + STAILQ_ENTRY(buf) bqf_entries; }; /* bufq link in struct buf */ Index: fusebuf.h =================================================================== RCS file: /cvs/src/sys/sys/fusebuf.h,v retrieving revision 1.13 diff -u -p -r1.13 fusebuf.h --- fusebuf.h 19 Jun 2018 11:27:54 -0000 1.13 +++ fusebuf.h 25 Dec 2020 14:24:08 -0000 @@ -27,7 +27,7 @@ /* header at beginning of each fusebuf: */ struct fb_hdr { - SIMPLEQ_ENTRY(fusebuf) fh_next; /* next buffer in chain */ + STAILQ_ENTRY(fusebuf) fh_next; /* next buffer in chain */ size_t fh_len; /* Amount of data */ int fh_err; /* errno to pass back */ int fh_type; /* type of data */ Index: pool.h =================================================================== RCS file: /cvs/src/sys/sys/pool.h,v retrieving revision 1.77 diff -u -p -r1.77 pool.h --- pool.h 19 Jul 2019 09:03:03 -0000 1.77 +++ pool.h 25 Dec 2020 14:24:08 -0000 @@ -152,7 +152,7 @@ struct pool { union pool_lock pr_lock; const struct pool_lock_ops * pr_lock_ops; - SIMPLEQ_ENTRY(pool) + STAILQ_ENTRY(pool) pr_poollist; struct pool_pagelist pr_emptypages; /* Empty pages */ Index: queue.h =================================================================== RCS file: /cvs/src/sys/sys/queue.h,v retrieving revision 1.45 diff -u -p -r1.45 queue.h --- queue.h 12 Jul 2018 14:22:54 -0000 1.45 +++ queue.h 25 Dec 2020 14:24:08 -0000 @@ -96,7 +96,7 @@ struct name { \ struct type *slh_first; /* first element */ \ } -#define SLIST_HEAD_INITIALIZER(head) \ +#define SLIST_HEAD_INITIALIZER(head) \ { NULL } #define SLIST_ENTRY(type) \ @@ -107,43 +107,43 @@ struct { \ /* * Singly-linked List access methods. */ -#define SLIST_FIRST(head) ((head)->slh_first) -#define SLIST_END(head) NULL -#define SLIST_EMPTY(head) (SLIST_FIRST(head) == SLIST_END(head)) -#define SLIST_NEXT(elm, field) ((elm)->field.sle_next) +#define SLIST_FIRST(head) ((head)->slh_first) +#define SLIST_END(head) NULL +#define SLIST_EMPTY(head) (SLIST_FIRST(head) == SLIST_END(head)) +#define SLIST_NEXT(elm, field) ((elm)->field.sle_next) -#define SLIST_FOREACH(var, head, field) \ +#define SLIST_FOREACH(var, head, field) \ for((var) = SLIST_FIRST(head); \ (var) != SLIST_END(head); \ (var) = SLIST_NEXT(var, field)) -#define SLIST_FOREACH_SAFE(var, head, field, tvar) \ - for ((var) = SLIST_FIRST(head); \ +#define SLIST_FOREACH_SAFE(var, head, field, tvar) \ + for ((var) = SLIST_FIRST(head); \ (var) && ((tvar) = SLIST_NEXT(var, field), 1); \ (var) = (tvar)) /* * Singly-linked List functions. */ -#define SLIST_INIT(head) { \ +#define SLIST_INIT(head) { \ SLIST_FIRST(head) = SLIST_END(head); \ } -#define SLIST_INSERT_AFTER(slistelm, elm, field) do { \ +#define SLIST_INSERT_AFTER(slistelm, elm, field) do { \ (elm)->field.sle_next = (slistelm)->field.sle_next; \ (slistelm)->field.sle_next = (elm); \ } while (0) -#define SLIST_INSERT_HEAD(head, elm, field) do { \ +#define SLIST_INSERT_HEAD(head, elm, field) do { \ (elm)->field.sle_next = (head)->slh_first; \ (head)->slh_first = (elm); \ } while (0) -#define SLIST_REMOVE_AFTER(elm, field) do { \ +#define SLIST_REMOVE_AFTER(elm, field) do { \ (elm)->field.sle_next = (elm)->field.sle_next->field.sle_next; \ } while (0) -#define SLIST_REMOVE_HEAD(head, field) do { \ +#define SLIST_REMOVE_HEAD(head, field) do { \ (head)->slh_first = (head)->slh_first->field.sle_next; \ } while (0) @@ -181,25 +181,25 @@ struct { \ /* * List access methods. */ -#define LIST_FIRST(head) ((head)->lh_first) -#define LIST_END(head) NULL -#define LIST_EMPTY(head) (LIST_FIRST(head) == LIST_END(head)) -#define LIST_NEXT(elm, field) ((elm)->field.le_next) +#define LIST_FIRST(head) ((head)->lh_first) +#define LIST_END(head) NULL +#define LIST_EMPTY(head) (LIST_FIRST(head) == LIST_END(head)) +#define LIST_NEXT(elm, field) ((elm)->field.le_next) #define LIST_FOREACH(var, head, field) \ for((var) = LIST_FIRST(head); \ (var)!= LIST_END(head); \ (var) = LIST_NEXT(var, field)) -#define LIST_FOREACH_SAFE(var, head, field, tvar) \ - for ((var) = LIST_FIRST(head); \ +#define LIST_FOREACH_SAFE(var, head, field, tvar) \ + for ((var) = LIST_FIRST(head); \ (var) && ((tvar) = LIST_NEXT(var, field), 1); \ (var) = (tvar)) /* * List functions. */ -#define LIST_INIT(head) do { \ +#define LIST_INIT(head) do { \ LIST_FIRST(head) = LIST_END(head); \ } while (0) @@ -211,7 +211,7 @@ struct { \ (elm)->field.le_prev = &(listelm)->field.le_next; \ } while (0) -#define LIST_INSERT_BEFORE(listelm, elm, field) do { \ +#define LIST_INSERT_BEFORE(listelm, elm, field) do { \ (elm)->field.le_prev = (listelm)->field.le_prev; \ (elm)->field.le_next = (listelm); \ *(listelm)->field.le_prev = (elm); \ @@ -245,82 +245,84 @@ struct { \ } while (0) /* - * Simple queue definitions. + * Singly-linked tail queue definitions. */ -#define SIMPLEQ_HEAD(name, type) \ +#define STAILQ_HEAD(name, type) \ struct name { \ - struct type *sqh_first; /* first element */ \ - struct type **sqh_last; /* addr of last next element */ \ + struct type *stqh_first; /* first element */ \ + struct type **stqh_last; /* addr of last next element */ \ } -#define SIMPLEQ_HEAD_INITIALIZER(head) \ - { NULL, &(head).sqh_first } +#define STAILQ_HEAD_INITIALIZER(head) \ + { NULL, &(head).stqh_first } -#define SIMPLEQ_ENTRY(type) \ +#define STAILQ_ENTRY(type) \ struct { \ - struct type *sqe_next; /* next element */ \ + struct type *stqe_next; /* next element */ \ } /* - * Simple queue access methods. + * Singly-linked tail queue access methods. */ -#define SIMPLEQ_FIRST(head) ((head)->sqh_first) -#define SIMPLEQ_END(head) NULL -#define SIMPLEQ_EMPTY(head) (SIMPLEQ_FIRST(head) == SIMPLEQ_END(head)) -#define SIMPLEQ_NEXT(elm, field) ((elm)->field.sqe_next) - -#define SIMPLEQ_FOREACH(var, head, field) \ - for((var) = SIMPLEQ_FIRST(head); \ - (var) != SIMPLEQ_END(head); \ - (var) = SIMPLEQ_NEXT(var, field)) - -#define SIMPLEQ_FOREACH_SAFE(var, head, field, tvar) \ - for ((var) = SIMPLEQ_FIRST(head); \ - (var) && ((tvar) = SIMPLEQ_NEXT(var, field), 1); \ +#define STAILQ_FIRST(head) ((head)->stqh_first) +#define STAILQ_END(head) NULL +#define STAILQ_EMPTY(head) (STAILQ_FIRST(head) == STAILQ_END(head)) +#define STAILQ_NEXT(elm, field) ((elm)->field.stqe_next) + +#define STAILQ_FOREACH(var, head, field) \ + for((var) = STAILQ_FIRST(head); \ + (var) != STAILQ_END(head); \ + (var) = STAILQ_NEXT(var, field)) + +#define STAILQ_FOREACH_SAFE(var, head, field, tvar) \ + for ((var) = STAILQ_FIRST(head); \ + (var) && ((tvar) = STAILQ_NEXT(var, field), 1); \ (var) = (tvar)) /* - * Simple queue functions. + * Singly-linked tail queue functions. */ -#define SIMPLEQ_INIT(head) do { \ - (head)->sqh_first = NULL; \ - (head)->sqh_last = &(head)->sqh_first; \ +#define STAILQ_INIT(head) do { \ + (head)->stqh_first = NULL; \ + (head)->stqh_last = &(head)->stqh_first; \ } while (0) -#define SIMPLEQ_INSERT_HEAD(head, elm, field) do { \ - if (((elm)->field.sqe_next = (head)->sqh_first) == NULL) \ - (head)->sqh_last = &(elm)->field.sqe_next; \ - (head)->sqh_first = (elm); \ +#define STAILQ_INSERT_HEAD(head, elm, field) do { \ + if (((elm)->field.stqe_next = (head)->stqh_first) == NULL) \ + (head)->stqh_last = &(elm)->field.stqe_next; \ + (head)->stqh_first = (elm); \ } while (0) -#define SIMPLEQ_INSERT_TAIL(head, elm, field) do { \ - (elm)->field.sqe_next = NULL; \ - *(head)->sqh_last = (elm); \ - (head)->sqh_last = &(elm)->field.sqe_next; \ +#define STAILQ_INSERT_TAIL(head, elm, field) do { \ + (elm)->field.stqe_next = NULL; \ + *(head)->stqh_last = (elm); \ + (head)->stqh_last = &(elm)->field.stqe_next; \ } while (0) -#define SIMPLEQ_INSERT_AFTER(head, listelm, elm, field) do { \ - if (((elm)->field.sqe_next = (listelm)->field.sqe_next) == NULL)\ - (head)->sqh_last = &(elm)->field.sqe_next; \ - (listelm)->field.sqe_next = (elm); \ +#define STAILQ_INSERT_AFTER(head, listelm, elm, field) do { \ + if (((elm)->field.stqe_next = \ + (listelm)->field.stqe_next) == NULL) \ + (head)->stqh_last = &(elm)->field.stqe_next; \ + (listelm)->field.stqe_next = (elm); \ } while (0) -#define SIMPLEQ_REMOVE_HEAD(head, field) do { \ - if (((head)->sqh_first = (head)->sqh_first->field.sqe_next) == NULL) \ - (head)->sqh_last = &(head)->sqh_first; \ +#define STAILQ_REMOVE_HEAD(head, field) do { \ + if (((head)->stqh_first = \ + (head)->stqh_first->field.stqe_next) == NULL) \ + (head)->stqh_last = &(head)->stqh_first; \ } while (0) -#define SIMPLEQ_REMOVE_AFTER(head, elm, field) do { \ - if (((elm)->field.sqe_next = (elm)->field.sqe_next->field.sqe_next) \ - == NULL) \ - (head)->sqh_last = &(elm)->field.sqe_next; \ +#define STAILQ_REMOVE_AFTER(head, elm, field) do { \ + if (((elm)->field.stqe_next = \ + (elm)->field.stqe_next->field.stqe_next) == NULL) \ + (head)->stqh_last = &(elm)->field.stqe_next; \ } while (0) -#define SIMPLEQ_CONCAT(head1, head2) do { \ - if (!SIMPLEQ_EMPTY((head2))) { \ - *(head1)->sqh_last = (head2)->sqh_first; \ - (head1)->sqh_last = (head2)->sqh_last; \ - SIMPLEQ_INIT((head2)); \ +#define STAILQ_CONCAT(head1, head2) do { \ + if (!STAILQ_EMPTY((head2))) { \ + *(head1)->stqh_last = (head2)->stqh_first; \ + (head1)->stqh_last = (head2)->stqh_last; \ + STAILQ_INIT((head2)); \ } \ } while (0) @@ -344,18 +346,17 @@ struct { \ */ #define XSIMPLEQ_XOR(head, ptr) ((__typeof(ptr))((head)->sqx_cookie ^ \ (unsigned long)(ptr))) -#define XSIMPLEQ_FIRST(head) XSIMPLEQ_XOR(head, ((head)->sqx_first)) -#define XSIMPLEQ_END(head) NULL -#define XSIMPLEQ_EMPTY(head) (XSIMPLEQ_FIRST(head) == XSIMPLEQ_END(head)) -#define XSIMPLEQ_NEXT(head, elm, field) XSIMPLEQ_XOR(head, ((elm)->field.sqx_next)) - +#define XSIMPLEQ_FIRST(head) XSIMPLEQ_XOR(head, ((head)->sqx_first)) +#define XSIMPLEQ_END(head) NULL +#define XSIMPLEQ_EMPTY(head) (XSIMPLEQ_FIRST(head) == XSIMPLEQ_END(head)) +#define XSIMPLEQ_NEXT(head, elm, field) XSIMPLEQ_XOR(head, ((elm)->field.sqx_next)) #define XSIMPLEQ_FOREACH(var, head, field) \ for ((var) = XSIMPLEQ_FIRST(head); \ (var) != XSIMPLEQ_END(head); \ (var) = XSIMPLEQ_NEXT(head, var, field)) -#define XSIMPLEQ_FOREACH_SAFE(var, head, field, tvar) \ +#define XSIMPLEQ_FOREACH_SAFE(var, head, field, tvar) \ for ((var) = XSIMPLEQ_FIRST(head); \ (var) && ((tvar) = XSIMPLEQ_NEXT(head, var, field), 1); \ (var) = (tvar)) @@ -363,7 +364,7 @@ struct { \ /* * XOR Simple queue functions. */ -#define XSIMPLEQ_INIT(head) do { \ +#define XSIMPLEQ_INIT(head) do { \ arc4random_buf(&(head)->sqx_cookie, sizeof((head)->sqx_cookie)); \ (head)->sqx_first = XSIMPLEQ_XOR(head, NULL); \ (head)->sqx_last = XSIMPLEQ_XOR(head, &(head)->sqx_first); \ @@ -403,7 +404,6 @@ struct { \ XSIMPLEQ_XOR(head, &(elm)->field.sqx_next); \ } while (0) - /* * Tail queue definitions. */ @@ -425,15 +425,15 @@ struct { \ /* * Tail queue access methods. */ -#define TAILQ_FIRST(head) ((head)->tqh_first) -#define TAILQ_END(head) NULL -#define TAILQ_NEXT(elm, field) ((elm)->field.tqe_next) +#define TAILQ_FIRST(head) ((head)->tqh_first) +#define TAILQ_END(head) NULL +#define TAILQ_NEXT(elm, field) ((elm)->field.tqe_next) #define TAILQ_LAST(head, headname) \ (*(((struct headname *)((head)->tqh_last))->tqh_last)) /* XXX */ #define TAILQ_PREV(elm, headname, field) \ (*(((struct headname *)((elm)->field.tqe_prev))->tqh_last)) -#define TAILQ_EMPTY(head) \ +#define TAILQ_EMPTY(head) \ (TAILQ_FIRST(head) == TAILQ_END(head)) #define TAILQ_FOREACH(var, head, field) \ @@ -441,7 +441,7 @@ struct { \ (var) != TAILQ_END(head); \ (var) = TAILQ_NEXT(var, field)) -#define TAILQ_FOREACH_SAFE(var, head, field, tvar) \ +#define TAILQ_FOREACH_SAFE(var, head, field, tvar) \ for ((var) = TAILQ_FIRST(head); \ (var) != TAILQ_END(head) && \ ((tvar) = TAILQ_NEXT(var, field), 1); \ @@ -453,7 +453,7 @@ struct { \ (var) != TAILQ_END(head); \ (var) = TAILQ_PREV(var, headname, field)) -#define TAILQ_FOREACH_REVERSE_SAFE(var, head, headname, field, tvar) \ +#define TAILQ_FOREACH_REVERSE_SAFE(var, head, headname, field, tvar) \ for ((var) = TAILQ_LAST(head, headname); \ (var) != TAILQ_END(head) && \ ((tvar) = TAILQ_PREV(var, headname, field), 1); \ @@ -462,7 +462,7 @@ struct { \ /* * Tail queue functions. */ -#define TAILQ_INIT(head) do { \ +#define TAILQ_INIT(head) do { \ (head)->tqh_first = NULL; \ (head)->tqh_last = &(head)->tqh_first; \ } while (0) @@ -494,7 +494,7 @@ struct { \ (elm)->field.tqe_prev = &(listelm)->field.tqe_next; \ } while (0) -#define TAILQ_INSERT_BEFORE(listelm, elm, field) do { \ +#define TAILQ_INSERT_BEFORE(listelm, elm, field) do { \ (elm)->field.tqe_prev = (listelm)->field.tqe_prev; \ (elm)->field.tqe_next = (listelm); \ *(listelm)->field.tqe_prev = (elm); \ @@ -532,5 +532,33 @@ struct { \ TAILQ_INIT((head2)); \ } \ } while (0) + +/* + * XXX + * Temporarily aliases SIMPLEQ_* to STAILQ_*. + * To be removed as soon as all programs have switched to the new name. + */ +#define SIMPLEQ_HEAD(name, type) STAILQ_HEAD(name, type) +#define SIMPLEQ_HEAD_INITIALIZER(head) STAILQ_HEAD_INITIALIZER(head) +#define SIMPLEQ_ENTRY(type) STAILQ_ENTRY(type) +#define SIMPLEQ_FIRST(head) STAILQ_FIRST(head) +#define SIMPLEQ_END(head) STAILQ_END(head) +#define SIMPLEQ_EMPTY(head) STAILQ_EMPTY(head) +#define SIMPLEQ_NEXT(elm, field) STAILQ_NEXT(elm, field) +#define SIMPLEQ_FOREACH(var, head, field) \ + STAILQ_FOREACH(var, head, field) +#define SIMPLEQ_FOREACH_SAFE(var, head, field, tvar) \ + STAILQ_FOREACH_SAFE(var, head, field, tvar) +#define SIMPLEQ_INIT(head) STAILQ_INIT(head) +#define SIMPLEQ_INSERT_HEAD(head, elm, field) \ + STAILQ_INSERT_HEAD(head, elm, field) +#define SIMPLEQ_INSERT_TAIL(head, elm, field) \ + STAILQ_INSERT_TAIL(head, elm, field) +#define SIMPLEQ_INSERT_AFTER(head, listelm, elm, field) \ + STAILQ_INSERT_AFTER(head, listelm, elm, field) +#define SIMPLEQ_REMOVE_HEAD(head, field) STAILQ_REMOVE_HEAD(head, field) +#define SIMPLEQ_REMOVE_AFTER(head, elm, field) \ + STAILQ_REMOVE_AFTER(head, elm, field) +#define SIMPLEQ_CONCAT(head1, head2) STAILQ_CONCAT(head1, head2) #endif /* !_SYS_QUEUE_H_ */ Index: sched.h =================================================================== RCS file: /cvs/src/sys/sys/sched.h,v retrieving revision 1.56 diff -u -p -r1.56 sched.h --- sched.h 21 Oct 2019 10:24:01 -0000 1.56 +++ sched.h 25 Dec 2020 14:24:08 -0000 @@ -114,7 +114,7 @@ struct schedstate_percpu { volatile uint32_t spc_whichqs; volatile u_int spc_spinning; /* this cpu is currently spinning */ - SIMPLEQ_HEAD(, smr_entry) spc_deferred; /* deferred smr calls */ + STAILQ_HEAD(, smr_entry) spc_deferred; /* deferred smr calls */ u_int spc_ndeferred; /* number of deferred smr calls */ u_int spc_smrdepth; /* level of smr nesting */ u_char spc_smrexpedite; /* if set, dispatch smr entries Index: smr.h =================================================================== RCS file: /cvs/src/sys/sys/smr.h,v retrieving revision 1.8 diff -u -p -r1.8 smr.h --- smr.h 29 Sep 2020 16:40:33 -0000 1.8 +++ smr.h 25 Dec 2020 14:24:08 -0000 @@ -22,12 +22,12 @@ #include <sys/queue.h> struct smr_entry { - SIMPLEQ_ENTRY(smr_entry) smr_list; + STAILQ_ENTRY(smr_entry) smr_list; void (*smr_func)(void *); void *smr_arg; }; -SIMPLEQ_HEAD(smr_entry_list, smr_entry); +STAILQ_HEAD(smr_entry_list, smr_entry); #ifdef _KERNEL