Skip site navigation (1)Skip section navigation (2)
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>