linux/arch
Anton Wöllert bf85fa6c87 [PATCH] ppc32: 8xx avoid icbi misbehaviour in __flush_dcache_icache_phys
On 8xx, in the case where a pagefault happens for a process who's not
the owner of the vma in question (ptrace for instance), the flush
operation is performed via the physical address.

Unfortunately, that results in a strange, unexplainable "icbi"
instruction fault, most likely due to a CPU bug (see oops below).

Avoid that by flushing the page via its kernel virtual address.

Oops: kernel access of bad area, sig: 11 [#2]
NIP: C000543C LR: C000B060 SP: C0F35DF0 REGS: c0f35d40 TRAP: 0300 Not tainted
MSR: 00009022 EE: 1 PR: 0 FP: 0 ME: 1 IR/DR: 10
DAR: 00000010, DSISR: C2000000
TASK = c0ea8430[761] 'gdbserver' THREAD: c0f34000
Last syscall: 26
GPR00: 00009022 C0F35DF0 C0EA8430 00F59000 00000100 FFFFFFFF 00F58000
00000001
GPR08: C021DAEF C0270000 00009032 C0270000 22044024 10025428 01000800
00000001
GPR16: 007FFF3F 00000001 00000000 7FBC6AC0 00F61022 00000001 C0839300
C01E0000
GPR24: 00CD0889 C082F568 3000AC18 C02A7A00 C0EA15C8 00F588A9 C02ACB00
C02ACB00
NIP [c000543c] __flush_dcache_icache_phys+0x38/0x54
LR [c000b060] flush_dcache_icache_page+0x20/0x30
Call trace:
[c000b154] update_mmu_cache+0x7c/0xa4
[c005ae98] do_wp_page+0x460/0x5ec
[c005c8a0] handle_mm_fault+0x7cc/0x91c
[c005ccec] get_user_pages+0x2fc/0x65c
[c0027104] access_process_vm+0x9c/0x1d4
[c00076e0] sys_ptrace+0x240/0x4a4
[c0002bd0] ret_from_syscall+0x0/0x44

Signed-off-by: Marcelo Tosatti <marcelo.tosatti@cyclades.com>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2005-07-27 16:34:34 -07:00
..
alpha [PATCH] Don't export machine_restart, machine_halt, or machine_power_off. 2005-07-26 14:35:42 -07:00
arm Merge master.kernel.org:/home/rmk/linux-2.6-arm 2005-07-26 15:13:26 -07:00
arm26 [PATCH] Don't export machine_restart, machine_halt, or machine_power_off. 2005-07-26 14:35:42 -07:00
cris [PATCH] CRIS update: new subarchitecture v32 2005-07-27 16:26:01 -07:00
frv [ACPI] merge acpi-2.6.12 branch into latest Linux 2.6.13-rc... 2005-07-12 17:21:56 -04:00
h8300 [PATCH] Don't export machine_restart, machine_halt, or machine_power_off. 2005-07-26 14:35:42 -07:00
i386 [PATCH] sys_get_thread_area does not clear the returned argument 2005-07-27 16:26:08 -07:00
ia64 [PATCH] fix MAX_USER_RT_PRIO and MAX_RT_PRIO 2005-07-26 15:40:00 -07:00
m32r [PATCH] m32r: add missing Kconfig help text 2005-07-27 16:25:59 -07:00
m68k [PATCH] Don't export machine_restart, machine_halt, or machine_power_off. 2005-07-26 14:35:42 -07:00
m68knommu [PATCH] Don't export machine_restart, machine_halt, or machine_power_off. 2005-07-26 14:35:42 -07:00
mips [PATCH] mips: remove obsolete GIU driver for vr41xx 2005-07-27 16:25:58 -07:00
parisc [PATCH] Add pcibios_bus_to_resource for parisc 2005-07-27 16:25:51 -07:00
ppc [PATCH] ppc32: 8xx avoid icbi misbehaviour in __flush_dcache_icache_phys 2005-07-27 16:34:34 -07:00
ppc64 [PATCH] turn many #if $undefined_string into #ifdef $undefined_string 2005-07-27 16:26:08 -07:00
s390 [PATCH] s390: cpu timer reset in machine check handler 2005-07-27 16:26:05 -07:00
sh [PATCH] try_to_freeze() call fixes 2005-07-27 16:25:49 -07:00
sh64 [PATCH] try_to_freeze() call fixes 2005-07-27 16:25:49 -07:00
sparc [PATCH] Don't export machine_restart, machine_halt, or machine_power_off. 2005-07-26 14:35:42 -07:00
sparc64 [PATCH] Don't export machine_restart, machine_halt, or machine_power_off. 2005-07-26 14:35:42 -07:00
um [PATCH] turn many #if $undefined_string into #ifdef $undefined_string 2005-07-27 16:26:08 -07:00
v850 [PATCH] v850: Update PCI support 2005-07-27 16:26:03 -07:00
x86_64 [PATCH] turn many #if $undefined_string into #ifdef $undefined_string 2005-07-27 16:26:08 -07:00
xtensa [PATCH] xtensa: use ssleep() instead of schedule_timeout() 2005-07-12 16:01:01 -07:00