[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 16/17] pci: add reserved slot check to do_pci_registe
From: |
Michael S. Tsirkin |
Subject: |
[Qemu-devel] [PULL 16/17] pci: add reserved slot check to do_pci_register_device() |
Date: |
Fri, 8 Sep 2017 17:19:40 +0300 |
From: Mark Cave-Ayland <address@hidden>
Add a new slot_reserved_mask bitmask to PCIBus indicating whether or not each
PCI slot on the bus is reserved. Ensure that it is initialised to zero to
maintain the existing behaviour that all slots are available by default, and
add the additional check with appropriate error reporting to
do_pci_register_device().
Signed-off-by: Mark Cave-Ayland <address@hidden>
Reviewed-by: Marcel Apfelbaum <address@hidden>
Reviewed-by: Michael S. Tsirkin <address@hidden>
Signed-off-by: Michael S. Tsirkin <address@hidden>
---
include/hw/pci/pci_bus.h | 1 +
hw/pci/pci.c | 18 +++++++++++++++---
2 files changed, 16 insertions(+), 3 deletions(-)
diff --git a/include/hw/pci/pci_bus.h b/include/hw/pci/pci_bus.h
index 5484a9b..bc34fd0 100644
--- a/include/hw/pci/pci_bus.h
+++ b/include/hw/pci/pci_bus.h
@@ -23,6 +23,7 @@ struct PCIBus {
PCIIOMMUFunc iommu_fn;
void *iommu_opaque;
uint8_t devfn_min;
+ uint32_t slot_reserved_mask;
pci_set_irq_fn set_irq;
pci_map_irq_fn map_irq;
pci_route_irq_fn route_intx_to_irq;
diff --git a/hw/pci/pci.c b/hw/pci/pci.c
index 002e669..21e203b 100644
--- a/hw/pci/pci.c
+++ b/hw/pci/pci.c
@@ -373,6 +373,7 @@ static void pci_bus_init(PCIBus *bus, DeviceState *parent,
{
assert(PCI_FUNC(devfn_min) == 0);
bus->devfn_min = devfn_min;
+ bus->slot_reserved_mask = 0x0;
bus->address_space_mem = address_space_mem;
bus->address_space_io = address_space_io;
@@ -958,6 +959,11 @@ static bool pci_bus_devfn_available(PCIBus *bus, int devfn)
return !(bus->devices[devfn]);
}
+static bool pci_bus_devfn_reserved(PCIBus *bus, int devfn)
+{
+ return bus->slot_reserved_mask & (1UL << PCI_SLOT(devfn));
+}
+
/* -1 for devfn means auto assign */
static PCIDevice *do_pci_register_device(PCIDevice *pci_dev, PCIBus *bus,
const char *name, int devfn,
@@ -981,14 +987,20 @@ static PCIDevice *do_pci_register_device(PCIDevice
*pci_dev, PCIBus *bus,
if (devfn < 0) {
for(devfn = bus->devfn_min ; devfn < ARRAY_SIZE(bus->devices);
devfn += PCI_FUNC_MAX) {
- if (pci_bus_devfn_available(bus, devfn)) {
+ if (pci_bus_devfn_available(bus, devfn) &&
+ !pci_bus_devfn_reserved(bus, devfn)) {
goto found;
}
}
- error_setg(errp, "PCI: no slot/function available for %s, all in use",
- name);
+ error_setg(errp, "PCI: no slot/function available for %s, all in use "
+ "or reserved", name);
return NULL;
found: ;
+ } else if (pci_bus_devfn_reserved(bus, devfn)) {
+ error_setg(errp, "PCI: slot %d function %d not available for %s,"
+ " reserved",
+ PCI_SLOT(devfn), PCI_FUNC(devfn), name);
+ return NULL;
} else if (!pci_bus_devfn_available(bus, devfn)) {
error_setg(errp, "PCI: slot %d function %d not available for %s,"
" in use by %s",
--
MST
- [Qemu-devel] [PULL 02/17] pc: add 2.11 machine types, (continued)
- [Qemu-devel] [PULL 02/17] pc: add 2.11 machine types, Michael S. Tsirkin, 2017/09/08
- [Qemu-devel] [PULL 08/17] hw/pci: add QEMU-specific PCI capability to the Generic PCI Express Root Port, Michael S. Tsirkin, 2017/09/08
- [Qemu-devel] [PULL 07/17] hw/pci: introduce bridge-only vendor-specific capability to provide some hints to firmware, Michael S. Tsirkin, 2017/09/08
- [Qemu-devel] [PULL 09/17] docs: update documentation considering PCIE-PCI bridge, Michael S. Tsirkin, 2017/09/08
- [Qemu-devel] [PULL 11/17] acpi/vmgenid: change device category to misc, Michael S. Tsirkin, 2017/09/08
- [Qemu-devel] [PULL 12/17] libvhost-user: support resuming vq->last_avail_idx based on used_idx, Michael S. Tsirkin, 2017/09/08
- [Qemu-devel] [PULL 10/17] intel_iommu: fix missing BQL in pt fast path, Michael S. Tsirkin, 2017/09/08
- [Qemu-devel] [PULL 13/17] vhost-user-bridge: fix resume regression (since 2.9), Michael S. Tsirkin, 2017/09/08
- [Qemu-devel] [PULL 14/17] vmgenid: replace x-write-pointer-available hack, Michael S. Tsirkin, 2017/09/08
- [Qemu-devel] [PULL 15/17] pci: move check for existing devfn into new pci_bus_devfn_available() helper, Michael S. Tsirkin, 2017/09/08
- [Qemu-devel] [PULL 16/17] pci: add reserved slot check to do_pci_register_device(),
Michael S. Tsirkin <=
- [Qemu-devel] [PULL 17/17] fw_cfg: rename read callback, Michael S. Tsirkin, 2017/09/08
- [Qemu-devel] [PULL 01/17] vhost: Release memory references on cleanup, Michael S. Tsirkin, 2017/09/08
- Re: [Qemu-devel] [PULL 00/17] pc, pci, virtio: patches queued before 2.10, Peter Maydell, 2017/09/08