svn commit: r265224 - in projects/amd64_xen_pv/sys: amd64/amd64 amd64/conf amd64/include amd64/include/xen conf vm
Cherry G. Mathew
cherry at FreeBSD.org
Fri May 2 10:48:29 UTC 2014
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);
More information about the svn-src-projects
mailing list