From owner-freebsd-ia64 Fri Jan 3 15: 3:17 2003 Delivered-To: freebsd-ia64@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id DE38B37B401 for ; Fri, 3 Jan 2003 15:03:15 -0800 (PST) Received: from hermes.sc.intel.com (fmr03.intel.com [143.183.121.5]) by mx1.FreeBSD.org (Postfix) with ESMTP id 44ECF43ED8 for ; Fri, 3 Jan 2003 15:03:15 -0800 (PST) (envelope-from adsharma@unix-os.sc.intel.com) Received: from petasus.sc.intel.com (petasus.sc.intel.com [10.3.253.4]) by hermes.sc.intel.com (8.11.6/8.11.6/d: outer.mc,v 1.51 2002/09/23 20:43:23 dmccart Exp $) with ESMTP id h03N1Rg25219 for ; Fri, 3 Jan 2003 23:01:27 GMT Received: from unix-os.sc.intel.com (unix-os.sc.intel.com [143.183.96.244]) by petasus.sc.intel.com (8.11.6/8.11.6/d: inner.mc,v 1.27 2002/10/16 23:46:59 dmccart Exp $) with ESMTP id h03N2PK11705 for ; Fri, 3 Jan 2003 23:02:25 GMT Received: from unix-os.sc.intel.com.intel.com (adsharma-mobl3.sc.intel.com [143.183.130.54]) by unix-os.sc.intel.com (8.11.6/8.11.2) with ESMTP id gBQJBOs00863 for ; Fri, 3 Jan 2003 15:03:14 -0800 Date: Fri, 3 Jan 2003 15:03:14 -0800 Message-Id: <200301032303.gBQJBOs00863@unix-os.sc.intel.com> To: freebsd-ia64@freebsd.org Subject: unaligned fault in pmap_find_vhpt From: Arun Sharma Sender: owner-freebsd-ia64@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.org I saw a kernel mode unaligned fault during a compilation workload yesterday on an SMP 5.0-RC1 kernel. The fault happened here: 0xe000000000aad660 : 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 : [MMI] thash r14=r32;; 0xe000000000aad611 : mov r8=r14 0xe000000000aad612 : adds r14=24,r14;; 0xe000000000aad620 : [MMI] ld8 r14=[r14];; 0xe000000000aad621 : cmp.eq p7,p6=0,r14 0xe000000000aad622 : nop.i 0x0 0xe000000000aad630 : [MFB] nop.m 0x0 0xe000000000aad631 : nop.f 0x0 0xe000000000aad632 : (p06) br.cond.dptk.few 0xe000000000aad650 0xe000000000aad640 : [MFB] mov r8=r0 0xe000000000aad641 : nop.f 0x0 0xe000000000aad642 : br.ret.sptk.many b0;; 0xe000000000aad650 : [MMI] ttag r14=r32;; 0xe000000000aad651 : mov r32=r14 0xe000000000aad652 : adds r14=24,r8;; 0xe000000000aad660 : [MLX] ld8 r15=[r14] 0xe000000000aad661 : movl r14=0xe000000000000000;; To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-ia64" in the body of the message