socsvn commit: r289539 - in soc2015/mihai/bhyve-on-arm-head: lib/libvmmapiarm usr.sbin/bhyvearm usr.sbin/bhyveloadarm

mihai at FreeBSD.org mihai at FreeBSD.org
Mon Aug 10 18:47:25 UTC 2015


Author: mihai
Date: Mon Aug 10 18:47:22 2015
New Revision: 289539
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=289539

Log:
  usr.sbin: bhyve*: attach a vgic to a VM

Modified:
  soc2015/mihai/bhyve-on-arm-head/lib/libvmmapiarm/vmmapi.c
  soc2015/mihai/bhyve-on-arm-head/lib/libvmmapiarm/vmmapi.h
  soc2015/mihai/bhyve-on-arm-head/usr.sbin/bhyvearm/bhyverun.c
  soc2015/mihai/bhyve-on-arm-head/usr.sbin/bhyveloadarm/bhyveloadarm.c

Modified: soc2015/mihai/bhyve-on-arm-head/lib/libvmmapiarm/vmmapi.c
==============================================================================
--- soc2015/mihai/bhyve-on-arm-head/lib/libvmmapiarm/vmmapi.c	Mon Aug 10 18:46:26 2015	(r289538)
+++ soc2015/mihai/bhyve-on-arm-head/lib/libvmmapiarm/vmmapi.c	Mon Aug 10 18:47:22 2015	(r289539)
@@ -320,12 +320,22 @@
 		return (NULL);
 }
 
-/*
- * From Intel Vol 3a:
- * Table 9-1. IA-32 Processor States Following Power-up, Reset or INIT
- */
 int
 vcpu_reset(struct vmctx *vmctx, int vcpu)
 {
 	return (ENXIO);
 }
+
+int
+vm_attach_vgic(struct vmctx *ctx, uint64_t distributor_paddr, uint64_t cpu_int_paddr)
+{
+	struct vm_attach_vgic vav;
+	
+	bzero(&vav, sizeof(vav));
+	vav.distributor_paddr = distributor_paddr;
+	vav.cpu_int_paddr = cpu_int_paddr;
+
+	return (ioctl(ctx->fd, VM_ATTACH_VGIC, &vav));
+}
+
+

Modified: soc2015/mihai/bhyve-on-arm-head/lib/libvmmapiarm/vmmapi.h
==============================================================================
--- soc2015/mihai/bhyve-on-arm-head/lib/libvmmapiarm/vmmapi.h	Mon Aug 10 18:46:26 2015	(r289538)
+++ soc2015/mihai/bhyve-on-arm-head/lib/libvmmapiarm/vmmapi.h	Mon Aug 10 18:47:22 2015	(r289539)
@@ -68,4 +68,7 @@
 
 /* Reset vcpu register state */
 int	vcpu_reset(struct vmctx *ctx, int vcpu);
+
+int	vm_attach_vgic(struct vmctx *ctx, uint64_t distributor_paddr, uint64_t cpu_int_paddr);
+
 #endif	/* _VMMAPI_H_ */

Modified: soc2015/mihai/bhyve-on-arm-head/usr.sbin/bhyvearm/bhyverun.c
==============================================================================
--- soc2015/mihai/bhyve-on-arm-head/usr.sbin/bhyvearm/bhyverun.c	Mon Aug 10 18:46:26 2015	(r289538)
+++ soc2015/mihai/bhyve-on-arm-head/usr.sbin/bhyvearm/bhyverun.c	Mon Aug 10 18:47:22 2015	(r289539)
@@ -299,12 +299,10 @@
 	int max_vcpus;
 	struct vmctx *ctx;
 	uint64_t pc;
-	size_t memsize;
 
 	bvmcons = 0;
 	progname = basename(argv[0]);
 	guest_ncpus = 1;
-	memsize = 256 * MB;
 
 	while ((c = getopt(argc, argv, "abehAHIPp:g:c:s:S:m:")) != -1) {
 		switch (c) {

Modified: soc2015/mihai/bhyve-on-arm-head/usr.sbin/bhyveloadarm/bhyveloadarm.c
==============================================================================
--- soc2015/mihai/bhyve-on-arm-head/usr.sbin/bhyveloadarm/bhyveloadarm.c	Mon Aug 10 18:46:26 2015	(r289538)
+++ soc2015/mihai/bhyve-on-arm-head/usr.sbin/bhyveloadarm/bhyveloadarm.c	Mon Aug 10 18:47:22 2015	(r289539)
@@ -79,7 +79,7 @@
 
 	fprintf(stderr,
 	    "usage: %s [-k <kernel-image>] -l <kernel-load-address>, -b <memory-base-address>\n"
-	    "       %*s [-m mem-size] <vmname>\n",
+	    "       %*s [-m mem-size] [-p periphbase] <vmname>\n",
 	    progname,
 	    (int)strlen(progname), "");
 	exit(1);
@@ -92,6 +92,7 @@
 	int opt, error;
 	int kernel_image_fd;
 	uint64_t kernel_load_address, memory_base_address;
+	uint64_t periphbase;
 	char kernel_image_name[KERNEL_IMAGE_NAME_LEN];
 	struct stat st;
 	void *addr;
@@ -101,9 +102,10 @@
 	mem_size = 128 * MB;
 	kernel_load_address = 0xc0000000;
 	memory_base_address = 0xc0000000;
-	strncpy(kernel_image_name, "wfi.out", KERNEL_IMAGE_NAME_LEN);
+	periphbase = 0x2c000000;
+	strncpy(kernel_image_name, "kernel.bin", KERNEL_IMAGE_NAME_LEN);
 
-	while ((opt = getopt(argc, argv, "k:l:b:m:")) != -1) {
+	while ((opt = getopt(argc, argv, "k:l:b:m:p")) != -1) {
 		switch (opt) {
 		case 'k':
 			strncpy(kernel_image_name, optarg, KERNEL_IMAGE_NAME_LEN);
@@ -117,6 +119,8 @@
 		case 'm':
 			mem_size = strtoul(optarg, NULL, 0) * MB;
 			break;
+		case 'p':
+			periphbase = strtoul(optarg, NULL, 0);
 		case '?':
 			usage();
 		}
@@ -171,6 +175,9 @@
 		exit(1);
 	}
 
+	error = vm_attach_vgic(ctx, periphbase + 0x1000, periphbase + 0x2000);
+	if (error) {
+	}
 	munmap(addr, st.st_size);
 
 	guest_setreg(VM_REG_GUEST_PC, kernel_load_address);


More information about the svn-soc-all mailing list