linux/include
Hugh Dickins 5fe8e8b88e [POWERPC] Make current preempt-safe
Repeated -j20 kernel builds on a G5 Quad running an SMP PREEMPT kernel
would often collapse within a day, some exec failing with "Bad address".
In each case examined, load_elf_binary was doing a kernel_read, but
generic_file_aio_read's access_ok saw current->thread.fs.seg as USER_DS
instead of KERNEL_DS.

objdump of filemap.o shows gcc 4.1.0 emitting "mr r5,r13 ... ld r9,416(r5)"
here for get_paca()->__current, instead of the expected and much more usual
"ld r9,416(r13)"; I've seen other gcc4s do the same, but perhaps not gcc3s.

So, if the task is preempted and rescheduled on a different cpu in between
the mr and the ld, r5 will be looking at a different paca_struct from the
one it's now on, pick up the wrong __current, and perhaps the wrong seg.
Presumably much worse could happen elsewhere, though that split is rare.

Other architectures appear to be safe (x86_64's read_pda is more limiting
than get_paca), but ppc64 needs to force "current" into one instruction.

Signed-off-by: Hugh Dickins <hugh@veritas.com>
Signed-off-by: Paul Mackerras <paulus@samba.org>
2006-11-01 14:52:48 +11:00
..
acpi ACPI: Processor native C-states using MWAIT 2006-10-14 00:35:39 -04:00
asm-alpha [PATCH] Consolidate check_signature 2006-10-11 11:14:23 -07:00
asm-arm [ARM] Add __must_check to uaccess functions 2006-10-28 10:15:31 +01:00
asm-arm26 fix file specification in comments 2006-10-03 23:01:26 +02:00
asm-avr32 [PATCH] AVR32: add io{read,write}{8,16,32}{be,} support 2006-10-25 20:26:33 -07:00
asm-cris [PATCH] remove remaining errno and __KERNEL_SYSCALLS__ references 2006-10-02 07:57:23 -07:00
asm-frv [PATCH] FRV: Use the correct preemption primitives in kmap_atomic() and co 2006-10-16 08:32:29 -07:00
asm-generic [PATCH] drivers: wait for threaded probes between initcall levels 2006-10-27 15:34:51 -07:00
asm-h8300 [PATCH] remove remaining errno and __KERNEL_SYSCALLS__ references 2006-10-02 07:57:23 -07:00
asm-i386 [PATCH] visws build fix 2006-10-28 11:30:52 -07:00
asm-ia64 [IA64] move SAL_CACHE_FLUSH check later in boot 2006-10-31 14:32:10 -08:00
asm-m32r [PATCH] Consolidate check_signature 2006-10-11 11:14:23 -07:00
asm-m68k [PATCH] sun3_ioremap() prototype 2006-10-15 11:00:58 -07:00
asm-m68knommu [PATCH] m68knommu: sync syscalls with m68k 2006-10-13 08:35:39 -07:00
asm-mips [MIPS] Fixup migration to GENERIC_TIME 2006-10-31 20:13:23 +00:00
asm-parisc [PARISC] pdc_init no longer exists 2006-10-07 05:22:30 -06:00
asm-powerpc [POWERPC] Make current preempt-safe 2006-11-01 14:52:48 +11:00
asm-ppc [PATCH] Consolidate check_signature 2006-10-11 11:14:23 -07:00
asm-s390 [S390] Fix pte type checking. 2006-10-18 18:30:51 +02:00
asm-sh sh: Fix IPR-IRQ's for IRQ-chip change breakage. 2006-10-31 12:53:28 +09:00
asm-sh64 [PATCH] Consolidate check_signature 2006-10-11 11:14:23 -07:00
asm-sparc [SPARC]: Clean up asm-sparc/elf.h pollution in userspace. 2006-10-20 00:29:33 -07:00
asm-sparc64 [SPARC64]: 8-byte align return value from compat_alloc_user_space() 2006-10-22 21:53:30 -07:00
asm-um [PATCH] uml: add INITCALLS 2006-10-31 08:07:00 -08:00
asm-v850 [PATCH] remove remaining errno and __KERNEL_SYSCALLS__ references 2006-10-02 07:57:23 -07:00
asm-x86_64 [PATCH] x86-64: Only look at per_cpu data for online cpus. 2006-10-25 01:00:23 +02:00
asm-xtensa fix file specification in comments 2006-10-03 23:01:26 +02:00
crypto [CRYPTO] digest: Added user API for new hash type 2006-09-21 11:46:17 +10:00
keys
linux [PATCH] MTD: fix last kernel-doc warning 2006-10-30 12:08:41 -08:00
math-emu
media V4L/DVB (4666): Ensure the WM8775 driver is loaded generically for any board. 2006-10-03 15:13:48 -03:00
mtd Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6 2006-10-01 17:55:53 +01:00
net [NET]: kernel-doc fix for sock.h 2006-10-22 20:38:00 -07:00
pcmcia
rdma IB/sa: fix ib_sa_selector names 2006-09-22 15:22:55 -07:00
rxrpc
scsi [SCSI] replace u8 and u32 with __u8 and __u32 in scsi.h for user space 2006-10-25 15:14:34 -07:00
sound [ALSA] version 1.0.13 2006-10-22 10:56:24 +02:00
video fix file specification in comments 2006-10-03 23:01:26 +02:00
Kbuild [HEADERS] One line per header in Kbuild files to reduce conflicts 2006-09-19 12:43:58 +01:00