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
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to