diff options
author | Kumar Gala <galak@kernel.crashing.org> | 2008-11-04 15:56:55 -0500 |
---|---|---|
committer | Kumar Gala <galak@kernel.crashing.org> | 2008-11-08 13:38:55 -0500 |
commit | b41d6fee37e2bebd58ad3623c288197e75787905 (patch) | |
tree | 6734bfe8160636384b21dc2fce9e9cfa1ebac7b7 /arch/powerpc/kernel/misc_32.S | |
parent | 454666eb78d890f5740ea1901f8b01a43c77c67c (diff) |
powerpc/fsl-booke: Fix synchronization bug w/local tlb invalidates
The implemetation of _tlbil_pid() on Freescale Book-E cores needs
an msync & isync after we flash invalidate the TLBs. This was causing
the following oops reported by Sebastian Andrzej Siewior:
VFS: Mounted root (nfs filesystem) readonly.
Freeing unused kernel memory: 148k init
BUG: sleeping function called from invalid context at /home/bigeasy/git/linux-2.6-powerpc/mm/mmap.c:234
in_atomic():1, irqs_disabled():0
Call Trace:
[df189df0] [c0007160] show_stack+0x48/0x148 (unreliable)
[df189e30] [c0029480] __might_sleep+0xf0/0x100
[df189e40] [c0070ac0] remove_vma+0x28/0x98
[df189e50] [c0070c1c] exit_mmap+0xec/0x128
[df189e80] [c002d2f4] mmput+0x54/0xec
[df189ea0] [c0030b6c] exit_mm+0x10c/0x120
[df189ed0] [c003288c] do_exit+0x1ac/0x6e8
[df189f20] [c0032e48] do_group_exit+0x80/0xac
[df189f40] [c000e9dc] ret_from_syscall+0x0/0x3c
BUG: scheduling while atomic: udevd/956/0x10000002
Modules linked in:
Call Trace:
[df189df0] [c0007160] show_stack+0x48/0x148 (unreliable)
[df189e30] [c002ac88] __schedule_bug+0x58/0x6c
[df189e40] [c023e6cc] schedule+0xa8/0x4a8
[df189e90] [c002ad6c] __cond_resched+0x38/0x64
[df189ea0] [c023ebc8] _cond_resched+0x3c/0x58
[df189eb0] [c0030e70] put_files_struct+0x90/0xec
[df189ed0] [c00328a8] do_exit+0x1c8/0x6e8
[df189f20] [c0032e48] do_group_exit+0x80/0xac
[df189f40] [c000e9dc] ret_from_syscall+0x0/0x3c
Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
Diffstat (limited to 'arch/powerpc/kernel/misc_32.S')
-rw-r--r-- | arch/powerpc/kernel/misc_32.S | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/arch/powerpc/kernel/misc_32.S b/arch/powerpc/kernel/misc_32.S index 6a9b4bf0d173..bdc8b0e860e5 100644 --- a/arch/powerpc/kernel/misc_32.S +++ b/arch/powerpc/kernel/misc_32.S | |||
@@ -470,6 +470,8 @@ _GLOBAL(_tlbil_pid) | |||
470 | mfspr r3,SPRN_MMUCSR0 | 470 | mfspr r3,SPRN_MMUCSR0 |
471 | andi. r3,r3,MMUCSR0_TLBFI@l | 471 | andi. r3,r3,MMUCSR0_TLBFI@l |
472 | bne 1b | 472 | bne 1b |
473 | msync | ||
474 | isync | ||
473 | blr | 475 | blr |
474 | 476 | ||
475 | /* | 477 | /* |
@@ -486,6 +488,8 @@ _GLOBAL(_tlbil_va) | |||
486 | rlwinm r4,r4,0,1,31 | 488 | rlwinm r4,r4,0,1,31 |
487 | mtspr SPRN_MAS1,r4 | 489 | mtspr SPRN_MAS1,r4 |
488 | tlbwe | 490 | tlbwe |
491 | msync | ||
492 | isync | ||
489 | blr | 493 | blr |
490 | #endif /* CONFIG_FSL_BOOKE */ | 494 | #endif /* CONFIG_FSL_BOOKE */ |
491 | 495 | ||