android_kernel_xiaomi_sm8350/include/asm-frv
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
..
a.out.h
atomic.h
auxvec.h
ax88796.h
bitops.h [PATCH] LOG2: Implement a general integer log2 facility in the kernel 2006-12-08 08:28:51 -08:00
bug.h
bugs.h
busctl-regs.h
byteorder.h
cache.h
cacheflush.h
checksum.h [NET]: FRV checksum annotations. 2006-12-02 21:23:03 -08:00
cpu-irqs.h [PATCH] FRV: Use the generic IRQ stuff 2006-09-26 08:48:53 -07:00
cpumask.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
dm9000.h
dma-mapping.h [PATCH] Pass struct dev pointer to dma_cache_sync() 2006-12-07 08:39:41 -08:00
dma.h IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
elf.h [PATCH] FDPIC: Add coredump capability for the ELF-FDPIC binfmt 2006-07-10 13:24:22 -07:00
emergency-restart.h
errno.h
fcntl.h
fpu.h
futex.h
gdb-stub.h [PATCH] FRV: Introduce asm-offsets for FRV arch 2006-07-10 13:24:22 -07:00
gpio-regs.h
hardirq.h [PATCH] FRV: Use the generic IRQ stuff 2006-09-26 08:48:53 -07:00
highmem.h [PATCH] mm: pagefault_{disable,enable}() 2006-12-07 08:39:21 -08:00
hw_irq.h
ide.h
init.h
io.h [PATCH] Consolidate check_signature 2006-10-11 11:14:23 -07:00
ioctl.h
ioctls.h
ipc.h
ipcbuf.h
irc-regs.h
irq_regs.h IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
irq.h [PATCH] FRV: Use the generic IRQ stuff 2006-09-26 08:48:53 -07:00
Kbuild
kmap_types.h
linkage.h
local.h
math-emu.h
mb86943a.h
mb93091-fpga-irqs.h [PATCH] FRV: Use the generic IRQ stuff 2006-09-26 08:48:53 -07:00
mb93093-fpga-irqs.h [PATCH] FRV: Use the generic IRQ stuff 2006-09-26 08:48:53 -07:00
mb93493-irqs.h [PATCH] FRV: Use the generic IRQ stuff 2006-09-26 08:48:53 -07:00
mb93493-regs.h [PATCH] FRV: Use the generic IRQ stuff 2006-09-26 08:48:53 -07:00
mb-regs.h
mc146818rtc.h
mem-layout.h
mman.h
mmu_context.h
mmu.h
module.h
msgbuf.h
mutex.h
namei.h fix file specification in comments 2006-10-03 23:01:26 +02:00
page.h
param.h [PATCH] cleanup asm/setup.h userspace visibility 2006-12-07 08:39:46 -08:00
pci.h
percpu.h
pgalloc.h
pgtable.h [PATCH] paravirt: remove set pte atomic 2006-10-01 00:39:34 -07:00
poll.h
posix_types.h
processor.h [PATCH] Make cpu_relax() imply barrier() on all arches 2006-07-12 12:56:45 -07:00
ptrace.h IRQ: Maintain regs pointer globally rather than passing to IRQ handlers 2006-10-05 15:10:12 +01:00
registers.h [PATCH] FRV: Introduce asm-offsets for FRV arch 2006-07-10 13:24:22 -07:00
resource.h
scatterlist.h
sections.h
segment.h
semaphore.h
sembuf.h
serial-regs.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
smp.h
socket.h
sockios.h
spinlock.h
spr-regs.h
stat.h
statfs.h
string.h
suspend.h
system.h [PATCH] remove set_wmb - arch removal 2006-07-14 21:56:14 -07:00
termbits.h [PATCH] tty: preparatory structures for termios revamp 2006-12-08 08:28:56 -08:00
termios.h
thread_info.h [PATCH] PM: Fix SMP races in the freezer 2006-12-13 09:05:49 -08:00
timer-regs.h
timex.h [PATCH] ntp: cleanup defines and comments 2006-10-01 00:39:27 -07:00
tlb.h
tlbflush.h
topology.h
types.h
uaccess.h
ucontext.h
unaligned.h
unistd.h [PATCH] remove kernel syscalls 2006-12-07 08:39:37 -08:00
user.h
vga.h
virtconvert.h
xor.h