summaryrefslogtreecommitdiffstats
path: root/arch/x86/include/asm/x86_init.h
diff options
context:
space:
mode:
authorDavid Vrabel <david.vrabel@citrix.com>2012-01-23 19:32:25 +0000
committerKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>2012-01-24 12:10:19 -0500
commit7a7546b377bdaa25ac77f33d9433c59f259b9688 (patch)
treeab4b43b4b3b50913e8f3abfe98190d0e0a472bf5 /arch/x86/include/asm/x86_init.h
parent8ea11f7f11c811d1f502c2dabc5259d447c2f2a0 (diff)
downloadlinux-7a7546b377bdaa25ac77f33d9433c59f259b9688.tar.gz
linux-7a7546b377bdaa25ac77f33d9433c59f259b9688.tar.bz2
linux-7a7546b377bdaa25ac77f33d9433c59f259b9688.zip
x86: xen: size struct xen_spinlock to always fit in arch_spinlock_t
If NR_CPUS < 256 then arch_spinlock_t is only 16 bits wide but struct xen_spinlock is 32 bits. When a spin lock is contended and xl->spinners is modified the two bytes immediately after the spin lock would be corrupted. This is a regression caused by 84eb950db13ca40a0572ce9957e14723500943d6 (x86, ticketlock: Clean up types and accessors) which reduced the size of arch_spinlock_t. Fix this by making xl->spinners a u8 if NR_CPUS < 256. A BUILD_BUG_ON() is also added to check the sizes of the two structures are compatible. In many cases this was not noticable as there would often be padding bytes after the lock (e.g., if any of CONFIG_GENERIC_LOCKBREAK, CONFIG_DEBUG_SPINLOCK, or CONFIG_DEBUG_LOCK_ALLOC were enabled). The bnx2 driver is affected. In struct bnx2, phy_lock and indirect_lock may have no padding after them. Contention on phy_lock would corrupt indirect_lock making it appear locked and the driver would deadlock. Signed-off-by: David Vrabel <david.vrabel@citrix.com> Signed-off-by: Jeremy Fitzhardinge <jeremy@goop.org> Acked-by: Ian Campbell <ian.campbell@citrix.com> CC: stable@kernel.org #only 3.2 Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Diffstat (limited to 'arch/x86/include/asm/x86_init.h')
0 files changed, 0 insertions, 0 deletions