On Mon, Jan 25, 2016 at 12:35 PM, Julian Margetson runaway@candw.ms wrote:
On 1/25/2016 3:20 PM, Dan Williams wrote:
[..]
Hmm, this commit could only cause a behavior change if it modifies the value of the pfn as seen by insert_pfn(). Can you try the attached debug patch to see if that assumption is being violated?
Had to manually delete the lines in the second part of the patch.
Sorry about that I had based direct on that failing commit rather than 4.5-rc1. A reflowed version in the attached.
[ 42.557813] Oops: Machine check, sig: 7 [#1] [ 42.562350] PREEMPT Canyonlands [ 42.565692] Modules linked in: [ 42.568933] CPU: 0 PID: 495 Comm: Xorg Tainted: G W 4.5.0-rc1-Sam460ex #1 [ 42.577291] task: ee3adcc0 ti: ee260000 task.ti: ee260000 [ 42.582984] NIP: 1ff72480 LR: 1ff72404 CTR: 1ff724d0 [ 42.588220] REGS: ee261f10 TRAP: 0214 Tainted: G W (4.5.0-rc1-Sam460ex) [ 42.596663] MSR: 0002d000 <CE,EE,PR,ME> CR: 24004242 XER: 00000000 [ 42.603512] GPR00: 1f436134 bfc4dac0 b79cb6f0 b718dffc b69a4008 00000780 00000004 00000000 GPR08: 00000000 b718dffc 00000000 bfc4da70 1ff72404 2080dff4 00000000 00000780 GPR16: 00000000 00000020 00000000 00000000 00001e00 20aaa620 00000438 b69a4008 GPR24: 00000780 bfc4db18 20a94760 b718e000 b718e000 b69a4008 2007aff4 00001e00 [ 42.635363] NIP [1ff72480] 0x1ff72480 [ 42.639225] LR [1ff72404] 0x1ff72404 [ 42.642991] Call Trace: [ 42.798393] ---[ end trace 8fcfa5f0e9942055 ]---
I'm not familiar with powerpc crash dumps, so there's not much information I can glean from this. Any folks on the cc can translate a powerpc "Machine check"?
I'm down to looking a differences between the passing and failing case. Can you print out the value the pte entry and the in insert_pfn, like the following:
diff --git a/mm/memory.c b/mm/memory.c index 30991f83d0bf..c44e387130b2 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -1521,6 +1521,8 @@ static int insert_pfn(struct vm_area_struct *vma, unsigned long addr, entry = pte_mkdevmap(pfn_t_pte(pfn, prot)); else entry = pte_mkspecial(pfn_t_pte(pfn, prot)); + pr_info("%s: entry: %#llx pfn: %#lx\n", __func__, + (unsigned long long) entry, pfn_t_to_pfn(pfn)); set_pte_at(mm, addr, pte, entry); update_mmu_cache(vma, addr, pte); /* XXX: why not for insert_page? */
...of course for the passing case you'll need to drop the call to pfn_t_to_pfn() and just print the pfn directly.
Thank you for the help tracking this down, it's much appreciated.