From nobody Mon Feb 9 12:25:56 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1614414998; cv=none; d=zohomail.com; s=zohoarc; b=QL52rMbIIT8h2cvZVZTT7jax4HgqDyA9qevpAx3qyxQg3gh5Cqk4NJYXm5FBcjhLQ0mdU62Ho21Ub0wKF8XWtPrpcwgyg1Gq/7wTrJ/VH/mlmFUGR53cLRX54kZX4FNKxAteH8SmF71xa1AU4PtdN+E9onVDaeUw8PwkCjCKuy0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1614414998; h=Content-Type:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=NQ/yIixLZVbKC4+Wi9PZ2LRq2vSgMrtFwIAgtPaSzdU=; b=lN7QAK7m+CQ+AWAifj0g01MXyCKKvpp8beN+ZdXkXtGMe0K3Tq4MjzsnmCXxT/eT0o1ujmcxxe/y6Rm/907UzMDPXuDRCB4ZxkGXfM5evihuWKxmvoVegTco4ilgwe+eBtseQOvRCj6fHxP3hBzWugBBogGC5pcU8yEdYfPCGmo= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1614414998466959.0385219404158; Sat, 27 Feb 2021 00:36:38 -0800 (PST) Received: from localhost ([::1]:50220 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lFv5Z-0006HR-2W for importer@patchew.org; Sat, 27 Feb 2021 03:36:37 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:35076) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lFv3O-0004Vo-SV; Sat, 27 Feb 2021 03:34:22 -0500 Received: from szxga05-in.huawei.com ([45.249.212.191]:3495) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lFv3J-0007vy-Fm; Sat, 27 Feb 2021 03:34:22 -0500 Received: from DGGEMS410-HUB.china.huawei.com (unknown [172.30.72.58]) by szxga05-in.huawei.com (SkyGuard) with ESMTP id 4DnfsT3tdBzjRyZ; Sat, 27 Feb 2021 16:32:29 +0800 (CST) Received: from huawei.com (10.174.185.226) by DGGEMS410-HUB.china.huawei.com (10.3.19.210) with Microsoft SMTP Server id 14.3.498.0; Sat, 27 Feb 2021 16:34:00 +0800 From: Wang Xingang To: Subject: [RFC RESEND PATCH 3/4] hw/pci: Add pci_root_bus_max_bus Date: Sat, 27 Feb 2021 08:33:50 +0000 Message-ID: <1614414831-39712-4-git-send-email-wangxingang5@huawei.com> X-Mailer: git-send-email 2.6.4.windows.1 In-Reply-To: <1614414831-39712-1-git-send-email-wangxingang5@huawei.com> References: <1614414831-39712-1-git-send-email-wangxingang5@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.174.185.226] X-CFilter-Loop: Reflected Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=45.249.212.191; envelope-from=wangxingang5@huawei.com; helo=szxga05-in.huawei.com X-Spam_score_int: -41 X-Spam_score: -4.2 X-Spam_bar: ---- X-Spam_report: (-4.2 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: xieyingtai@huawei.com, peter.maydell@linaro.org, cenjiahui@huawei.com, wangxingang5@huawei.com, mst@redhat.com, shannon.zhaosl@gmail.com, qemu-arm@nongnu.org, imammedo@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Xingang Wang This helps to find max bus number of a root bus. Signed-off-by: Xingang Wang Signed-off-by: Jiahui Cen --- hw/pci/pci.c | 33 +++++++++++++++++++++++++++++++++ include/hw/pci/pci.h | 1 + 2 files changed, 34 insertions(+) diff --git a/hw/pci/pci.c b/hw/pci/pci.c index dc969989c9..ed92ce0971 100644 --- a/hw/pci/pci.c +++ b/hw/pci/pci.c @@ -516,6 +516,39 @@ int pci_bus_num(PCIBus *s) return PCI_BUS_GET_CLASS(s)->bus_num(s); } =20 +int pci_root_bus_max_bus(PCIBus *bus) +{ + PCIHostState *host; + int max_bus =3D 0; + int type; + int devfn; + + if (!pci_bus_is_root(bus)) { + return 0; + } + + host =3D PCI_HOST_BRIDGE(BUS(bus)->parent); + max_bus =3D pci_bus_num(host->bus); + + for (devfn =3D 0; devfn < ARRAY_SIZE(host->bus->devices); devfn++) { + PCIDevice *dev =3D host->bus->devices[devfn]; + + if (!dev) { + continue; + } + + type =3D dev->config[PCI_HEADER_TYPE] & ~PCI_HEADER_TYPE_MULTI_FUN= CTION; + if (type =3D=3D PCI_HEADER_TYPE_BRIDGE) { + uint8_t subordinate =3D dev->config[PCI_SUBORDINATE_BUS]; + if (subordinate > max_bus) { + max_bus =3D subordinate; + } + } + } + + return max_bus; +} + int pci_bus_numa_node(PCIBus *bus) { return PCI_BUS_GET_CLASS(bus)->numa_node(bus); diff --git a/include/hw/pci/pci.h b/include/hw/pci/pci.h index 1bc231480f..238b91817a 100644 --- a/include/hw/pci/pci.h +++ b/include/hw/pci/pci.h @@ -449,6 +449,7 @@ static inline PCIBus *pci_get_bus(const PCIDevice *dev) return PCI_BUS(qdev_get_parent_bus(DEVICE(dev))); } int pci_bus_num(PCIBus *s); +int pci_root_bus_max_bus(PCIBus *bus); static inline int pci_dev_bus_num(const PCIDevice *dev) { return pci_bus_num(pci_get_bus(dev)); --=20 2.19.1