svn commit: r257661 - in head/sys: amd64/vmm amd64/vmm/io modules/vmm

Neel Natu neel at FreeBSD.org
Mon Nov 4 23:25:08 UTC 2013


Author: neel
Date: Mon Nov  4 23:25:07 2013
New Revision: 257661
URL: http://svnweb.freebsd.org/changeset/base/257661

Log:
  Remove the 'vdev' abstraction that was meant to sit on top of device models
  in the kernel. This abstraction was redundant because the only device emulated
  inside vmm.ko is the local apic and it is always at a fixed guest physical
  address.
  
  Discussed with:	grehan

Deleted:
  head/sys/amd64/vmm/io/vdev.c
  head/sys/amd64/vmm/io/vdev.h
Modified:
  head/sys/amd64/vmm/io/vlapic.c
  head/sys/amd64/vmm/io/vlapic.h
  head/sys/amd64/vmm/vmm_lapic.c
  head/sys/modules/vmm/Makefile

Modified: head/sys/amd64/vmm/io/vlapic.c
==============================================================================
--- head/sys/amd64/vmm/io/vlapic.c	Mon Nov  4 22:45:26 2013	(r257660)
+++ head/sys/amd64/vmm/io/vlapic.c	Mon Nov  4 23:25:07 2013	(r257661)
@@ -44,7 +44,6 @@ __FBSDID("$FreeBSD$");
 #include "vmm_stat.h"
 #include "vmm_lapic.h"
 #include "vmm_ktr.h"
-#include "vdev.h"
 #include "vlapic.h"
 
 #define	VLAPIC_CTR0(vlapic, format)					\
@@ -100,8 +99,6 @@ struct vlapic {
 	struct vm		*vm;
 	int			vcpuid;
 
-	struct io_region	*mmio;
-	struct vdev_ops		*ops;
 	struct LAPIC		 apic;
 
 	int			 esr_update;
@@ -195,9 +192,8 @@ vlapic_init_ipi(struct vlapic *vlapic)
 }
 
 static int
-vlapic_op_reset(void* dev)
+vlapic_reset(struct vlapic *vlapic)
 {
-	struct vlapic 	*vlapic = (struct vlapic*)dev;
 	struct LAPIC	*lapic = &vlapic->apic;
 
 	memset(lapic, 0, sizeof(*lapic));
@@ -214,23 +210,6 @@ vlapic_op_reset(void* dev)
 
 }
 
