From owner-svn-src-head@FreeBSD.ORG Mon Nov 4 23:25:08 2013 Return-Path: Delivered-To: svn-src-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 9B139212; Mon, 4 Nov 2013 23:25:08 +0000 (UTC) (envelope-from neel@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 865C72B23; Mon, 4 Nov 2013 23:25:08 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id rA4NP8GX087763; Mon, 4 Nov 2013 23:25:08 GMT (envelope-from neel@svn.freebsd.org) Received: (from neel@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id rA4NP7qO087756; Mon, 4 Nov 2013 23:25:07 GMT (envelope-from neel@svn.freebsd.org) Message-Id: <201311042325.rA4NP7qO087756@svn.freebsd.org> From: Neel Natu Date: Mon, 4 Nov 2013 23:25:07 +0000 (UTC) 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 X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 04 Nov 2013 23:25:08 -0000 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