Date: Fri, 3 Jan 2003 15:03:14 -0800 From: Arun Sharma <arun.sharma@intel.com> To: freebsd-ia64@freebsd.org Subject: unaligned fault in pmap_find_vhpt Message-ID: <200301032303.gBQJBOs00863@unix-os.sc.intel.com>
next in thread | raw e-mail | index | archive | help
I saw a kernel mode unaligned fault during a compilation workload
yesterday on an SMP 5.0-RC1 kernel. The fault happened here:
0xe000000000aad660 <pmap_find_vhpt+80>:
More info below. It looks like the pte_chain is getting corrupted
somehow. What is the locking scheme being used to protect pte
collision chains on an SMP kernel ?
-Arun
pmap.c:
static struct ia64_lpte *
pmap_find_vhpt(vm_offset_t va)
{
struct ia64_lpte *pte;
u_int64_t tag;
pte = (struct ia64_lpte *) ia64_thash(va);
if (!pte->pte_chain) {
pte = 0;
goto done;
}
tag = ia64_ttag(va);
pte = (struct ia64_lpte *) IA64_PHYS_TO_RR7(pte->pte_chain);
while (pte->pte_tag != tag) { <--- unaligned fault
if (pte->pte_chain) {
pte = (struct ia64_lpte *) IA64_PHYS_TO_RR7(pte->pte_chain);
} else {
pte = 0;
break;
}
}
done:
return pte;
}
Dump of assembler code for function pmap_find_vhpt:
0xe000000000aad610 <pmap_find_vhpt>: [MMI] thash r14=r32;;
0xe000000000aad611 <pmap_find_vhpt+1>: mov r8=r14
0xe000000000aad612 <pmap_find_vhpt+2>: adds r14=24,r14;;
0xe000000000aad620 <pmap_find_vhpt+16>: [MMI] ld8 r14=[r14];;
0xe000000000aad621 <pmap_find_vhpt+17>: cmp.eq p7,p6=0,r14
0xe000000000aad622 <pmap_find_vhpt+18>: nop.i 0x0
0xe000000000aad630 <pmap_find_vhpt+32>: [MFB] nop.m 0x0
0xe000000000aad631 <pmap_find_vhpt+33>: nop.f 0x0
0xe000000000aad632 <pmap_find_vhpt+34>: (p06)
br.cond.dptk.few 0xe000000000aad650 <pmap_find_vhpt+64>
0xe000000000aad640 <pmap_find_vhpt+48>: [MFB] mov r8=r0
0xe000000000aad641 <pmap_find_vhpt+49>: nop.f 0x0
0xe000000000aad642 <pmap_find_vhpt+50>:
br.ret.sptk.many b0;;
0xe000000000aad650 <pmap_find_vhpt+64>: [MMI] ttag r14=r32;;
0xe000000000aad651 <pmap_find_vhpt+65>: mov r32=r14
0xe000000000aad652 <pmap_find_vhpt+66>: adds r14=24,r8;;
0xe000000000aad660 <pmap_find_vhpt+80>: [MLX] ld8 r15=[r14]
0xe000000000aad661 <pmap_find_vhpt+81>: movl
r14=0xe000000000000000;;
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-ia64" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200301032303.gBQJBOs00863>
