linux/drivers
Thomas Gleixner 0a7992c908 acpi: fix bogus preemption logic
The ACPI_PREEMPTION_POINT() logic was introduced in commit 8bd108d
(ACPICA: add preemption point after each opcode parse).  The follow up
commits abe1dfab6, 138d15692, c084ca70 tried to fix the preemption logic
back and forth, but nobody noticed that the usage of
in_atomic_preempt_off() in that context is wrong.

The check which guards the call of cond_resched() is:

    if (!in_atomic_preempt_off() && !irqs_disabled())

in_atomic_preempt_off() is not intended for general use as the comment
above the macro definition clearly says:

 * Check whether we were atomic before we did preempt_disable():
 * (used by the scheduler, *after* releasing the kernel lock)

On a CONFIG_PREEMPT=n kernel the usage of in_atomic_preempt_off() works by
accident, but with CONFIG_PREEMPT=y it's just broken.

The whole purpose of the ACPI_PREEMPTION_POINT() is to reduce the latency
on a CONFIG_PREEMPT=n kernel, so make ACPI_PREEMPTION_POINT() depend on
CONFIG_PREEMPT=n and remove the in_atomic_preempt_off() check.

Addresses https://bugzilla.kernel.org/show_bug.cgi?id=16210

[akpm@linux-foundation.org: fix build]
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Len Brown <lenb@kernel.org>
Cc: Francois Valenduc <francois.valenduc@tvcablenet.be>
Cc: Lin Ming <ming.m.lin@intel.com>
Cc: <stable@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2010-08-12 08:43:29 -07:00
..
accessibility
acpi acpi: fix bogus preemption logic 2010-08-12 08:43:29 -07:00
amba
ata Merge branch 'for-linus' of master.kernel.org:/home/rmk/linux-2.6-arm 2010-08-11 09:13:19 -07:00
atm Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6 2010-08-09 21:05:52 -07:00
auxdisplay
base drivers/base/node.c: reduce stack usage of node_read_meminfo() 2010-08-09 20:45:02 -07:00
block Merge branch 'for-2.6.36' of git://git.kernel.dk/linux-2.6-block 2010-08-10 15:22:42 -07:00
bluetooth Merge git://git.kernel.org/pub/scm/linux/kernel/git/brodo/pcmcia-2.6 2010-08-06 12:25:06 -07:00
cdrom block: push down BKL into .open and .release 2010-08-07 18:25:34 +02:00
char kfifo: fix kfifo miss use of nozami.c 2010-08-11 08:59:23 -07:00
clocksource
connector
cpufreq
cpuidle cpuidle: extend cpuidle and menu governor to handle dynamic states 2010-08-09 20:45:04 -07:00
crypto Merge branch 'ixp4xx' of git://git.kernel.org/pub/scm/linux/kernel/git/chris/linux-2.6 2010-08-11 09:17:27 -07:00
dca
dio
dma Merge branches 'master' and 'devel' into for-linus 2010-08-10 23:17:52 +01:00
edac edac: mpc85xx: add support for new MPCxxx/Pxxxx EDAC controllers 2010-08-11 08:59:21 -07:00
eisa
firewire
firmware edd: fix possible memory leak in edd_init() error path 2010-08-09 20:45:09 -07:00
gpio gpio: sx150x: add Semtech I2C sx150x gpio expander driver 2010-08-11 08:59:09 -07:00
gpu vt/console: try harder to print output when panicing 2010-08-10 13:47:40 -07:00
hid Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input 2010-08-10 15:08:02 -07:00
hwmon fix "hwmon: coretemp: update hotplug condition check" 2010-08-11 08:58:59 -07:00
i2c Merge branch 'for-rmk' of git://git.kernel.org/pub/scm/linux/kernel/git/kgene/linux-samsung into devel-stable 2010-08-09 14:07:19 +01:00
ide Merge branch 'for-2.6.36' of git://git.kernel.dk/linux-2.6-block 2010-08-10 15:22:42 -07:00
idle
ieee1394
ieee802154
infiniband RDMA/cxgb4: Obtain RDMA QID ranges from LLD/FW 2010-08-07 23:08:47 -07:00
input panic: keep blinking in spite of long spin timer mode 2010-08-11 08:59:22 -07:00
isdn Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6 2010-08-09 21:05:52 -07:00
leds leds: Remove owner field from attribute initialization in bd2802 driver 2010-08-05 13:53:35 -07:00
lguest
macintosh Merge branch 'irq-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2010-08-06 13:25:43 -07:00
mca
md Merge branch 'for-linus' of git://neil.brown.name/md 2010-08-10 15:38:19 -07:00
media Merge branch 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6 2010-08-10 15:09:54 -07:00
memstick block: push down BKL into .open and .release 2010-08-07 18:25:34 +02:00
message fusion: fix kernel-doc warnings 2010-08-11 08:59:12 -07:00
mfd
misc cs5535-mfgpt: reuse timers that have never been set up 2010-08-11 08:59:20 -07:00
mmc mmc: add ricoh e822 pci id 2010-08-11 08:59:05 -07:00
mtd mtd/nand_base: fix kernel-doc warnings & typos 2010-08-11 08:59:18 -07:00
net Merge branch 'ixp4xx' of git://git.kernel.org/pub/scm/linux/kernel/git/chris/linux-2.6 2010-08-11 09:17:27 -07:00
nubus
of
oprofile
parisc
parport parport_serial: use the PCI IRQ if offered 2010-08-11 08:59:22 -07:00
pci Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/djbw/async_tx 2010-08-09 21:00:07 -07:00
pcmcia Merge branches 'master' and 'devel' into for-linus 2010-08-10 23:17:52 +01:00
platform
pnp
power Merge branch 'for-linus' of master.kernel.org:/home/rmk/linux-2.6-arm 2010-08-11 09:13:19 -07:00
pps
ps3
rapidio
regulator regulator: Remove owner field from attribute initialization in regulator core driver 2010-08-05 13:53:35 -07:00
rtc Merge branch 'for-linus' of master.kernel.org:/home/rmk/linux-2.6-arm 2010-08-11 09:13:19 -07:00
s390 Merge branch 'for-2.6.36' of git://git.kernel.dk/linux-2.6-block 2010-08-10 15:22:42 -07:00
sbus Merge branch 'next-devicetree' of git://git.secretlab.ca/git/linux-2.6 2010-08-05 15:57:35 -07:00
scsi scsi: 53c700: remove dma_is_consistent usage 2010-08-11 08:59:21 -07:00
serial Merge branch 'for-linus' of master.kernel.org:/home/rmk/linux-2.6-arm 2010-08-11 09:13:19 -07:00
sfi
sh
sn
spi
ssb Merge git://git.kernel.org/pub/scm/linux/kernel/git/brodo/pcmcia-2.6 2010-08-06 12:25:06 -07:00
staging Merge branch 'for-2.6.36' of git://git.kernel.dk/linux-2.6-block 2010-08-10 15:22:42 -07:00
tc
telephony
thermal
uio uio: Remove IRQF_DISABLED flag from uio_cif.c 2010-08-05 13:53:33 -07:00
usb Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb-2.6 2010-08-10 15:05:02 -07:00
uwb
vhost
video Merge branch 'msm-video' of git://codeaurora.org/quic/kernel/dwalker/linux-msm 2010-08-11 09:18:06 -07:00
virtio
vlynq
w1
watchdog watchdog: hpwdt: formatting of pointers in printk() 2010-08-08 18:22:44 +00:00
xen Merge branch 'for-2.6.36' of git://git.kernel.dk/linux-2.6-block 2010-08-10 15:22:42 -07:00
zorro zorro: Fix reading of proc/bus/zorro/* in small chunks 2010-08-09 21:14:08 +02:00
Kconfig
Makefile