]> granicus.if.org Git - spl/commit
Atomic64 compatibility for 32-bit systems without kernel support.
authorBrian Behlendorf <behlendorf1@llnl.gov>
Fri, 4 Dec 2009 23:54:12 +0000 (15:54 -0800)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Fri, 4 Dec 2009 23:54:12 +0000 (15:54 -0800)
commitd04c8a563c09d6449d5663aa2b57840653defae5
treedabaa7102180f3c4e18ac21e1f7fc3618e996bdb
parentdb1aa22297d50fa19939e487b5cc7d1f5088c64e
Atomic64 compatibility for 32-bit systems without kernel support.

This patch is another step towards updating the code to handle the
32-bit kernels which I have not been regularly testing.  This changes
do not really impact the common case I'm expected which is the latest
kernel running on an x86_64 arch.

Until the linux-2.6.31 kernel the x86 arch did not have support for
64-bit atomic operations.  Additionally, the new atomic_compat.h support
for this case was wrong because it embedded a spinlock in the atomic
variable which must always and only be 64-bits total.  To handle these
32-bit issues we now simply fall back to the --enable-atomic-spinlock
implementation if the kernel does not provide the 64-bit atomic funcs.

The second issue this patch addresses is the DEBUG_KMEM assumption that
there will always be atomic64 funcs available.  On 32-bit archs this may
not be true, and actually that's just fine.  In that case the kernel will
will never be able to allocate more the 32-bits worth anyway.  So just
check if atomic64 funcs are available, if they are not it means this
is a 32-bit machine and we can safely use atomic_t's instead.
config/spl-build.m4
configure
include/Makefile.am
include/Makefile.in
include/asm/Makefile.in [deleted file]
include/asm/atomic_compat.h [deleted file]
include/sys/atomic.h
include/sys/kmem.h
module/spl/spl-kmem.c
module/spl/spl-proc.c