Module Name: xsrc Committed By: martin Date: Mon Jul 15 08:26:10 UTC 2019
Modified Files: xsrc/external/mit/xf86-video-intel/dist/src [netbsd-8]: intel_list.h Log Message: Pull up following revision(s) (requested by mrg in ticket #1290): external/mit/xf86-video-intel/dist/src/intel_list.h: revision 1.2 merge changes from xorg-server 1.20 list.h into this older version. fixes sandy bridge crashing problems for me. To generate a diff of this commit: cvs rdiff -u -r1.1.1.2 -r1.1.1.2.2.1 \ xsrc/external/mit/xf86-video-intel/dist/src/intel_list.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: xsrc/external/mit/xf86-video-intel/dist/src/intel_list.h diff -u xsrc/external/mit/xf86-video-intel/dist/src/intel_list.h:1.1.1.2 xsrc/external/mit/xf86-video-intel/dist/src/intel_list.h:1.1.1.2.2.1 --- xsrc/external/mit/xf86-video-intel/dist/src/intel_list.h:1.1.1.2 Wed Nov 5 17:56:20 2014 +++ xsrc/external/mit/xf86-video-intel/dist/src/intel_list.h Mon Jul 15 08:26:10 2019 @@ -305,9 +305,20 @@ list_is_empty(const struct list *head) #define list_last_entry(ptr, type, member) \ list_entry((ptr)->prev, type, member) -#define __container_of(ptr, sample, member) \ - (void *)((char *)(ptr) \ - - ((char *)&(sample)->member - (char *)(sample))) +#ifdef HAVE_TYPEOF +#define __container_of(ptr, sample, member) \ + container_of(ptr, typeof(*sample), member) +#else +/* This implementation of __container_of has undefined behavior according + * to the C standard, but it works in many cases. If your compiler doesn't + * support typeof() and fails with this implementation, please try a newer + * compiler. + */ +#define __container_of(ptr, sample, member) \ + (void *)((char *)(ptr) \ + - ((char *)&(sample)->member - (char *)(sample))) +#endif + /** * Loop through the list given by head and set pos to struct in the list. * @@ -326,12 +337,14 @@ list_is_empty(const struct list *head) * */ #define list_for_each_entry(pos, head, member) \ - for (pos = __container_of((head)->next, pos, member); \ + for (pos = NULL, \ + pos = __container_of((head)->next, pos, member); \ &pos->member != (head); \ pos = __container_of(pos->member.next, pos, member)) #define list_for_each_entry_reverse(pos, head, member) \ - for (pos = __container_of((head)->prev, pos, member); \ + for (pos = NULL, \ + pos = __container_of((head)->prev, pos, member); \ &pos->member != (head); \ pos = __container_of(pos->member.prev, pos, member)) @@ -343,7 +356,8 @@ list_is_empty(const struct list *head) * See list_for_each_entry for more details. */ #define list_for_each_entry_safe(pos, tmp, head, member) \ - for (pos = __container_of((head)->next, pos, member), \ + for (pos = NULL, \ + pos = __container_of((head)->next, pos, member), \ tmp = __container_of(pos->member.next, pos, member); \ &pos->member != (head); \ pos = tmp, tmp = __container_of(pos->member.next, tmp, member))