Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 19 Aug 2013 18:57:58 +0000 (UTC)
From:      Neel Natu <neel@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r254540 - in projects/bhyve_npt_pmap: lib/libvmmapi sys/amd64/include usr.sbin/bhyve usr.sbin/bhyvectl usr.sbin/bhyveload
Message-ID:  <201308191857.r7JIvwHc092084@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: neel
Date: Mon Aug 19 18:57:58 2013
New Revision: 254540
URL: http://svnweb.freebsd.org/changeset/base/254540

Log:
  Add a parameter to the "get memory segment" ioctl to indicate whether or not
  the segment is wired.
  
  In general the memory segments belonging to a virtual machine are not wired
  unless the virtual machine is attached to a passthru pci device.

Modified:
  projects/bhyve_npt_pmap/lib/libvmmapi/vmmapi.c
  projects/bhyve_npt_pmap/lib/libvmmapi/vmmapi.h
  projects/bhyve_npt_pmap/sys/amd64/include/vmm_dev.h
  projects/bhyve_npt_pmap/usr.sbin/bhyve/pci_emul.c
  projects/bhyve_npt_pmap/usr.sbin/bhyvectl/bhyvectl.c
  projects/bhyve_npt_pmap/usr.sbin/bhyveload/bhyveload.c

Modified: projects/bhyve_npt_pmap/lib/libvmmapi/vmmapi.c
==============================================================================
--- projects/bhyve_npt_pmap/lib/libvmmapi/vmmapi.c	Mon Aug 19 17:44:19 2013	(r254539)
+++ projects/bhyve_npt_pmap/lib/libvmmapi/vmmapi.c	Mon Aug 19 18:57:58 2013	(r254540)
@@ -124,7 +124,8 @@ vm_destroy(struct vmctx *vm)
 }
 
 int
