From owner-p4-projects@FreeBSD.ORG Wed Mar 1 07:58:51 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 8259C16A424; Wed, 1 Mar 2006 07:58:50 +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 570B516A420 for ; Wed, 1 Mar 2006 07:58:50 +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 E815D43D46 for ; Wed, 1 Mar 2006 07:58:49 +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 k217wnJt008062 for ; Wed, 1 Mar 2006 07:58:49 GMT (envelope-from kmacy@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.1/8.13.1/Submit) id k217wnnq008059 for perforce@freebsd.org; Wed, 1 Mar 2006 07:58:49 GMT (envelope-from kmacy@freebsd.org) Date: Wed, 1 Mar 2006 07:58:49 GMT Message-Id: <200603010758.k217wnnq008059@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 92583 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: Wed, 01 Mar 2006 07:58:51 -0000 http://perforce.freebsd.org/chv.cgi?CH=92583 Change 92583 by kmacy@kmacy_storage:sun4v_work on 2006/03/01 07:58:29 fix TTE index calculation add function to check that entries are not already set add generalized lookup function for TSBs Affected files ... .. //depot/projects/kmacy_sun4v/src/sys/sun4v/sun4v/tsb.c#5 edit Differences ... ==== //depot/projects/kmacy_sun4v/src/sys/sun4v/sun4v/tsb.c#5 (text+ko) ==== @@ -52,20 +52,40 @@ #include CTASSERT(sizeof(tte_t) == sizeof(uint64_t)); -#define TSB_MASK(tsb) (((tsb->hvtsb_ntte) << (PAGE_SHIFT - TTE_SHIFT)) - 1) +#define TSB_MASK(tsb) ((tsb->hvtsb_ntte) - 1) + #ifdef DEBUG_TSB #define DPRINTF printf #else #define DPRINTF(...) #endif +void +tsb_assert_invalid(hv_tsb_info_t *tsb, vm_offset_t va) +{ + vm_paddr_t tsb_load_pa; + uint64_t tsb_index, tsb_shift, tte_tag, tte_data; + tsb_shift = TTE_PAGE_SHIFT(tsb->hvtsb_idxpgsz); + tsb_index = (va >> tsb_shift) & TSB_MASK(tsb); + tsb_load_pa = tsb->hvtsb_pa + 2*tsb_index*sizeof(uint64_t); + load_real_dw(tsb_load_pa, &tte_tag, &tte_data); + if (tte_tag == 0 && tte_data == 0) + return; + printf("tsb_shift=0x%lx tsb_index=0x%lx\n", tsb_shift, tsb_index); + printf("tte_tag=0x%lx tte_data=0x%lx TSB_MASK=%lx\n", tte_tag, tte_data, (uint64_t)TSB_MASK(tsb)); + panic("non-zero entry found where not expected"); + +} + void tsb_set_tte(hv_tsb_info_t *tsb, vm_offset_t va, vm_paddr_t pa, uint64_t flags, uint64_t ctx) { vm_paddr_t tsb_store_pa; uint64_t tsb_index, tsb_shift, tte_tag, tte_data; DPRINTF("tsb_set_tte va: 0x%lx idxpgsz: %x\n", va, tsb->hvtsb_idxpgsz); - tsb_shift = TTE_GET_PAGE_SHIFT(tsb->hvtsb_idxpgsz); + + tsb_shift = TTE_PAGE_SHIFT(tsb->hvtsb_idxpgsz); + DPRINTF("tsb_shift: 0x%lx\n", tsb_shift); tsb_index = (va >> tsb_shift) & TSB_MASK(tsb); DPRINTF("tsb_index_absolute: 0x%lx tsb_index: 0x%lx\n", (va >> tsb_shift), tsb_index); @@ -85,7 +105,12 @@ store_real_sync(tsb_store_pa + sizeof(uint64_t), tte_data); } -uint64_t + + + + + +tte_t tsb_get_tte(hv_tsb_info_t *tsb, vm_offset_t va, uint64_t ctx) { vm_paddr_t tsb_load_pa; @@ -97,7 +122,6 @@ tsb_index = (va >> tsb_shift) & TSB_MASK(tsb); DPRINTF("tsb_index_absolute: %lx tsb_index: %lx\n", (va >> tsb_shift), tsb_index); tsb_load_pa = tsb->hvtsb_pa + 2*tsb_index*sizeof(uint64_t); - DPRINTF("load_real_dw - ra: %lx &tte_tag: %p &tte_data: %p \n", tsb_load_pa, &tte_tag, &tte_data); load_real_dw(tsb_load_pa, &tte_tag, &tte_data); DPRINTF("tte_data: %lx ctx: %lx va: %lx\n", tte_data, tte_tag >> TTARGET_CTX_SHIFT, @@ -107,3 +131,23 @@ return (0UL); } + +tte_t +tsb_lookup_tte(vm_offset_t va, uint64_t ctx) +{ + tte_t tte_data; + + tte_data = 0; + if (ctx == 0) { + if ((tte_data = tsb_get_tte(&kernel_td[TSB4M_INDEX], va, 0)) != 0) + goto done; + if ((tte_data = tsb_get_tte(&kernel_td[TSB8K_INDEX], va, 0)) != 0) + goto done; + } + /* + * handle user data + */ +done: + return tte_data; +} +