Messages in this thread | | | Date | 15 Jun 2016 08:44:09 -0400 | From | "George Spelvin" <> | Subject | Re: [PATCH] tools/perf: fix the word selected in find_*_bit |
| |
Madhavan Srinivasan wrote: > +#if (__BYTE_ORDER == __BIG_ENDIAN) && (BITS_PER_LONG != 64) > + tmp = addr[(((nbits - 1)/BITS_PER_LONG) - (start / BITS_PER_LONG))] > + ^ invert; > +#else > tmp = addr[start / BITS_PER_LONG] ^ invert; > +#endif
Than you for diagnosing this problem, but I don't think the fix is correct.
1) It's not clear that all users of _find_next_bit and for_each_set_bit() want this change. 2) Is your code even correct? I'd think you'd want addr[x ^ 1]. Are you sure you shpuld be reversing the whole array, and not just the halves of each 64-bit word? 3) You've now broken the case of 32-bit big-endian kernel.
I think the proper solution is uglier than this. :-(
| |