Thread (16 messages) flat view 16 messages, 7 authors, 2016-06-16

Re: [PATCH] tools/perf: fix the word selected in find_*_bit

From: Madhavan Srinivasan <hidden>
Date: 2016-06-16 07:22:25
Also in: lkml


On Wednesday 15 June 2016 06:14 PM, George Spelvin wrote:
Madhavan Srinivasan wrote:
quoted
+#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.
Yes. But looks like we havent hit this case yet. Will post a fix.

Maddy
I think the proper solution is uglier than this. :-(
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help