From owner-p4-projects Fri Mar 29 14:10:57 2002 Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 3E1D037B41C; Fri, 29 Mar 2002 14:10:45 -0800 (PST) Delivered-To: perforce@freebsd.org Received: from freefall.freebsd.org (freefall.FreeBSD.org [216.136.204.21]) by hub.freebsd.org (Postfix) with ESMTP id 2F2B937B419 for ; Fri, 29 Mar 2002 14:10:44 -0800 (PST) Received: (from perforce@localhost) by freefall.freebsd.org (8.11.6/8.11.6) id g2TMAhN43413 for perforce@freebsd.org; Fri, 29 Mar 2002 14:10:43 -0800 (PST) (envelope-from tmm@freebsd.org) Date: Fri, 29 Mar 2002 14:10:43 -0800 (PST) Message-Id: <200203292210.g2TMAhN43413@freefall.freebsd.org> X-Authentication-Warning: freefall.freebsd.org: perforce set sender to tmm@freebsd.org using -f From: Thomas Moestl Subject: PERFORCE change 8640 for review To: Perforce Change Reviews Sender: owner-p4-projects@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG http://people.freebsd.org/~peter/p4db/chv.cgi?CH=8640 Change 8640 by tmm@tmm_forge on 2002/03/29 14:10:23 Do not use semi-fixed TLB slots any more; the [di]tlb_store arrays are now allocated from start to end, the indices to not inidcate the TLB slots any more. Affected files ... ... //depot/projects/sparc64/sys/boot/sparc64/loader/locore.S#2 edit ... //depot/projects/sparc64/sys/boot/sparc64/loader/main.c#20 edit ... //depot/projects/sparc64/sys/boot/sparc64/loader/metadata.c#7 edit Differences ... ==== //depot/projects/sparc64/sys/boot/sparc64/loader/locore.S#2 (text+ko) ==== @@ -86,18 +86,16 @@ not %o0 /* - * %o0 = slot number - * %o1 = vpn - * %o2 = tte data + * %o0 = vpn + * %o1 = tte data */ ENTRY(itlb_enter) rdpr %pstate, %o4 wrpr %o4, PSTATE_IE, %pstate - sllx %o0, 3, %o0 - sllx %o1, PAGE_SHIFT, %o1 + sllx %o0, PAGE_SHIFT, %o0 mov AA_IMMU_TAR, %o3 - stxa %o1, [%o3] ASI_IMMU - stxa %o2, [%o0] ASI_ITLB_DATA_ACCESS_REG + stxa %o0, [%o3] ASI_IMMU + stxa %o1, [%g0] ASI_ITLB_DATA_IN_REG membar #Sync retl wrpr %o4, 0, %pstate @@ -105,11 +103,10 @@ ENTRY(dtlb_enter) rdpr %pstate, %o4 wrpr %o4, PSTATE_IE, %pstate - sllx %o0, 3, %o0 - sllx %o1, PAGE_SHIFT, %o1 + sllx %o0, PAGE_SHIFT, %o0 mov AA_DMMU_TAR, %o3 - stxa %o1, [%o3] ASI_DMMU - stxa %o2, [%o0] ASI_DTLB_DATA_ACCESS_REG + stxa %o0, [%o3] ASI_DMMU + stxa %o1, [%g0] ASI_DTLB_DATA_IN_REG membar #Sync retl wrpr %o4, 0, %pstate ==== //depot/projects/sparc64/sys/boot/sparc64/loader/main.c#20 (text+ko) ==== @@ -57,8 +57,8 @@ typedef void kernel_entry_t(vm_offset_t mdp, u_long o1, u_long o2, u_long o3, void *openfirmware); -extern void itlb_enter(int slot, u_long vpn, u_long data); -extern void dtlb_enter(int slot, u_long vpn, u_long data); +extern void itlb_enter(u_long vpn, u_long data); +extern void dtlb_enter(u_long vpn, u_long data); extern vm_offset_t itlb_va_to_pa(vm_offset_t); extern vm_offset_t dtlb_va_to_pa(vm_offset_t); extern vm_offset_t md_load(char *, vm_offset_t *); @@ -255,10 +255,6 @@ vm_offset_t pa, mva; struct tte tte; - if (dtlb_slot < 0) - panic("mmu_mapin: out of dtlb_slots"); - if (itlb_slot < 0) - panic("mmu_mapin: out of itlb_slots"); if (va + len > curkva) curkva = va + len; @@ -284,13 +280,21 @@ /* The mappings may have changed, be paranoid. */ continue; } + /* + * Actually, we can only allocate two pages less at + * most (depending on the kernel TSB size). + */ + if (dtlb_slot >= dtlb_slot_max) + panic("mmu_mapin: out of dtlb_slots"); + if (itlb_slot >= itlb_slot_max) + panic("mmu_mapin: out of itlb_slots"); tte.tte_vpn = TV_VPN(va); tte.tte_data = TD_V | TD_4M | TD_PA(pa) | TD_L | TD_CP | TD_CV | TD_P | TD_W; - dtlb_store[--dtlb_slot] = tte; - itlb_store[--itlb_slot] = tte; - dtlb_enter(dtlb_slot, tte.tte_vpn, tte.tte_data); - itlb_enter(itlb_slot, tte.tte_vpn, tte.tte_data); + dtlb_store[dtlb_slot++] = tte; + itlb_store[itlb_slot++] = tte; + dtlb_enter(tte.tte_vpn, tte.tte_data); + itlb_enter(tte.tte_vpn, tte.tte_data); pa = (vm_offset_t)-1; } len -= len > PAGE_SIZE_4M ? PAGE_SIZE_4M : len; @@ -349,8 +353,6 @@ itlb_store = malloc(itlb_slot_max * sizeof(*itlb_store)); if (dtlb_store == NULL || itlb_store == NULL) panic("init_tlb: malloc"); - dtlb_slot = dtlb_slot_max; - itlb_slot = itlb_slot_max; } int ==== //depot/projects/sparc64/sys/boot/sparc64/loader/metadata.c#7 (text+ko) ==== @@ -319,9 +319,9 @@ file_addmetadata(kfp, MODINFOMD_DTLB_SLOTS, sizeof dtlb_slots, &dtlb_slots); file_addmetadata(kfp, MODINFOMD_ITLB_SLOTS, sizeof itlb_slots, &itlb_slots); file_addmetadata(kfp, MODINFOMD_DTLB, dtlb_slots * sizeof(struct tte), - &dtlb_store[dtlb_slot]); + dtlb_store); file_addmetadata(kfp, MODINFOMD_ITLB, itlb_slots * sizeof(struct tte), - &itlb_store[itlb_slot]); + itlb_store); *modulep = addr; size = md_copymodules(0); To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe p4-projects" in the body of the message