fix llist_for_each_entry*
authorjsg <jsg@openbsd.org>
Wed, 27 Jul 2022 06:57:06 +0000 (06:57 +0000)
committerjsg <jsg@openbsd.org>
Wed, 27 Jul 2022 06:57:06 +0000 (06:57 +0000)
commit75a9d582dab09c68dd5c13290c15f09bd3f36393
tree7f3d2cea312163c20fdef63ccc9f18a9f0cf5f04
parentc06983ae919a087e9a01674cf945e05d4501f368
fix llist_for_each_entry*

enabling more of __notify_execute_cb() and running the intel xorg driver
on broadwell would fault in __notify_execute_cb() on
movq 0x38(%rsi),%r12

offsetof(struct execute_cb, work.node.llist) 0x38

llist_entry(NULL must not return NULL, it needs to wrap around
and return NULL minus the offset

the iterators stop when the offset added back to the result of
llist_entry() is NULL

they test that the first node is not NULL or that the next pointer
stored in a previous iteration of the loop is not NULL
sys/dev/pci/drm/include/linux/llist.h