Date: Mon, 4 Nov 2013 23:25:07 +0000 (UTC) From: Neel Natu <neel@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r257661 - in head/sys: amd64/vmm amd64/vmm/io modules/vmm Message-ID: <201311042325.rA4NP7qO087756@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201311042325.rA4NP7qO087756>