Date: Fri, 2 May 2014 10:48:27 +0000 (UTC) From: "Cherry G. Mathew" <cherry@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r265224 - in projects/amd64_xen_pv/sys: amd64/amd64 amd64/conf amd64/include amd64/include/xen conf vm Message-ID: <201405021048.s42AmRln090088@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: cherry Date: Fri May 2 10:48:26 2014 New Revision: 265224 URL: http://svnweb.freebsd.org/changeset/base/265224 Log: Oops. Missed these files from r265223 Approved by: gibbs(implicit) Modified: projects/amd64_xen_pv/sys/amd64/amd64/db_interface.c projects/amd64_xen_pv/sys/amd64/conf/XEN projects/amd64_xen_pv/sys/amd64/include/pmap.h projects/amd64_xen_pv/sys/amd64/include/vmparam.h projects/amd64_xen_pv/sys/amd64/include/xen/xen-os.h projects/amd64_xen_pv/sys/amd64/include/xen/xenpmap.h projects/amd64_xen_pv/sys/conf/files.amd64 projects/amd64_xen_pv/sys/vm/vm_page.c Modified: projects/amd64_xen_pv/sys/amd64/amd64/db_interface.c ============================================================================== --- projects/amd64_xen_pv/sys/amd64/amd64/db_interface.c Fri May 2 10:43:32 2014 (r265223) +++ projects/amd64_xen_pv/sys/amd64/amd64/db_interface.c Fri May 2 10:48:26 2014 (r265224) @@ -93,20 +93,7 @@ db_write_bytes(vm_offset_t addr, size_t if (ret == 0) { if (addr > trunc_page((vm_offset_t)btext) - size && addr < round_page((vm_offset_t)etext)) { - -#ifdef XEN - static size_t tsz; /* mmu_map.h opaque cookie size */ - tsz = mmu_map_t_size(); - KASSERT(tsz != 0, ("tsz != 0")); - char tbuf0[tsz]; /* Safe to do this on the stack since tsz is - * effectively const. - */ - - mmu_map_t tptr0 = tbuf0; - ptep0 = vtopte_hold(addr, &tptr0); -#else ptep0 = vtopte(addr); -#endif oldmap0 = *ptep0; *ptep0 |= PG_RW; @@ -117,38 +104,20 @@ db_write_bytes(vm_offset_t addr, size_t if ((*ptep0 & PG_PS) == 0) { addr1 = trunc_page(addr + size - 1); if (trunc_page(addr) != addr1) { -#ifdef XEN - KASSERT(tsz != 0, ("tsz != 0")); - char tbuf1[tsz]; /* Safe to do this on the stack since tsz is - * effectively const. - */ - - mmu_map_t tptr1 = tbuf1; - ptep1 = vtopte_hold(addr1, &tptr1); -#else ptep1 = vtopte(addr1); -#endif /* XEN */ oldmap1 = *ptep1; *ptep1 |= PG_RW; -#ifdef XEN - vtopte_release(addr1, &tptr1); -#endif /* XEN */ } } else { -#ifndef XEN addr1 = trunc_2mpage(addr + size - 1); if (trunc_2mpage(addr) != addr1) { ptep1 = vtopte(addr1); oldmap1 = *ptep1; *ptep1 |= PG_RW; } -#endif /* !XEN */ } invltlb(); -#ifdef XEN - vtopte_release(addr, &tptr0); -#endif /* XEN */ } dst = (char *)addr; Modified: projects/amd64_xen_pv/sys/amd64/conf/XEN ============================================================================== --- projects/amd64_xen_pv/sys/amd64/conf/XEN Fri May 2 10:43:32 2014 (r265223) +++ projects/amd64_xen_pv/sys/amd64/conf/XEN Fri May 2 10:48:26 2014 (r265224) @@ -7,7 +7,6 @@ cpu HAMMER ident XEN makeoptions DEBUG=-g # Build kernel with gdb(1) debug symbols -makeoptions WITHOUT_MODULES="aha ahb amd cxgb dpt drm hptmv ida malo mps mwl nve sound sym trm xfs" options SCHED_ULE # ULE scheduler nooptions PREEMPTION # Enable kernel thread preemption @@ -58,7 +57,7 @@ nooptions WITNESS_SKIPSPIN # Don't run nooptions VERBOSE_SYSINIT nooptions NATIVE -option XEN +options XEN nodevice atpic nodevice isa nodevice uart_ns8250 @@ -77,6 +76,7 @@ nooptions SMP # Symmetric MultiProces nodevice atkbdc # AT keyboard controller nodevice atkbd # AT keyboard nodevice psm # PS/2 mouse +nodevice xn # XXX: Remove me - dom0 disaster. device pci #device kbdmux # keyboard multiplexer Modified: projects/amd64_xen_pv/sys/amd64/include/pmap.h ============================================================================== --- projects/amd64_xen_pv/sys/amd64/include/pmap.h Fri May 2 10:43:32 2014 (r265223) +++ projects/amd64_xen_pv/sys/amd64/include/pmap.h Fri May 2 10:48:26 2014 (r265224) @@ -168,7 +168,7 @@ ((unsigned long)(l2) << PDRSHIFT) | \ ((unsigned long)(l1) << PAGE_SHIFT)) -#define NKPML4E 1 /* number of kernel PML4 slots */ +#define NKPML4E 4 /* number of kernel PML4 slots */ #define NUPML4E (NPML4EPG/2) /* number of userland PML4 pages */ #define NUPDPE (NUPML4E*NPDPEPG)/* number of userland PDP pages */ @@ -178,19 +178,26 @@ * NDMPML4E is the number of PML4 entries that are used to implement the * direct map. It must be a power of two. */ -#define NDMPML4E 2 +#define NDMPML4E 8 /* * The *PDI values control the layout of virtual memory. The starting address * of the direct map, which is controlled by DMPML4I, must be a multiple of * its size. (See the PHYS_TO_DMAP() and DMAP_TO_PHYS() macros.) */ +#ifdef XEN +/* Xen reserves entries 256 - 271 */ +#define PML4PML4I 272 /* Index of recursive pml4 mapping */ +#else /* Native */ + #define PML4PML4I (NPML4EPG/2) /* Index of recursive pml4 mapping */ +#endif -#define KPML4I (NPML4EPG-1) /* Top 512GB for KVM */ -#define DMPML4I rounddown(KPML4I - NDMPML4E, NDMPML4E) /* Below KVM */ #define KPML4BASE (NPML4EPG-NKPML4E) /* KVM at highest addresses */ +#define DMPML4I rounddown(KPML4BASE - NDMPML4E, NDMPML4E) /* Below KVM */ + +#define KPML4I (NPML4EPG-1) /* Top 512GB for KVM */ #define KPDPI (NPDPEPG-2) /* kernbase at -2GB */ /* @@ -239,14 +246,9 @@ extern u_int64_t KPML4phys; /* physical * the corresponding pde that in turn maps it. */ -#ifdef XEN -pt_entry_t *vtopte_hold(vm_offset_t, void *); -void vtopte_release(vm_offset_t, void *); -#else pt_entry_t *vtopte(vm_offset_t); -#endif -#define vtophys(va) pmap_kextract(((vm_offset_t) (va))) +#ifndef XEN #define pte_load_store(ptep, pte) atomic_swap_long(ptep, pte) #define pte_load_clear(ptep) atomic_swap_long(ptep, 0) #define pte_store(ptep, pte) do { \ @@ -255,6 +257,9 @@ pt_entry_t *vtopte(vm_offset_t); #define pte_clear(ptep) pte_store(ptep, 0) #define pde_store(pdep, pde) pte_store(pdep, pde) +#endif + +#define vtophys(va) pmap_kextract(((vm_offset_t) (va))) #if defined(XEN) #include <machine/atomic.h> @@ -265,16 +270,6 @@ pt_entry_t *vtopte(vm_offset_t); #include <sys/systm.h> /* XXX: for KASSERT() remove, when done */ -#define MACH_TO_VM_PAGE(ma) PHYS_TO_VM_PAGE(xpmap_mtop((ma))) -#define VM_PAGE_TO_MACH(m) xpmap_ptom(VM_PAGE_TO_PHYS((m))) - -#define VTOM(va) xpmap_ptom(VTOP(va)) -vm_paddr_t pmap_kextract_ma(vm_offset_t); -#define vtomach(va) pmap_kextract_ma(((vm_offset_t) (va))) - -vm_paddr_t pmap_extract_ma(struct pmap *pmap, vm_offset_t va); - -void pmap_kenter_ma(vm_offset_t va, vm_paddr_t pa); void pmap_map_readonly(struct pmap *pmap, vm_offset_t va, int len); void pmap_map_readwrite(struct pmap *pmap, vm_offset_t va, int len); Modified: projects/amd64_xen_pv/sys/amd64/include/vmparam.h ============================================================================== --- projects/amd64_xen_pv/sys/amd64/include/vmparam.h Fri May 2 10:43:32 2014 (r265223) +++ projects/amd64_xen_pv/sys/amd64/include/vmparam.h Fri May 2 10:48:26 2014 (r265224) @@ -76,18 +76,12 @@ * Note: XEN does not use this as kmem_alloc() is functional via its * own boot time mapped backend allocator. */ -#ifndef XEN #define UMA_MD_SMALL_ALLOC -#endif /* * The physical address space is densely populated. */ -#ifndef XEN #define VM_PHYSSEG_DENSE -#else /* XEN */ -#define VM_PHYSSEG_SPARSE -#endif /* * The number of PHYSSEG entries must be one greater than the number Modified: projects/amd64_xen_pv/sys/amd64/include/xen/xen-os.h ============================================================================== --- projects/amd64_xen_pv/sys/amd64/include/xen/xen-os.h Fri May 2 10:43:32 2014 (r265223) +++ projects/amd64_xen_pv/sys/amd64/include/xen/xen-os.h Fri May 2 10:48:26 2014 (r265224) @@ -38,6 +38,8 @@ #ifndef __ASSEMBLY__ #ifdef SMP +extern int gdtset; + #include <sys/time.h> /* XXX for pcpu.h */ #include <sys/pcpu.h> /* XXX for PCPU_GET */ static inline int Modified: projects/amd64_xen_pv/sys/amd64/include/xen/xenpmap.h ============================================================================== --- projects/amd64_xen_pv/sys/amd64/include/xen/xenpmap.h Fri May 2 10:43:32 2014 (r265223) +++ projects/amd64_xen_pv/sys/amd64/include/xen/xenpmap.h Fri May 2 10:48:26 2014 (r265224) @@ -39,7 +39,6 @@ struct segment_descriptor; /* Forward de #include <sys/types.h> #include <vm/vm.h> #include <vm/pmap.h> -#include <machine/pmap.h> void _xen_queue_pt_update(vm_paddr_t, vm_paddr_t, char *, int); void xen_pt_switch(vm_paddr_t); @@ -101,6 +100,17 @@ void pmap_ref(pt_entry_t *pte, vm_paddr_ #define SH_PD_SET_VA_MA 2 #define SH_PD_SET_VA_CLEAR 3 +#define MACH_TO_VM_PAGE(ma) PHYS_TO_VM_PAGE(xpmap_mtop((ma))) +#define VM_PAGE_TO_MACH(m) xpmap_ptom(VM_PAGE_TO_PHYS((m))) + +#define VTOM(va) xpmap_ptom(VTOP(va)) + +vm_paddr_t pmap_extract_ma(struct pmap *pmap, vm_offset_t va); +vm_paddr_t pmap_kextract_ma(vm_offset_t); +void pmap_kenter_ma(vm_offset_t va, vm_paddr_t pa); + +#define vtomach(va) pmap_kextract_ma(((vm_offset_t) (va))) + struct pmap; void pd_set(struct pmap *pmap, int ptepindex, vm_paddr_t val, int type); #ifdef notyet @@ -207,6 +217,30 @@ do { \ xen_flush_queue(); \ } while (/*CONSTCOND*/0) +#define pte_store(ptep, pte) do { \ + PT_SET_VA_MA((vm_offset_t)(ptep), (vm_paddr_t)(pte), true); \ + } while (0) +#define pte_clear(ptep) do { \ + PT_CLEAR_VA((vm_offset_t)(ptep), true); \ + } while (0) + +#define pde_store(pdep, pde) pte_store(pdep, pde) + +static inline pt_entry_t pte_load_store(pt_entry_t *ptep, pt_entry_t npte) +{ + pt_entry_t pte; + + pte = *ptep; + + pte_store(ptep, npte); + /* XXX: SMP race! */ + + return pte; +} + +#define pte_load_clear(ptep) pte_load_store(ptep, 0); + + static __inline vm_paddr_t xpmap_mtop(vm_paddr_t mpa) { Modified: projects/amd64_xen_pv/sys/conf/files.amd64 ============================================================================== --- projects/amd64_xen_pv/sys/conf/files.amd64 Fri May 2 10:43:32 2014 (r265223) +++ projects/amd64_xen_pv/sys/conf/files.amd64 Fri May 2 10:48:26 2014 (r265224) @@ -133,7 +133,7 @@ amd64/amd64/support.S standard amd64/amd64/sys_machdep.c standard amd64/amd64/trap.c standard amd64/amd64/uio_machdep.c standard -amd64/amd64/uma_machdep.c optional native +amd64/amd64/uma_machdep.c standard amd64/amd64/vm_machdep.c standard amd64/pci/pci_cfgreg.c optional pci amd64/xen/clock.c optional xen Modified: projects/amd64_xen_pv/sys/vm/vm_page.c ============================================================================== --- projects/amd64_xen_pv/sys/vm/vm_page.c Fri May 2 10:43:32 2014 (r265223) +++ projects/amd64_xen_pv/sys/vm/vm_page.c Fri May 2 10:48:26 2014 (r265224) @@ -323,7 +323,7 @@ vm_page_startup(vm_offset_t vaddr) high_water = phys_avail[i + 1]; } -#ifdef XEN +#if defined(XEN) && !defined(__amd64__) low_water = 0; #endif @@ -379,11 +379,7 @@ vm_page_startup(vm_offset_t vaddr) * included in a crash dump. Since the message buffer is accessed * through the direct map, they are not automatically included. */ -#if defined(XEN) - pa = VTOP(msgbufp->msg_ptr); -#else /* native */ pa = DMAP_TO_PHYS((vm_offset_t)msgbufp->msg_ptr); -#endif last_pa = pa + round_page(msgbufsize); while (pa < last_pa) { dump_add_page(pa);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201405021048.s42AmRln090088>