-static int
-vlapic_op_init(void* dev)
-{
-	struct vlapic *vlapic = (struct vlapic*)dev;
-	vdev_register_region(vlapic->ops, vlapic, vlapic->mmio);
-	return vlapic_op_reset(dev);
-}
-
-static int
-vlapic_op_halt(void* dev)
-{
-	struct vlapic *vlapic = (struct vlapic*)dev;
-	vdev_unregister_region(vlapic, vlapic->mmio);
-	return 0;
-
-}
-
 void
 vlapic_set_intr_ready(struct vlapic *vlapic, int vector)
 {
@@ -594,11 +573,9 @@ vlapic_intr_accepted(struct vlapic *vlap
 }
 
 int
-vlapic_op_mem_read(void* dev, uint64_t gpa, opsize_t size, uint64_t *data)
+vlapic_read(struct vlapic *vlapic, uint64_t offset, uint64_t *data)
 {
-	struct vlapic 	*vlapic = (struct vlapic*)dev;
 	struct LAPIC	*lapic = &vlapic->apic;
-	uint64_t	 offset = gpa & ~(PAGE_SIZE);
 	uint32_t	*reg;
 	int		 i;
 
@@ -686,11 +663,9 @@ vlapic_op_mem_read(void* dev, uint64_t g
 }
 
 int
-vlapic_op_mem_write(void* dev, uint64_t gpa, opsize_t size, uint64_t data)
+vlapic_write(struct vlapic *vlapic, uint64_t offset, uint64_t data)
 {
-	struct vlapic 	*vlapic = (struct vlapic*)dev;
 	struct LAPIC	*lapic = &vlapic->apic;
-	uint64_t	 offset = gpa & ~(PAGE_SIZE);
 	uint32_t	*reg;
 	int		retval;
 
@@ -832,16 +807,6 @@ restart:
 		return (0);
 }
 
-struct vdev_ops vlapic_dev_ops = {
-	.name = "vlapic",
-	.init = vlapic_op_init,
-	.reset = vlapic_op_reset,
-	.halt = vlapic_op_halt,
-	.memread = vlapic_op_mem_read,
-	.memwrite = vlapic_op_mem_write,
-};
-static struct io_region vlapic_mmio[VM_MAXCPU];
-
 struct vlapic *
 vlapic_init(struct vm *vm, int vcpuid)
 {
@@ -856,17 +821,7 @@ vlapic_init(struct vm *vm, int vcpuid)
 	if (vcpuid == 0)
 		vlapic->msr_apicbase |= APICBASE_BSP;
 
-	vlapic->ops = &vlapic_dev_ops;
-
-	vlapic->mmio = vlapic_mmio + vcpuid;
-	vlapic->mmio->base = DEFAULT_APIC_BASE;
-	vlapic->mmio->len = PAGE_SIZE;
-	vlapic->mmio->attr = MMIO_READ|MMIO_WRITE;
-	vlapic->mmio->vcpu = vcpuid;
-
-	vdev_register(&vlapic_dev_ops, vlapic);
-
-	vlapic_op_init(vlapic);
+	vlapic_reset(vlapic);
 
 	return (vlapic);
 }
@@ -874,8 +829,7 @@ vlapic_init(struct vm *vm, int vcpuid)
 void
 vlapic_cleanup(struct vlapic *vlapic)
 {
-	vlapic_op_halt(vlapic);
-	vdev_unregister(vlapic);
+
 	free(vlapic, M_VLAPIC);
 }
 

Modified: head/sys/amd64/vmm/io/vlapic.h
==============================================================================
--- head/sys/amd64/vmm/io/vlapic.h	Mon Nov  4 22:45:26 2013	(r257660)
+++ head/sys/amd64/vmm/io/vlapic.h	Mon Nov  4 23:25:07 2013	(r257661)
@@ -29,10 +29,8 @@
 #ifndef _VLAPIC_H_
 #define	_VLAPIC_H_
 
-#include "vdev.h"
-
 struct vm;
-  
+ 
 /*
  * Map of APIC Registers:       Offset  Description          		 	Access
  */
@@ -92,13 +90,8 @@ enum x2apic_state;
 
 struct vlapic *vlapic_init(struct vm *vm, int vcpuid);
 void vlapic_cleanup(struct vlapic *vlapic);
-
-int vlapic_op_mem_write(void* dev, uint64_t gpa,
-    			opsize_t size, uint64_t data);
-
-int vlapic_op_mem_read(void* dev, uint64_t gpa,
-    			opsize_t size, uint64_t *data);
-
+int vlapic_write(struct vlapic *vlapic, uint64_t offset, uint64_t data);
+int vlapic_read(struct vlapic *vlapic, uint64_t offset, uint64_t *data);
 int vlapic_pending_intr(struct vlapic *vlapic);
 void vlapic_intr_accepted(struct vlapic *vlapic, int vector);
 void vlapic_set_intr_ready(struct vlapic *vlapic, int vector);

Modified: head/sys/amd64/vmm/vmm_lapic.c
==============================================================================
--- head/sys/amd64/vmm/vmm_lapic.c	Mon Nov  4 22:45:26 2013	(r257660)
+++ head/sys/amd64/vmm/vmm_lapic.c	Mon Nov  4 23:25:07 2013	(r257661)
@@ -130,7 +130,7 @@ lapic_rdmsr(struct vm *vm, int cpu, u_in
 		error = 0;
 	} else {
 		offset = x2apic_msr_to_regoff(msr);
-		error = vlapic_op_mem_read(vlapic, offset, DWORD, rval);
+		error = vlapic_read(vlapic, offset, rval);
 	}
 
 	return (error);
@@ -150,7 +150,7 @@ lapic_wrmsr(struct vm *vm, int cpu, u_in
 		error = 0;
 	} else {
 		offset = x2apic_msr_to_regoff(msr);
-		error = vlapic_op_mem_write(vlapic, offset, DWORD, val);
+		error = vlapic_write(vlapic, offset, val);
 	}
 
 	return (error);
@@ -174,7 +174,7 @@ lapic_mmio_write(void *vm, int cpu, uint
 		return (EINVAL);
 
 	vlapic = vm_lapic(vm, cpu);
-	error = vlapic_op_mem_write(vlapic, off, DWORD, wval);
+	error = vlapic_write(vlapic, off, wval);
 	return (error);
 }
 
@@ -196,6 +196,6 @@ lapic_mmio_read(void *vm, int cpu, uint6
 		return (EINVAL);
 
 	vlapic = vm_lapic(vm, cpu);
-	error = vlapic_op_mem_read(vlapic, off, DWORD, rval);
+	error = vlapic_read(vlapic, off, rval);
 	return (error);
 }

Modified: head/sys/modules/vmm/Makefile
==============================================================================
--- head/sys/modules/vmm/Makefile	Mon Nov  4 22:45:26 2013	(r257660)
+++ head/sys/modules/vmm/Makefile	Mon Nov  4 23:25:07 2013	(r257661)
@@ -27,7 +27,6 @@ SRCS+=	vmm.c		\
 .PATH: ${.CURDIR}/../../amd64/vmm/io
 SRCS+=	iommu.c		\
 	ppt.c           \
-	vdev.c		\
 	vlapic.c
 
 # intel-specific files


More information about the svn-src-head mailing list