From nobody Wed Nov 5 06:39:57 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1499413626330776.1273777673292; Fri, 7 Jul 2017 00:47:06 -0700 (PDT) Received: from localhost ([::1]:55021 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dTNyj-0002D4-9F for importer@patchew.org; Fri, 07 Jul 2017 03:47:05 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33409) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dTNw1-0000Jk-3C for qemu-devel@nongnu.org; Fri, 07 Jul 2017 03:44:18 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dTNvy-0008Pq-G9 for qemu-devel@nongnu.org; Fri, 07 Jul 2017 03:44:17 -0400 Received: from chuckie.co.uk ([82.165.15.123]:54682 helo=s16892447.onlinehome-server.info) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dTNvy-0008P6-92 for qemu-devel@nongnu.org; Fri, 07 Jul 2017 03:44:14 -0400 Received: from host86-191-132-89.range86-191.btcentralplus.com ([86.191.132.89] helo=kentang.home) by s16892447.onlinehome-server.info with esmtpsa (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.76) (envelope-from ) id 1dTNvw-0006ah-7R; Fri, 07 Jul 2017 08:44:13 +0100 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, mst@redhat.com, armbru@redhat.com, marcel@redhat.com Date: Fri, 7 Jul 2017 08:44:00 +0100 Message-Id: <1499413442-5053-2-git-send-email-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1499413442-5053-1-git-send-email-mark.cave-ayland@ilande.co.uk> References: <1499413442-5053-1-git-send-email-mark.cave-ayland@ilande.co.uk> X-SA-Exim-Connect-IP: 86.191.132.89 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk X-SA-Exim-Version: 4.2.1 (built Sun, 08 Jan 2012 02:45:44 +0000) X-SA-Exim-Scanned: Yes (on s16892447.onlinehome-server.info) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 82.165.15.123 Subject: [Qemu-devel] [PATCH 1/3] pci: move check for existing devfn into new pci_bus_devfn_available() helper X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Also touch up the logic in do_pci_register_device() accordingly. Signed-off-by: Mark Cave-Ayland --- hw/pci/pci.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/hw/pci/pci.c b/hw/pci/pci.c index 0c6f74a..04e6edb 100644 --- a/hw/pci/pci.c +++ b/hw/pci/pci.c @@ -951,6 +951,15 @@ uint16_t pci_requester_id(PCIDevice *dev) return pci_req_id_cache_extract(&dev->requester_id_cache); } =20 +static bool pci_bus_devfn_available(PCIBus *bus, int devfn) +{ + if (bus->devices[devfn]) { + return false; + } else { + return true; + } +} + /* -1 for devfn means auto assign */ static PCIDevice *do_pci_register_device(PCIDevice *pci_dev, PCIBus *bus, const char *name, int devfn, @@ -974,14 +983,15 @@ static PCIDevice *do_pci_register_device(PCIDevice *p= ci_dev, PCIBus *bus, if (devfn < 0) { for(devfn =3D bus->devfn_min ; devfn < ARRAY_SIZE(bus->devices); devfn +=3D PCI_FUNC_MAX) { - if (!bus->devices[devfn]) + if (pci_bus_devfn_available(bus, devfn)) { goto found; + } } error_setg(errp, "PCI: no slot/function available for %s, all in u= se", name); return NULL; found: ; - } else if (bus->devices[devfn]) { + } else if (!pci_bus_devfn_available(bus, devfn)) { error_setg(errp, "PCI: slot %d function %d not available for %s," " in use by %s", PCI_SLOT(devfn), PCI_FUNC(devfn), name, --=20 1.7.10.4 From nobody Wed Nov 5 06:39:57 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1499413542793269.6705665700656; Fri, 7 Jul 2017 00:45:42 -0700 (PDT) Received: from localhost ([::1]:55017 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dTNxN-0001Hw-K3 for importer@patchew.org; Fri, 07 Jul 2017 03:45:41 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33426) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dTNw2-0000KP-4n for qemu-devel@nongnu.org; Fri, 07 Jul 2017 03:44:18 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dTNw1-0008SO-AI for qemu-devel@nongnu.org; Fri, 07 Jul 2017 03:44:18 -0400 Received: from chuckie.co.uk ([82.165.15.123]:54686 helo=s16892447.onlinehome-server.info) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dTNw1-0008QT-3J for qemu-devel@nongnu.org; Fri, 07 Jul 2017 03:44:17 -0400 Received: from host86-191-132-89.range86-191.btcentralplus.com ([86.191.132.89] helo=kentang.home) by s16892447.onlinehome-server.info with esmtpsa (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.76) (envelope-from ) id 1dTNvx-0006ah-B8; Fri, 07 Jul 2017 08:44:14 +0100 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, mst@redhat.com, armbru@redhat.com, marcel@redhat.com Date: Fri, 7 Jul 2017 08:44:01 +0100 Message-Id: <1499413442-5053-3-git-send-email-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1499413442-5053-1-git-send-email-mark.cave-ayland@ilande.co.uk> References: <1499413442-5053-1-git-send-email-mark.cave-ayland@ilande.co.uk> X-SA-Exim-Connect-IP: 86.191.132.89 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk X-SA-Exim-Version: 4.2.1 (built Sun, 08 Jan 2012 02:45:44 +0000) X-SA-Exim-Scanned: Yes (on s16892447.onlinehome-server.info) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 82.165.15.123 Subject: [Qemu-devel] [PATCH 2/3] pci: add dev_reserved_mask property to PCIBus X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" This is just a simple bitmask indicating whether or not each PCI slot on the bus is reserved. Ensure that it is initialised to zero so that all bus slots are available by default. Signed-off-by: Mark Cave-Ayland --- hw/pci/pci.c | 1 + include/hw/pci/pci_bus.h | 1 + 2 files changed, 2 insertions(+) diff --git a/hw/pci/pci.c b/hw/pci/pci.c index 04e6edb..239161e 100644 --- a/hw/pci/pci.c +++ b/hw/pci/pci.c @@ -371,6 +371,7 @@ static void pci_bus_init(PCIBus *bus, DeviceState *pare= nt, { assert(PCI_FUNC(devfn_min) =3D=3D 0); bus->devfn_min =3D devfn_min; + bus->dev_reserved_mask =3D 0x0; bus->address_space_mem =3D address_space_mem; bus->address_space_io =3D address_space_io; =20 diff --git a/include/hw/pci/pci_bus.h b/include/hw/pci/pci_bus.h index 5484a9b..a0cf655 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 dev_reserved_mask; pci_set_irq_fn set_irq; pci_map_irq_fn map_irq; pci_route_irq_fn route_intx_to_irq; --=20 1.7.10.4 From nobody Wed Nov 5 06:39:57 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 149941369663567.00730657921861; Fri, 7 Jul 2017 00:48:16 -0700 (PDT) Received: from localhost ([::1]:55023 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dTNzq-0002jm-H1 for importer@patchew.org; Fri, 07 Jul 2017 03:48:14 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33438) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dTNw3-0000MV-7O for qemu-devel@nongnu.org; Fri, 07 Jul 2017 03:44:20 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dTNw2-0008VV-Du for qemu-devel@nongnu.org; Fri, 07 Jul 2017 03:44:19 -0400 Received: from chuckie.co.uk ([82.165.15.123]:54688 helo=s16892447.onlinehome-server.info) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dTNw2-0008Sm-6d for qemu-devel@nongnu.org; Fri, 07 Jul 2017 03:44:18 -0400 Received: from host86-191-132-89.range86-191.btcentralplus.com ([86.191.132.89] helo=kentang.home) by s16892447.onlinehome-server.info with esmtpsa (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.76) (envelope-from ) id 1dTNvy-0006ah-J0; Fri, 07 Jul 2017 08:44:15 +0100 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, mst@redhat.com, armbru@redhat.com, marcel@redhat.com Date: Fri, 7 Jul 2017 08:44:02 +0100 Message-Id: <1499413442-5053-4-git-send-email-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1499413442-5053-1-git-send-email-mark.cave-ayland@ilande.co.uk> References: <1499413442-5053-1-git-send-email-mark.cave-ayland@ilande.co.uk> X-SA-Exim-Connect-IP: 86.191.132.89 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk X-SA-Exim-Version: 4.2.1 (built Sun, 08 Jan 2012 02:45:44 +0000) X-SA-Exim-Scanned: Yes (on s16892447.onlinehome-server.info) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 82.165.15.123 Subject: [Qemu-devel] [PATCH 3/3] pci: add reserved slot check to do_pci_register_device() X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Mark Cave-Ayland --- hw/pci/pci.c | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/hw/pci/pci.c b/hw/pci/pci.c index 239161e..9dece2a 100644 --- a/hw/pci/pci.c +++ b/hw/pci/pci.c @@ -961,6 +961,15 @@ static bool pci_bus_devfn_available(PCIBus *bus, int d= evfn) } } =20 +static bool pci_bus_devfn_reserved(PCIBus *bus, int devfn) +{ + if (bus->dev_reserved_mask & (1UL << PCI_SLOT(devfn))) { + return true; + } else { + return false; + } +} + /* -1 for devfn means auto assign */ static PCIDevice *do_pci_register_device(PCIDevice *pci_dev, PCIBus *bus, const char *name, int devfn, @@ -984,14 +993,20 @@ static PCIDevice *do_pci_register_device(PCIDevice *p= ci_dev, PCIBus *bus, if (devfn < 0) { for(devfn =3D bus->devfn_min ; devfn < ARRAY_SIZE(bus->devices); devfn +=3D 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 u= se", - name); + error_setg(errp, "PCI: no slot/function available for %s, all in u= se " + "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", --=20 1.7.10.4