projects
/
profile
/
common
/
kernel-common.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
8646010
)
powerpc: Do not assert pte_locked for hugepage PTE entries
author
Mel Gorman
<mel@csn.ul.ie>
Thu, 30 Apr 2009 10:59:19 +0000
(10:59 +0000)
committer
Benjamin Herrenschmidt
<benh@kernel.crashing.org>
Mon, 18 May 2009 05:19:04 +0000
(15:19 +1000)
With CONFIG_DEBUG_VM, an assertion is made when changing the protection
flags of a PTE that the PTE is locked. Huge pages use a different pagetable
format and the assertion is bogus and will always trigger with a bug looking
something like
Unable to handle kernel paging request for data at address 0xf1a00235800006f8
Faulting instruction address: 0xc000000000034a80
Oops: Kernel access of bad area, sig: 11 [#1]
SMP NR_CPUS=32 NUMA Maple
Modules linked in: dm_snapshot dm_mirror dm_region_hash
dm_log dm_mod loop evdev ext3 jbd mbcache sg sd_mod ide_pci_generic
pata_amd ata_generic ipr libata tg3 libphy scsi_mod windfarm_pid
windfarm_smu_sat windfarm_max6690_sensor windfarm_lm75_sensor
windfarm_cpufreq_clamp windfarm_core i2c_powermac
NIP:
c000000000034a80
LR:
c000000000034b18
CTR:
0000000000000003
REGS:
c000000003037600
TRAP: 0300 Not tainted (2.6.30-rc3-autokern1)
MSR:
9000000000009032
<EE,ME,IR,DR> CR:
28002484
XER:
200fffff
DAR:
f1a00235800006f8
, DSISR:
0000000040010000
TASK =
c0000002e54cc740
[2960] 'map_high_trunca' THREAD:
c000000003034000
CPU: 2
GPR00:
4000000000000000
c000000003037880
c000000000895d30
c0000002e5a2e500
GPR04:
00000000a0000000
c0000002edc40880
0000005700000393
0000000000000001
GPR08:
f000000011ac0000
01a00235800006e8
00000000000000f5
f1a00235800006e8
GPR12:
0000000028000484
c0000000008dd780
0000000000001000
0000000000000000
GPR16:
fffffffffffff000
0000000000000000
00000000a0000000
c000000003037a20
GPR20:
c0000002e5f4ece8
0000000000001000
c0000002edc40880
0000000000000000
GPR24:
c0000002e5f4ece8
0000000000000000
00000000a0000000
c0000002e5f4ece8
GPR28:
0000005700000393
c0000002e5a2e500
00000000a0000000
c000000003037880
NIP [
c000000000034a80
] .assert_pte_locked+0xa4/0xd0
LR [
c000000000034b18
] .ptep_set_access_flags+0x6c/0xb4
Call Trace:
[
c000000003037880
] [
c000000003037990
] 0xc000000003037990 (unreliable)
[
c000000003037910
] [
c000000000034b18
] .ptep_set_access_flags+0x6c/0xb4
[
c0000000030379b0
] [
c00000000014bef8
] .hugetlb_cow+0x124/0x674
[
c000000003037b00
] [
c00000000014c930
] .hugetlb_fault+0x4e8/0x6f8
[
c000000003037c00
] [
c00000000013443c
] .handle_mm_fault+0xac/0x828
[
c000000003037cf0
] [
c0000000000340a8
] .do_page_fault+0x39c/0x584
[
c000000003037e30
] [
c0000000000057b0
] handle_page_fault+0x20/0x5c
Instruction dump:
7d29582a
7d200074
7800d182
0b000000
3c004000
3960ffff
780007c6
796b00c4
7d290214
7929a302
1d290068
7d6b4a14
<
800b0010
>
7c000074
7800d182
0b000000
This patch fixes the problem by not asseting the PTE is locked for VMAs
backed by huge pages.
Signed-off-by: Mel Gorman <mel@csn.ul.ie>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
arch/powerpc/mm/pgtable.c
patch
|
blob
|
history
diff --git
a/arch/powerpc/mm/pgtable.c
b/arch/powerpc/mm/pgtable.c
index
f5c6fd4
..
ae1d67c
100644
(file)
--- a/
arch/powerpc/mm/pgtable.c
+++ b/
arch/powerpc/mm/pgtable.c
@@
-219,7
+219,8
@@
int ptep_set_access_flags(struct vm_area_struct *vma, unsigned long address,
entry = do_dcache_icache_coherency(entry);
changed = !pte_same(*(ptep), entry);
if (changed) {
- assert_pte_locked(vma->vm_mm, address);
+ if (!(vma->vm_flags & VM_HUGETLB))
+ assert_pte_locked(vma->vm_mm, address);
__ptep_set_access_flags(ptep, entry);
flush_tlb_page_nohash(vma, address);
}