* x86: fls64() exported to user space but not fls()?
@ 2011-12-15 22:42 H. Peter Anvin
2011-12-15 23:25 ` [tip:x86/asm] x86, bitops: Move fls64.h inside __KERNEL__ tip-bot for H. Peter Anvin
0 siblings, 1 reply; 2+ messages in thread
From: H. Peter Anvin @ 2011-12-15 22:42 UTC (permalink / raw)
To: David Howells, Stephen Hemminger, Alexander van Heukelum,
Ingo Molnar, Thomas Gleixner
Cc: Linux Kernel Mailing List
I'm trying to grok why fls64() seems to be exported to user space in
<asm/bitops.h> on x86 by unconditional inclusion of
<asm-generic/bitops/fls64.h>:
...
#endif /* __KERNEL__ */
#include <asm-generic/bitops/fls64.h>
#ifdef __KERNEL__
...
whereas fls() isn't (although __fls() is!)
This is even more bizarre since <asm-generic/bitops/fls64.h> contains:
...
#if BITS_PER_LONG == 32
static __always_inline int fls64(__u64 x)
{
__u32 h = x >> 32;
if (h)
return fls(h) + 32;
return fls(x);
}
#elif BITS_PER_LONG == 64
static __always_inline int fls64(__u64 x)
{
if (x == 0)
return 0;
return __fls(x) + 1;
}
#else
#error BITS_PER_LONG not 32 or 64
#endif
...
Both BITS_PER_LONG and fls() are non-user-visible symbols, so this code
should fail on user space. Finally, <asm-generic/bitops/*> are
non-exported headers; they are not installed by make headers_install.
Is the #endif..#ifdef in <asm/bitops.h> a bug, plain and simple?
-hpa
^ permalink raw reply [flat|nested] 2+ messages in thread
* [tip:x86/asm] x86, bitops: Move fls64.h inside __KERNEL__
2011-12-15 22:42 x86: fls64() exported to user space but not fls()? H. Peter Anvin
@ 2011-12-15 23:25 ` tip-bot for H. Peter Anvin
0 siblings, 0 replies; 2+ messages in thread
From: tip-bot for H. Peter Anvin @ 2011-12-15 23:25 UTC (permalink / raw)
To: linux-tip-commits
Cc: linux-kernel, hpa, mingo, shemminger, dhowells, heukelum, tglx, hpa
Commit-ID: 83d99df7c4bf37176d8c7b199e3b129a51fa04c8
Gitweb: http://git.kernel.org/tip/83d99df7c4bf37176d8c7b199e3b129a51fa04c8
Author: H. Peter Anvin <hpa@linux.intel.com>
AuthorDate: Thu, 15 Dec 2011 14:55:53 -0800
Committer: H. Peter Anvin <hpa@linux.intel.com>
CommitDate: Thu, 15 Dec 2011 15:04:07 -0800
x86, bitops: Move fls64.h inside __KERNEL__
We would include <asm-generic/bitops/fls64.h> even without __KERNEL__,
but that doesn't make sense, as:
1. That file provides fls64(), but the corresponding function fls() is
not exported to user space.
2. The implementation of fls64.h uses kernel-only symbols.
3. fls64.h is not exported to user space.
This appears to have been a bug introduced in checkin:
d57594c203b1 bitops: use __fls for fls64 on 64-bit archs
Cc: Stephen Hemminger <shemminger@vyatta.com>
Cc: Alexander van Heukelum <heukelum@mailshack.com>
Cc: David Howells <dhowells@redhat.com>
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
Link: http://lkml.kernel.org/r/4EEA77E1.6050009@zytor.com
---
arch/x86/include/asm/bitops.h | 11 ++---------
1 files changed, 2 insertions(+), 9 deletions(-)
diff --git a/arch/x86/include/asm/bitops.h b/arch/x86/include/asm/bitops.h
index 1775d6e..4a6235b 100644
--- a/arch/x86/include/asm/bitops.h
+++ b/arch/x86/include/asm/bitops.h
@@ -380,6 +380,8 @@ static inline unsigned long __fls(unsigned long word)
return word;
}
+#undef ADDR
+
#ifdef __KERNEL__
/**
* ffs - find first set bit in word
@@ -434,11 +436,6 @@ static inline int fls(int x)
#endif
return r + 1;
}
-#endif /* __KERNEL__ */
-
-#undef ADDR
-
-#ifdef __KERNEL__
#include <asm-generic/bitops/find.h>
@@ -450,12 +447,8 @@ static inline int fls(int x)
#include <asm-generic/bitops/const_hweight.h>
-#endif /* __KERNEL__ */
-
#include <asm-generic/bitops/fls64.h>
-#ifdef __KERNEL__
-
#include <asm-generic/bitops/le.h>
#include <asm-generic/bitops/ext2-atomic-setbit.h>
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2011-12-15 23:25 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-12-15 22:42 x86: fls64() exported to user space but not fls()? H. Peter Anvin
2011-12-15 23:25 ` [tip:x86/asm] x86, bitops: Move fls64.h inside __KERNEL__ tip-bot for H. Peter Anvin
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome