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-all
mailing list