kernel_optimize_test/include/asm-arm
Rafael J. Wysocki 8a102eed9c [PATCH] PM: Fix SMP races in the freezer
Currently, to tell a task that it should go to the refrigerator, we set the
PF_FREEZE flag for it and send a fake signal to it.  Unfortunately there
are two SMP-related problems with this approach.  First, a task running on
another CPU may be updating its flags while the freezer attempts to set
PF_FREEZE for it and this may leave the task's flags in an inconsistent
state.  Second, there is a potential race between freeze_process() and
refrigerator() in which freeze_process() running on one CPU is reading a
task's PF_FREEZE flag while refrigerator() running on another CPU has just
set PF_FROZEN for the same task and attempts to reset PF_FREEZE for it.  If
the refrigerator wins the race, freeze_process() will state that PF_FREEZE
hasn't been set for the task and will set it unnecessarily, so the task
will go to the refrigerator once again after it's been thawed.

To solve first of these problems we need to stop using PF_FREEZE to tell
tasks that they should go to the refrigerator.  Instead, we can introduce a
special TIF_*** flag and use it for this purpose, since it is allowed to
change the other tasks' TIF_*** flags and there are special calls for it.

To avoid the freeze_process()-refrigerator() race we can make
freeze_process() to always check the task's PF_FROZEN flag after it's read
its "freeze" flag.  We should also make sure that refrigerator() will
always reset the task's "freeze" flag after it's set PF_FROZEN for it.

Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
Acked-by: Pavel Machek <pavel@ucw.cz>
Cc: Russell King <rmk@arm.linux.org.uk>
Cc: David Howells <dhowells@redhat.com>
Cc: Andi Kleen <ak@muc.de>
Cc: "Luck, Tony" <tony.luck@intel.com>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Paul Mundt <lethal@linux-sh.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2006-12-13 09:05:49 -08:00
..
arch-aaec2000 [ARM] Clean up discontigmem support 2006-11-30 22:52:28 +00:00
arch-at91rm9200 [ARM] 3977/1: AT91: remove loop waiting for reset 2006-12-04 14:37:42 +00:00
arch-cl7500
arch-clps711x [ARM] Clean up discontigmem support 2006-11-30 22:52:28 +00:00
arch-ebsa110 [ARM] ebsa110: fix warnings generated by asm/arch/io.h 2006-11-20 15:59:10 +00:00
arch-ebsa285 fix file specification in comments 2006-10-03 23:01:26 +02:00
arch-ep93xx
arch-h720x fix file specification in comments 2006-10-03 23:01:26 +02:00
arch-imx [ARM] 3991/1: i.MX/MX1 high resolution time source 2006-12-07 16:24:16 +00:00
arch-integrator
arch-iop13xx [ARM] 3995/1: iop13xx: add iop13xx support 2006-12-07 17:20:21 +00:00
arch-iop32x
arch-iop33x
arch-ixp4xx Merge branch 'for-linus' of master.kernel.org:/home/rmk/linux-2.6-arm 2006-12-07 15:40:39 -08:00
arch-ixp23xx
arch-ixp2000
arch-l7200 [ARM] Remove "translated" io macros 2006-11-30 14:39:14 +00:00
arch-lh7a40x [ARM] Clean up discontigmem support 2006-11-30 22:52:28 +00:00
arch-netx
arch-omap WorkQueue: Fix up arch-specific work items where possible 2006-12-05 19:36:26 +00:00
arch-pnx4008 i2c: New Philips PNX bus driver 2006-12-10 21:21:29 +01:00
arch-pxa [PATCH] spi: stabilize PIO mode transfers on PXA2xx systems 2006-12-10 09:55:40 -08:00
arch-realview
arch-rpc
arch-s3c2410 [PATCH] s3c2410fb: Add support for STN displays 2006-12-08 08:29:05 -08:00
arch-sa1100 [ARM] Merge individual ARM sub-trees 2006-12-07 23:07:26 +00:00
arch-shark fix file specification in comments 2006-10-03 23:01:26 +02:00
arch-versatile [PATCH] arm-versatile iomem annotations 2006-10-11 11:17:06 -07:00
hardware Initial blind fixup for arm for irq changes 2006-10-06 10:59:54 -07:00
mach [ARM] Remove compatibility layer for ARM irqs 2006-11-30 12:24:47 +00:00
a.out.h
apm.h
assembler.h
atomic.h
auxvec.h
bitops.h
bug.h [ARM] 3983/2: remove unused argument to __bug() 2006-12-07 22:38:09 +00:00
bugs.h
byteorder.h
cache.h
cacheflush.h
checksum.h [NET]: ARM checksum annotations and cleanups. 2006-12-02 21:23:15 -08:00
cnt32_to_63.h [ARM] 3978/1: macro to provide a 63-bit value from a 32-bit hardware counter 2006-12-07 16:06:45 +00:00
cpu-multi32.h
cpu-single.h
cpu.h
cputime.h
current.h
delay.h
device.h Driver core: add dev_archdata to struct device 2006-12-01 14:52:01 -08:00
div64.h [ARM] 3611/4: optimize do_div() when divisor is constant 2006-12-07 16:06:09 +00:00
dma-mapping.h [PATCH] Add struct dev pointer to dma_is_consistent() 2006-12-07 08:39:41 -08:00
dma.h
domain.h
dyntick.h
ecard.h
elf.h [ARM] 3881/4: xscale: clean up cp0/cp1 handling 2006-12-03 17:52:22 +00:00
emergency-restart.h
errno.h
fcntl.h
fiq.h
flat.h
floppy.h
fpstate.h
futex.h
glue.h
hardirq.h
hardware.h
hw_irq.h [PATCH] misc arm pt_regs fixes 2006-10-08 12:32:36 -07:00
ide.h
io.h [ARM] Remove warnings for __io_pci and __arch_(get|put)* 2006-11-30 14:36:29 +00:00
ioctl.h
ioctls.h
ipc.h
ipcbuf.h
irq_regs.h Initial blind fixup for arm for irq changes 2006-10-06 10:59:54 -07:00
irq.h
irqflags.h
Kbuild
kmap_types.h
leds.h
limits.h
linkage.h
local.h
locks.h
mc146818rtc.h
memory.h [ARM] Clean up discontigmem support 2006-11-30 22:52:28 +00:00
mman.h
mmu_context.h
mmu.h
mmzone.h
module.h
msgbuf.h
mtd-xip.h
mutex.h
namei.h
nwflash.h
page-nommu.h
page.h
param.h
parport.h
pci.h
percpu.h
pgalloc.h
pgtable-hwdef.h
pgtable-nommu.h [ARM] Fix nommu build 2006-11-30 13:53:54 +00:00
pgtable.h [ARM] 3971/1: xsc3: get rid of L_PTE_COHERENT 2006-12-01 23:40:23 +00:00
poll.h
posix_types.h
proc-fns.h
processor.h [ARM] Include asm/elf.h instead of asm/procinfo.h 2006-11-30 12:24:46 +00:00
procinfo.h [ARM] Move HWCAP_* definitions to asm/elf.h 2006-11-30 12:24:46 +00:00
ptrace.h
resource.h
rtc.h
scatterlist.h
sections.h
segment.h
semaphore-helper.h
semaphore.h
sembuf.h
serial.h
setup.h [PATCH] cleanup asm/setup.h userspace visibility 2006-12-07 08:39:46 -08:00
shmbuf.h
shmparam.h
sigcontext.h
siginfo.h
signal.h
sizes.h
smp.h
socket.h
sockios.h
spinlock_types.h
spinlock.h [PATCH] Directed yield: cpu_relax variants for spinlocks and rw-locks 2006-10-01 00:39:21 -07:00
stat.h
statfs.h
string.h
suspend.h
system.h
termbits.h [PATCH] tty: preparatory structures for termios revamp 2006-12-08 08:28:56 -08:00
termios.h
therm.h
thread_info.h [PATCH] PM: Fix SMP races in the freezer 2006-12-13 09:05:49 -08:00
thread_notify.h
timex.h
tlb.h
tlbflush.h
topology.h
traps.h
types.h
uaccess.h [ARM] Add __must_check to uaccess functions 2006-10-28 10:15:31 +01:00
ucontext.h
unaligned.h
unistd.h [PATCH] remove kernel syscalls 2006-12-07 08:39:37 -08:00
user.h
vfp.h
vfpmacros.h
vga.h
xor.h