From owner-p4-projects@FreeBSD.ORG Sat Mar 11 21:30:54 2006 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 981D716A43A; Sat, 11 Mar 2006 21:30:54 +0000 (GMT) X-Original-To: perforce@freebsd.org Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id C93D516A420 for ; Sat, 11 Mar 2006 21:30:53 +0000 (GMT) (envelope-from kmacy@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id 7669443D4C for ; Sat, 11 Mar 2006 21:30:53 +0000 (GMT) (envelope-from kmacy@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.1/8.13.1) with ESMTP id k2BLUriY039593 for ; Sat, 11 Mar 2006 21:30:53 GMT (envelope-from kmacy@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.1/8.13.1/Submit) id k2BLUrHR039590 for perforce@freebsd.org; Sat, 11 Mar 2006 21:30:53 GMT (envelope-from kmacy@freebsd.org) Date: Sat, 11 Mar 2006 21:30:53 GMT Message-Id: <200603112130.k2BLUrHR039590@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to kmacy@freebsd.org using -f From: Kip Macy To: Perforce Change Reviews Cc: Subject: PERFORCE change 93168 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 11 Mar 2006 21:30:54 -0000 http://perforce.freebsd.org/chv.cgi?CH=93168 Change 93168 by kmacy@kmacy_storage:sun4v_work on 2006/03/11 21:30:20 pass explicit trap type to tsb miss handler Affected files ... .. //depot/projects/kmacy_sun4v/src/sys/sun4v/sun4v/exception.S#27 edit Differences ... ==== //depot/projects/kmacy_sun4v/src/sys/sun4v/sun4v/exception.S#27 (text+ko) ==== @@ -276,7 +276,7 @@ ldxa [%g1 + %g2]ASI_REAL, %g4 ldxa [%g1 + %g3]ASI_REAL, %g5 ba,pt %xcc, tsb_miss_handler - mov VTD_REF, %g3 + mov T_INSTRUCTION_MISS, %g3 .align 32 .endm @@ -294,7 +294,7 @@ ldxa [%g1 + %g2]ASI_REAL, %g4 ldxa [%g1 + %g3]ASI_REAL, %g5 ba,pt %xcc, tsb_miss_handler - mov VTD_REF, %g3 + mov T_DATA_MISS, %g3 .align 32 .endm @@ -304,7 +304,7 @@ mov MMFSA_D_CTX, %g7 ldxa [%g1 + %g3]ASI_REAL, %g5 ba,pt %xcc, tsb_miss_handler - mov VTD_W, %g3 + mov T_DATA_PROTECTION, %g3 .align 32 .endm @@ -1399,9 +1399,9 @@ #endif 16: #endif + mov %g3, %g2 ! save fault type srlx %g6, TTARGET_CTX_SHIFT, %g4 ! recover context sethi %hi(trap), %g1 - mov T_DATA_MISS, %g2 or %g4, %g7, %g3 mov -1, %g4 ba %xcc, tl0_trap @@ -1418,18 +1418,22 @@ sethi %hi(PAGE_SIZE), %g7 sub %g7, 1, %g7 ! %g7==PAGE_MASK - andcc %g5, %g3, %g0 ! already set - bnz,pt %xcc, 7f + cmp %g3, T_DATA_MISS ! TSB data miss + be,pt %xcc, 6f + or %g5, VTD_REF, %g5 ! set referenced unconditionally + cmp %g3, T_INSTRUCTION_MISS ! TSB instruction miss + be,pt %xcc, 6f + nop + cmp %g3, T_DATA_PROTECTION ! protection fault + bne,pn %xcc, unsupported_fault_trap ! we don't handle any other fault types currently nop - andcc %g3, VTD_REF, %g0 ! TSB miss - bnz,pt %xcc, 6f - or %g5, %g3, %g5 ! add ref/mod bit unconditionally andcc %g5, VTD_SW_W, %g0 ! write enabled? bz,pn %xcc, prot_fault_trap ! write to read only page - or %g5, %g3, %g5 ! add ref/mod bit unconditionally + nop + or %g5, VTD_W, %g5 ! add modifed bit 6: - stx %g5, [%g2 + 8] ! set ref/mod bit -7: + stx %g5, [%g2 + 8] ! update TTE + andcc %g6, %g7, %g0 ! kernel context? bz,pn %xcc, 8f nop @@ -1465,7 +1469,7 @@ ! XXX the following intstruction should be replaced with a ! retry on HVs that do auto-demap ontario_demap_errata_patch: - andcc %g5, VTD_W, %g0 + andcc %g5, VTD_W, %g0 ! if write-enabled we know it was a prot fault bnz,pn %xcc, demap_begin nop retry @@ -1494,6 +1498,12 @@ ENTRY(prot_fault_trap) MAGIC_TRAP_ON;MAGIC_TRAP_ON;MAGIC_EXIT END(prot_fault_trap) +/* + * Programming error + */ +ENTRY(unsupported_fault_trap) + MAGIC_TRAP_ON;MAGIC_TRAP_ON;MAGIC_EXIT +END(unsupported_fault_trap) /*