mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* 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