PERFORCE change 1190242 for review
John Baldwin
jhb at FreeBSD.org
Tue Jan 21 18:09:25 UTC 2014
http://p4web.freebsd.org/@@1190242?ac=10
Change 1190242 by jhb at jhb_jhbbsd on 2014/01/21 18:08:58
IFC @1190241
Affected files ...
.. //depot/projects/pci/sys/amd64/vmm/io/iommu.c#2 integrate
.. //depot/projects/pci/sys/amd64/vmm/io/ppt.c#6 integrate
.. //depot/projects/pci/sys/amd64/vmm/io/ppt.h#4 integrate
.. //depot/projects/pci/sys/amd64/vmm/vmm.c#9 integrate
.. //depot/projects/pci/sys/boot/i386/libi386/comconsole.c#5 integrate
.. //depot/projects/pci/sys/boot/pc98/libpc98/comconsole.c#5 integrate
.. //depot/projects/pci/sys/dev/vt/hw/fb/vt_fb.c#3 integrate
.. //depot/projects/pci/sys/kern/vfs_bio.c#14 integrate
.. //depot/projects/pci/sys/vm/vm_pageout.c#12 integrate
.. //depot/projects/pci/sys/x86/include/legacyvar.h#4 integrate
.. //depot/projects/pci/sys/x86/pci/pci_bus.c#7 integrate
.. //depot/projects/pci/sys/x86/pci/qpi.c#7 integrate
.. //depot/projects/pci/sys/x86/x86/mptable_pci.c#19 integrate
Differences ...
==== //depot/projects/pci/sys/amd64/vmm/io/iommu.c#2 (text+ko) ====
@@ -23,16 +23,17 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD: head/sys/amd64/vmm/io/iommu.c 245678 2013-01-20 03:42:49Z neel $
+ * $FreeBSD: head/sys/amd64/vmm/io/iommu.c 260972 2014-01-21 03:01:34Z neel $
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/amd64/vmm/io/iommu.c 245678 2013-01-20 03:42:49Z neel $");
+__FBSDID("$FreeBSD: head/sys/amd64/vmm/io/iommu.c 260972 2014-01-21 03:01:34Z neel $");
#include <sys/param.h>
#include <sys/types.h>
#include <sys/systm.h>
#include <sys/bus.h>
+#include <sys/sysctl.h>
#include <dev/pci/pcivar.h>
#include <dev/pci/pcireg.h>
@@ -43,7 +44,13 @@
#include "vmm_mem.h"
#include "iommu.h"
-static boolean_t iommu_avail;
+SYSCTL_DECL(_hw_vmm);
+SYSCTL_NODE(_hw_vmm, OID_AUTO, iommu, CTLFLAG_RW, 0, "bhyve iommu parameters");
+
+static int iommu_avail;
+SYSCTL_INT(_hw_vmm_iommu, OID_AUTO, initialized, CTLFLAG_RD, &iommu_avail,
+ 0, "bhyve iommu initialized?");
+
static struct iommu_ops *ops;
static void *host_domain;
@@ -160,7 +167,7 @@
if (error)
return;
- iommu_avail = TRUE;
+ iommu_avail = 1;
/*
* Create a domain for the devices owned by the host
==== //depot/projects/pci/sys/amd64/vmm/io/ppt.c#6 (text+ko) ====
@@ -23,11 +23,11 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD: head/sys/amd64/vmm/io/ppt.c 259482 2013-12-16 19:59:31Z neel $
+ * $FreeBSD: head/sys/amd64/vmm/io/ppt.c 260972 2014-01-21 03:01:34Z neel $
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/amd64/vmm/io/ppt.c 259482 2013-12-16 19:59:31Z neel $");
+__FBSDID("$FreeBSD: head/sys/amd64/vmm/io/ppt.c 260972 2014-01-21 03:01:34Z neel $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -38,6 +38,7 @@
#include <sys/pciio.h>
#include <sys/rman.h>
#include <sys/smp.h>
+#include <sys/sysctl.h>
#include <dev/pci/pcivar.h>
#include <dev/pci/pcireg.h>
@@ -100,7 +101,12 @@
} msix;
} pptdevs[64];
+SYSCTL_DECL(_hw_vmm);
+SYSCTL_NODE(_hw_vmm, OID_AUTO, ppt, CTLFLAG_RW, 0, "bhyve passthru devices");
+
static int num_pptdevs;
+SYSCTL_INT(_hw_vmm_ppt, OID_AUTO, devices, CTLFLAG_RD, &num_pptdevs, 0,
+ "number of pci passthru devices");
static int
ppt_probe(device_t dev)
@@ -282,7 +288,14 @@
}
int
-ppt_num_devices(struct vm *vm)
+ppt_avail_devices(void)
+{
+
+ return (num_pptdevs);
+}
+
+int
+ppt_assigned_devices(struct vm *vm)
{
int i, num;
==== //depot/projects/pci/sys/amd64/vmm/io/ppt.h#4 (text+ko) ====
@@ -23,7 +23,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD: head/sys/amd64/vmm/io/ppt.h 259482 2013-12-16 19:59:31Z neel $
+ * $FreeBSD: head/sys/amd64/vmm/io/ppt.h 260972 2014-01-21 03:01:34Z neel $
*/
#ifndef _IO_PPT_H_
@@ -36,10 +36,16 @@
uint64_t addr, uint64_t msg, int numvec);
int ppt_setup_msix(struct vm *vm, int vcpu, int bus, int slot, int func,
int idx, uint64_t addr, uint64_t msg, uint32_t vector_control);
-int ppt_num_devices(struct vm *vm);
+int ppt_assigned_devices(struct vm *vm);
boolean_t ppt_is_mmio(struct vm *vm, vm_paddr_t gpa);
/*
+ * Returns the number of devices sequestered by the ppt driver for assignment
+ * to virtual machines.
+ */
+int ppt_avail_devices(void);
+
+/*
* The following functions should never be called directly.
* Use 'vm_assign_pptdev()' and 'vm_unassign_pptdev()' instead.
*/
==== //depot/projects/pci/sys/amd64/vmm/vmm.c#9 (text+ko) ====
@@ -23,11 +23,11 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD: head/sys/amd64/vmm/vmm.c 260619 2014-01-14 01:55:58Z neel $
+ * $FreeBSD: head/sys/amd64/vmm/vmm.c 260972 2014-01-21 03:01:34Z neel $
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/amd64/vmm/vmm.c 260619 2014-01-14 01:55:58Z neel $");
+__FBSDID("$FreeBSD: head/sys/amd64/vmm/vmm.c 260972 2014-01-21 03:01:34Z neel $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -266,7 +266,8 @@
switch (what) {
case MOD_LOAD:
vmmdev_init();
- iommu_init();
+ if (ppt_avail_devices() > 0)
+ iommu_init();
error = vmm_init();
if (error == 0)
vmm_initialized = 1;
@@ -604,7 +605,7 @@
if (error)
return (error);
- if (ppt_num_devices(vm) == 0) {
+ if (ppt_assigned_devices(vm) == 0) {
vm_iommu_unmap(vm);
vm_gpa_unwire(vm);
}
@@ -624,7 +625,7 @@
*
* We need to do this before the first pci passthru device is attached.
*/
- if (ppt_num_devices(vm) == 0) {
+ if (ppt_assigned_devices(vm) == 0) {
KASSERT(vm->iommu == NULL,
("vm_assign_pptdev: iommu must be NULL"));
maxaddr = vmm_mem_maxaddr();
==== //depot/projects/pci/sys/boot/i386/libi386/comconsole.c#5 (text+ko) ====
@@ -24,7 +24,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/boot/i386/libi386/comconsole.c 245848 2013-01-23 18:34:21Z jhb $");
+__FBSDID("$FreeBSD: head/sys/boot/i386/libi386/comconsole.c 260949 2014-01-20 23:27:05Z mav $");
#include <stand.h>
#include <bootstrap.h>
@@ -181,8 +181,7 @@
return (CMD_ERROR);
}
- if ((comconsole.c_flags & (C_ACTIVEIN | C_ACTIVEOUT)) != 0 &&
- comc_curspeed != speed)
+ if (comc_curspeed != speed)
comc_setup(speed, comc_port);
env_setenv(ev->ev_name, flags | EV_NOHOOK, value, NULL, NULL);
@@ -200,8 +199,7 @@
return (CMD_ERROR);
}
- if ((comconsole.c_flags & (C_ACTIVEIN | C_ACTIVEOUT)) != 0 &&
- comc_port != port)
+ if (comc_port != port)
comc_setup(comc_curspeed, port);
env_setenv(ev->ev_name, flags | EV_NOHOOK, value, NULL, NULL);
@@ -309,6 +307,8 @@
unsetenv("hw.uart.console");
comc_curspeed = speed;
comc_port = port;
+ if ((comconsole.c_flags & (C_ACTIVEIN | C_ACTIVEOUT)) == 0)
+ return;
outb(comc_port + com_cfcr, CFCR_DLAB | COMC_FMT);
outb(comc_port + com_dlbl, COMC_BPS(speed) & 0xff);
==== //depot/projects/pci/sys/boot/pc98/libpc98/comconsole.c#5 (text+ko) ====
@@ -24,7 +24,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/boot/pc98/libpc98/comconsole.c 251223 2013-06-01 12:27:48Z nyan $");
+__FBSDID("$FreeBSD: head/sys/boot/pc98/libpc98/comconsole.c 260949 2014-01-20 23:27:05Z mav $");
#include <stand.h>
#include <bootstrap.h>
@@ -181,8 +181,7 @@
return (CMD_ERROR);
}
- if ((comconsole.c_flags & (C_ACTIVEIN | C_ACTIVEOUT)) != 0 &&
- comc_curspeed != speed)
+ if (comc_curspeed != speed)
comc_setup(speed, comc_port);
env_setenv(ev->ev_name, flags | EV_NOHOOK, value, NULL, NULL);
@@ -200,8 +199,7 @@
return (CMD_ERROR);
}
- if ((comconsole.c_flags & (C_ACTIVEIN | C_ACTIVEOUT)) != 0 &&
- comc_port != port)
+ if (comc_port != port)
comc_setup(comc_curspeed, port);
env_setenv(ev->ev_name, flags | EV_NOHOOK, value, NULL, NULL);
@@ -309,6 +307,8 @@
unsetenv("hw.uart.console");
comc_curspeed = speed;
comc_port = port;
+ if ((comconsole.c_flags & (C_ACTIVEIN | C_ACTIVEOUT)) == 0)
+ return;
outb(comc_port + com_cfcr, CFCR_DLAB | COMC_FMT);
outb(comc_port + com_dlbl, COMC_BPS(speed) & 0xff);
==== //depot/projects/pci/sys/dev/vt/hw/fb/vt_fb.c#3 (text+ko) ====
@@ -26,11 +26,11 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD: head/sys/dev/vt/hw/fb/vt_fb.c 259777 2013-12-23 18:09:10Z ray $
+ * $FreeBSD: head/sys/dev/vt/hw/fb/vt_fb.c 260953 2014-01-20 23:36:16Z ray $
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/vt/hw/fb/vt_fb.c 259777 2013-12-23 18:09:10Z ray $");
+__FBSDID("$FreeBSD: head/sys/dev/vt/hw/fb/vt_fb.c 260953 2014-01-20 23:36:16Z ray $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -69,8 +69,9 @@
return (info->fb_ioctl(info->fb_cdev, cmd, data, 0, td));
}
-static int vt_fb_mmap(struct vt_device *vd, vm_ooffset_t offset,
- vm_paddr_t *paddr, int prot, vm_memattr_t *memattr)
+static int
+vt_fb_mmap(struct vt_device *vd, vm_ooffset_t offset, vm_paddr_t *paddr,
+ int prot, vm_memattr_t *memattr)
{
struct fb_info *info;
==== //depot/projects/pci/sys/kern/vfs_bio.c#14 (text+ko) ====
@@ -43,7 +43,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/kern/vfs_bio.c 259952 2013-12-27 17:04:51Z kib $");
+__FBSDID("$FreeBSD: head/sys/kern/vfs_bio.c 260974 2014-01-21 03:24:52Z jhb $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -715,7 +715,7 @@
}
/*
- * Ideal allocation size for the transient bio submap if 10%
+ * Ideal allocation size for the transient bio submap is 10%
* of the maximal space buffer map. This roughly corresponds
* to the amount of the buffer mapped for typical UFS load.
*
==== //depot/projects/pci/sys/vm/vm_pageout.c#12 (text+ko) ====
@@ -73,7 +73,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/vm/vm_pageout.c 260859 2014-01-18 20:02:59Z alc $");
+__FBSDID("$FreeBSD: head/sys/vm/vm_pageout.c 260975 2014-01-21 03:27:47Z jhb $");
#include "opt_vm.h"
#include <sys/param.h>
@@ -1121,7 +1121,7 @@
} else if ((m->flags & PG_WINATCFLS) == 0 && pass < 2) {
/*
* Dirty pages need to be paged out, but flushing
- * a page is extremely expensive verses freeing
+ * a page is extremely expensive versus freeing
* a clean page. Rather then artificially limiting
* the number of pages we can flush, we instead give
* dirty pages extra priority on the inactive queue
@@ -1183,7 +1183,7 @@
* to be freed and dirty pages to be moved to the end
* of the queue. Since dirty pages are also moved to
* the end of the queue once-cleaned, this gives
- * way too large a weighting to defering the freeing
+ * way too large a weighting to deferring the freeing
* of dirty pages.
*
* We can't wait forever for the vnode lock, we might
==== //depot/projects/pci/sys/x86/include/legacyvar.h#4 (text+ko) ====
@@ -23,7 +23,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD: head/sys/x86/include/legacyvar.h 233707 2012-03-30 19:10:14Z jhb $
+ * $FreeBSD: head/sys/x86/include/legacyvar.h 260973 2014-01-21 03:14:19Z jhb $
*/
#ifndef _X86_LEGACYVAR_H_
@@ -61,6 +61,9 @@
struct resource *r, u_long start, u_long end);
int legacy_pcib_release_resource(device_t dev, device_t child, int type,
int rid, struct resource *r);
+int legacy_pcib_alloc_msi(device_t pcib, device_t dev, int count,
+ int maxcount, int *irqs);
+int legacy_pcib_alloc_msix(device_t pcib, device_t dev, int *irq);
int legacy_pcib_map_msi(device_t pcib, device_t dev, int irq,
uint64_t *addr, uint32_t *data);
==== //depot/projects/pci/sys/x86/pci/pci_bus.c#7 (text+ko) ====
@@ -25,7 +25,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/x86/pci/pci_bus.c 234153 2012-04-11 21:00:33Z jhb $");
+__FBSDID("$FreeBSD: head/sys/x86/pci/pci_bus.c 260973 2014-01-21 03:14:19Z jhb $");
#include "opt_cpu.h"
@@ -92,7 +92,7 @@
/* Pass MSI requests up to the nexus. */
-static int
+int
legacy_pcib_alloc_msi(device_t pcib, device_t dev, int count, int maxcount,
int *irqs)
{
@@ -103,7 +103,7 @@
irqs));
}
-static int
+int
legacy_pcib_alloc_msix(device_t pcib, device_t dev, int *irq)
{
device_t bus;
==== //depot/projects/pci/sys/x86/pci/qpi.c#7 (text+ko) ====
@@ -33,7 +33,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/x86/pci/qpi.c 227843 2011-11-22 21:28:20Z marius $");
+__FBSDID("$FreeBSD: head/sys/x86/pci/qpi.c 260973 2014-01-21 03:14:19Z jhb $");
#include <sys/param.h>
#include <sys/bus.h>
@@ -253,26 +253,6 @@
#endif
static int
-qpi_pcib_alloc_msi(device_t pcib, device_t dev, int count, int maxcount,
- int *irqs)
-{
- device_t bus;
-
- bus = device_get_parent(pcib);
- return (PCIB_ALLOC_MSI(device_get_parent(bus), dev, count, maxcount,
- irqs));
-}
-
-static int
-qpi_pcib_alloc_msix(device_t pcib, device_t dev, int *irq)
-{
- device_t bus;
-
- bus = device_get_parent(pcib);
- return (PCIB_ALLOC_MSIX(device_get_parent(bus), dev, irq));
-}
-
-static int
qpi_pcib_map_msi(device_t pcib, device_t dev, int irq, uint64_t *addr,
uint32_t *data)
{
@@ -309,9 +289,9 @@
DEVMETHOD(pcib_maxslots, pcib_maxslots),
DEVMETHOD(pcib_read_config, legacy_pcib_read_config),
DEVMETHOD(pcib_write_config, legacy_pcib_write_config),
- DEVMETHOD(pcib_alloc_msi, qpi_pcib_alloc_msi),
+ DEVMETHOD(pcib_alloc_msi, legacy_pcib_alloc_msi),
DEVMETHOD(pcib_release_msi, pcib_release_msi),
- DEVMETHOD(pcib_alloc_msix, qpi_pcib_alloc_msix),
+ DEVMETHOD(pcib_alloc_msix, legacy_pcib_alloc_msix),
DEVMETHOD(pcib_release_msix, pcib_release_msix),
DEVMETHOD(pcib_map_msi, qpi_pcib_map_msi),
==== //depot/projects/pci/sys/x86/x86/mptable_pci.c#19 (text+ko) ====
@@ -33,7 +33,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/x86/x86/mptable_pci.c 233707 2012-03-30 19:10:14Z jhb $");
+__FBSDID("$FreeBSD: head/sys/x86/x86/mptable_pci.c 260973 2014-01-21 03:14:19Z jhb $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -76,27 +76,6 @@
return (bus_generic_attach(dev));
}
-/* Pass MSI requests up to the nexus. */
-static int
-mptable_hostb_alloc_msi(device_t pcib, device_t dev, int count, int maxcount,
- int *irqs)
-{
- device_t bus;
-
- bus = device_get_parent(pcib);
- return (PCIB_ALLOC_MSI(device_get_parent(bus), dev, count, maxcount,
- irqs));
-}
-
-static int
-mptable_hostb_alloc_msix(device_t pcib, device_t dev, int *irq)
-{
- device_t bus;
-
- bus = device_get_parent(pcib);
- return (PCIB_ALLOC_MSIX(device_get_parent(bus), dev, irq));
-}
-
#ifdef NEW_PCIB
static int
mptable_is_isa_range(u_long start, u_long end)
@@ -213,9 +192,9 @@
DEVMETHOD(pcib_read_config, legacy_pcib_read_config),
DEVMETHOD(pcib_write_config, legacy_pcib_write_config),
DEVMETHOD(pcib_route_interrupt, mptable_pci_route_interrupt),
- DEVMETHOD(pcib_alloc_msi, mptable_hostb_alloc_msi),
+ DEVMETHOD(pcib_alloc_msi, legacy_pcib_alloc_msi),
DEVMETHOD(pcib_release_msi, pcib_release_msi),
- DEVMETHOD(pcib_alloc_msix, mptable_hostb_alloc_msix),
+ DEVMETHOD(pcib_alloc_msix, legacy_pcib_alloc_msix),
DEVMETHOD(pcib_release_msix, pcib_release_msix),
DEVMETHOD(pcib_map_msi, legacy_pcib_map_msi),
More information about the p4-projects
mailing list