Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. =================================================================== RCS file: /ftp/cvs/cvsroot/src/sys/arch/x86/include/pmap.h,v rcsdiff: /ftp/cvs/cvsroot/src/sys/arch/x86/include/pmap.h,v: warning: Unknown phrases like `commitid ...;' are present. retrieving revision 1.2.4.6 retrieving revision 1.3 diff -u -p -r1.2.4.6 -r1.3 --- src/sys/arch/x86/include/pmap.h 2007/11/27 19:35:54 1.2.4.6 +++ src/sys/arch/x86/include/pmap.h 2007/11/07 00:23:16 1.3 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.h,v 1.2.4.6 2007/11/27 19:35:54 joerg Exp $ */ +/* $NetBSD: pmap.h,v 1.3 2007/11/07 00:23:16 ad Exp $ */ /* * @@ -159,9 +159,6 @@ struct pmap { /* pm_flags */ #define PMF_USER_LDT 0x01 /* pmap has user-set LDT */ -#define PMF_USER_XPIN 0x02 /* pmap pdirpa is pinned (Xen) */ -#define PMF_USER_RELOAD 0x04 /* reload user pmap on PTE unmap (Xen) */ - /* * for each managed physical page we maintain a list of 's @@ -250,7 +247,6 @@ void pmap_remove(struct pmap *, vaddr_t bool pmap_test_attrs(struct vm_page *, unsigned); void pmap_write_protect(struct pmap *, vaddr_t, vaddr_t, vm_prot_t); void pmap_load(void); -paddr_t pmap_init_tmp_pgtbl(paddr_t); vaddr_t reserve_dumppages(vaddr_t); /* XXX: not a pmap fn */ @@ -284,7 +280,12 @@ pmap_remove_all(struct pmap *pmap) __inline static void __attribute__((__unused__)) pmap_update_pg(vaddr_t va) { - invlpg(va); +#if defined(I386_CPU) + if (cpu_class == CPUCLASS_386) + tlbflush(); + else +#endif + invlpg(va); } /* @@ -294,8 +295,15 @@ pmap_update_pg(vaddr_t va) __inline static void __attribute__((__unused__)) pmap_update_2pg(vaddr_t va, vaddr_t vb) { - invlpg(va); - invlpg(vb); +#if defined(I386_CPU) + if (cpu_class == CPUCLASS_386) + tlbflush(); + else +#endif + { + invlpg(va); + invlpg(vb); + } } /* @@ -380,60 +388,6 @@ void pmap_cpu_init_late(struct cpu_info void sse2_zero_page(void *); void sse2_copy_page(void *, void *); - -#ifdef XEN - -#define XPTE_MASK L1_FRAME -#define XPTE_SHIFT 9 - -/* PTE access inline fuctions */ - -/* - * Get the machine address of the pointed pte - * We use hardware MMU to get value so works only for levels 1-3 - */ - -static __inline paddr_t -xpmap_ptetomach(pt_entry_t *pte) -{ - pt_entry_t *up_pte; - vaddr_t va = (vaddr_t) pte; - - va = ((va & XPTE_MASK) >> XPTE_SHIFT) | (vaddr_t) PTE_BASE; - up_pte = (pt_entry_t *) va; - - return (paddr_t) (((*up_pte) & PG_FRAME) + (((vaddr_t) pte) & (~PG_FRAME & ~VA_SIGN_MASK))); -} - -/* - * xpmap_update() - * Update an active pt entry with Xen - * Equivalent to *pte = npte - */ - -static __inline void -xpmap_update (pt_entry_t *pte, pt_entry_t npte) -{ - int s = splvm(); - - xpq_queue_pte_update((pt_entry_t *) xpmap_ptetomach(pte), npte); - xpq_flush_queue(); - splx(s); -} - - -/* Xen helpers to change bits of a pte */ -#define XPMAP_UPDATE_DIRECT 1 /* Update direct map entry flags too */ - -/* pmap functions with machine addresses */ -void pmap_kenter_ma(vaddr_t, paddr_t, vm_prot_t); -int pmap_enter_ma(struct pmap *, vaddr_t, paddr_t, paddr_t, - vm_prot_t, int, int); -bool pmap_extract_ma(pmap_t, vaddr_t, paddr_t *); -paddr_t vtomach(vaddr_t); - -#endif /* XEN */ - /* * Hooks for the pool allocator. */