-vm_get_memory_seg(struct vmctx *ctx, vm_paddr_t gpa, size_t *ret_len)
+vm_get_memory_seg(struct vmctx *ctx, vm_paddr_t gpa, size_t *ret_len,
+		  int *wired)
 {
 	int error;
 	struct vm_memory_segment seg;
@@ -133,6 +134,8 @@ vm_get_memory_seg(struct vmctx *ctx, vm_
 	seg.gpa = gpa;
 	error = ioctl(ctx->fd, VM_GET_MEMORY_SEG, &seg);
 	*ret_len = seg.len;
+	if (wired != NULL)
+		*wired = seg.wired;
 	return (error);
 }
 

Modified: projects/bhyve_npt_pmap/lib/libvmmapi/vmmapi.h
==============================================================================
--- projects/bhyve_npt_pmap/lib/libvmmapi/vmmapi.h	Mon Aug 19 17:44:19 2013	(r254539)
+++ projects/bhyve_npt_pmap/lib/libvmmapi/vmmapi.h	Mon Aug 19 18:57:58 2013	(r254540)
@@ -45,7 +45,8 @@ enum vm_mmap_style {
 int	vm_create(const char *name);
 struct vmctx *vm_open(const char *name);
 void	vm_destroy(struct vmctx *ctx);
-int	vm_get_memory_seg(struct vmctx *ctx, vm_paddr_t gpa, size_t *ret_len);
+int	vm_get_memory_seg(struct vmctx *ctx, vm_paddr_t gpa, size_t *ret_len,
+			  int *wired);
 int	vm_setup_memory(struct vmctx *ctx, size_t len, enum vm_mmap_style s);
 void	*vm_map_gpa(struct vmctx *ctx, vm_paddr_t gaddr, size_t len);
 int	vm_get_gpa_pmap(struct vmctx *, uint64_t gpa, uint64_t *pte, int *num);

Modified: projects/bhyve_npt_pmap/sys/amd64/include/vmm_dev.h
==============================================================================
--- projects/bhyve_npt_pmap/sys/amd64/include/vmm_dev.h	Mon Aug 19 17:44:19 2013	(r254539)
+++ projects/bhyve_npt_pmap/sys/amd64/include/vmm_dev.h	Mon Aug 19 18:57:58 2013	(r254540)
@@ -36,7 +36,8 @@ int	vmmdev_cleanup(void);
 
 struct vm_memory_segment {
 	vm_paddr_t	gpa;	/* in */
-	size_t		len;	/* in */
+	size_t		len;
+	int		wired;
 };
 
 struct vm_register {

Modified: projects/bhyve_npt_pmap/usr.sbin/bhyve/pci_emul.c
==============================================================================
--- projects/bhyve_npt_pmap/usr.sbin/bhyve/pci_emul.c	Mon Aug 19 17:44:19 2013	(r254539)
+++ projects/bhyve_npt_pmap/usr.sbin/bhyve/pci_emul.c	Mon Aug 19 18:57:58 2013	(r254540)
@@ -1039,7 +1039,7 @@ init_pci(struct vmctx *ctx)
 	 * Accesses to memory addresses that are not allocated to system
 	 * memory or PCI devices return 0xff's.
 	 */
-	error = vm_get_memory_seg(ctx, 0, &lowmem);
+	error = vm_get_memory_seg(ctx, 0, &lowmem, NULL);
 	assert(error == 0);
 
 	memset(&memp, 0, sizeof(struct mem_range));

Modified: projects/bhyve_npt_pmap/usr.sbin/bhyvectl/bhyvectl.c
==============================================================================
--- projects/bhyve_npt_pmap/usr.sbin/bhyvectl/bhyvectl.c	Mon Aug 19 17:44:19 2013	(r254539)
+++ projects/bhyve_npt_pmap/usr.sbin/bhyvectl/bhyvectl.c	Mon Aug 19 18:57:58 2013	(r254540)
@@ -391,6 +391,7 @@ main(int argc, char *argv[])
 	struct vm_exit vmexit;
 	uint64_t ctl, eptp, bm, addr, u64, pteval[4], *pte;
 	struct vmctx *ctx;
+	int wired;
 
 	uint64_t cr0, cr3, cr4, dr7, rsp, rip, rflags, efer, pat;
 	uint64_t rax, rbx, rcx, rdx, rsi, rdi, rbp;
@@ -826,16 +827,18 @@ main(int argc, char *argv[])
 
 	if (!error && (get_lowmem || get_all)) {
 		gpa = 0;
-		error = vm_get_memory_seg(ctx, gpa, &len);
+		error = vm_get_memory_seg(ctx, gpa, &len, &wired);
 		if (error == 0)
-			printf("lowmem\t\t0x%016lx/%ld\n", gpa, len);
+			printf("lowmem\t\t0x%016lx/%ld%s\n", gpa, len,
+			    wired ? " wired" : "");
 	}
 
 	if (!error && (get_highmem || get_all)) {
 		gpa = 4 * GB;
-		error = vm_get_memory_seg(ctx, gpa, &len);
+		error = vm_get_memory_seg(ctx, gpa, &len, &wired);
 		if (error == 0)
-			printf("highmem\t\t0x%016lx/%ld\n", gpa, len);
+			printf("highmem\t\t0x%016lx/%ld%s\n", gpa, len,
+			    wired ? " wired" : "");
 	}
 
 	if (!error && (get_efer || get_all)) {

Modified: projects/bhyve_npt_pmap/usr.sbin/bhyveload/bhyveload.c
==============================================================================
--- projects/bhyve_npt_pmap/usr.sbin/bhyveload/bhyveload.c	Mon Aug 19 17:44:19 2013	(r254539)
+++ projects/bhyve_npt_pmap/usr.sbin/bhyveload/bhyveload.c	Mon Aug 19 18:57:58 2013	(r254540)
@@ -492,8 +492,8 @@ static void
 cb_getmem(void *arg, uint64_t *ret_lowmem, uint64_t *ret_highmem)
 {
 
-	vm_get_memory_seg(ctx, 0, ret_lowmem);
-	vm_get_memory_seg(ctx, 4 * GB, ret_highmem);
+	vm_get_memory_seg(ctx, 0, ret_lowmem, NULL);
+	vm_get_memory_seg(ctx, 4 * GB, ret_highmem, NULL);
 }
 
 static const char *



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201308191857.r7JIvwHc092084>