Date: Sun, 4 Jan 2004 17:43:00 -0800 (PST) From: Juli Mallett <jmallett@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 44796 for review Message-ID: <200401050143.i051h0BC066183@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=44796 Change 44796 by jmallett@jmallett_oingo on 2004/01/04 17:42:37 Handle page sizing/masking appropriately, along with all the fun bit shifting that goes along with that. Did this on a hunch, due to bad things happening with allocated memory... And now I see SI_SUB_VFS scroll by. Affected files ... .. //depot/projects/mips/sys/mips/include/pte.h#19 edit .. //depot/projects/mips/sys/mips/mips/tlb.c#18 edit Differences ... ==== //depot/projects/mips/sys/mips/include/pte.h#19 (text+ko) ==== @@ -67,13 +67,11 @@ #define MIPS_HI_FILL_MASK ((0x7FFFFFUL) << MIPS_HI_FILL_SHIFT) #define MIPS_HI_VA_FILL(va) ((((va) & (1UL << 63)) != 0 ? MIPS_HI_FILL_MASK : 0)) #define MIPS_HI_VPN2_SHIFT (PAGE_SHIFT + 1) -/* XXX VPN2 masking is wrong. Should trim off below VPN2_SHIFT, and from FILL_SHIFT up. */ #ifdef LOCORE -#define MIPS_HI_VPN2_BMASK 0xFFFFFFF +#define MIPS_HI_VPN2_MASK (((~((1 << MIPS_HI_VPN2_SHIFT) - 1)) << (63 - MIPS_HI_FILL_SHIFT)) >> (63 - MIPS_HI_FILL_SHIFT)) #else -#define MIPS_HI_VPN2_BMASK 0xFFFFFFFUL +#define MIPS_HI_VPN2_MASK (((~((1UL << MIPS_HI_VPN2_SHIFT) - 1)) << (63 - MIPS_HI_FILL_SHIFT)) >> (63 - MIPS_HI_FILL_SHIFT)) #endif -#define MIPS_HI_VPN2_MASK (MIPS_HI_VPN2_BMASK << MIPS_HI_VPN2_SHIFT) #define MIPS_HI_VA_TO_VPN2(va) ((va) & MIPS_HI_VPN2_MASK) #define MIPS_HI_ENTRY(va, asid) ((MIPS_HI_VA_R((va))) /* Region. */ | \ (MIPS_HI_VA_FILL((va))) /* Fill. */ | \ ==== //depot/projects/mips/sys/mips/mips/tlb.c#18 (text+ko) ==== @@ -66,12 +66,32 @@ static int tlb_maxasid = MIPS_TLB_NUM_ASIDS; #endif +/* + * Set up the page size, chop off the low PAGE_SHIFT bits, + * and then shift off the upper bits. + */ +static u_long +tlb_pagemask(vm_size_t pageshift) +{ + u_long pm; + + pm = ~0UL; + pm >>= PAGE_SHIFT + 1; + pm <<= PAGE_SHIFT + 1; + pm <<= 7; + pm >>= 7; + + return (pm); +} + void tlb_bootstrap(vm_size_t pages, vm_offset_t (*ptalloc)(vm_size_t)) { pt_entry_t *pte; vm_size_t i; + mips_wr_pagemask(tlb_pagemask(PAGE_SHIFT)); + /* * Set up KPT. */ @@ -166,6 +186,7 @@ mips_wr_entrylo0(pte0); mips_wr_entrylo1(pte1); mips_wr_entryhi(ehi); + mips_wr_pagemask(tlb_pagemask(PAGE_SHIFT)); if (i < 0) mips_tlbwr(); else
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200401050143.i051h0BC066183>