From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.2 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 667BBC433ED for ; Tue, 13 Apr 2021 11:37:09 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id CEFF461029 for ; Tue, 13 Apr 2021 11:37:08 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org CEFF461029 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=huawei.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:49110 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lWHLv-0004nw-Me for qemu-devel@archiver.kernel.org; Tue, 13 Apr 2021 07:37:07 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36644) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lWHKC-0003gd-4c; Tue, 13 Apr 2021 07:35:21 -0400 Received: from szxga05-in.huawei.com ([45.249.212.191]:4456) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lWHK6-0003cQ-BU; Tue, 13 Apr 2021 07:35:19 -0400 Received: from DGGEMS410-HUB.china.huawei.com (unknown [172.30.72.60]) by szxga05-in.huawei.com (SkyGuard) with ESMTP id 4FKNk66F2hzNvP5; Tue, 13 Apr 2021 19:32:14 +0800 (CST) Received: from [10.174.185.226] (10.174.185.226) by DGGEMS410-HUB.china.huawei.com (10.3.19.210) with Microsoft SMTP Server id 14.3.498.0; Tue, 13 Apr 2021 19:35:01 +0800 To: Auger Eric , , , , , , , , , , References: <1616656965-23328-1-git-send-email-wangxingang5@huawei.com> <1616656965-23328-4-git-send-email-wangxingang5@huawei.com> From: Xingang Wang Subject: Re: [PATCH RFC RESEND v2 3/6] hw/pci: Add pci_root_bus_max_bus Message-ID: Date: Tue, 13 Apr 2021 19:35:01 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.5.1 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset="utf-8"; format=flowed Content-Language: en-US Content-Transfer-Encoding: 8bit X-Originating-IP: [10.174.185.226] X-CFilter-Loop: Reflected 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, NICE_REPLY_A=-0.001, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=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, cenjiahui@huawei.com Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" Hi Eric, On 2021/4/13 16:05, Auger Eric wrote: > Hi Xingang, > > On 3/25/21 8:22 AM, Wang Xingang wrote: >> From: Xingang Wang >> >> This helps to find max bus number of a root bus. > s/max bus number of a root bus/highest bus number of a bridge hierarchy? Thanks, I will change the description. >> >> Signed-off-by: Xingang Wang >> Signed-off-by: Jiahui Cen >> --- >> hw/pci/pci.c | 34 ++++++++++++++++++++++++++++++++++ >> include/hw/pci/pci.h | 1 + >> 2 files changed, 35 insertions(+) >> >> diff --git a/hw/pci/pci.c b/hw/pci/pci.c >> index e17aa9075f..c7957cbf7c 100644 >> --- a/hw/pci/pci.c >> +++ b/hw/pci/pci.c >> @@ -538,6 +538,40 @@ int pci_bus_num(PCIBus *s) >> return PCI_BUS_GET_CLASS(s)->bus_num(s); >> } >> >> +int pci_root_bus_max_bus(PCIBus *bus) >> +{ >> + PCIHostState *host; >> + PCIDevice *dev; >> + int max_bus = 0; >> + int type, devfn; >> + uint8_t subordinate; >> + >> + if (!pci_bus_is_root(bus)) { >> + return 0; >> + } >> + >> + host = PCI_HOST_BRIDGE(BUS(bus)->parent); >> + max_bus = pci_bus_num(host->bus); >> + >> + for (devfn = 0; devfn < ARRAY_SIZE(host->bus->devices); devfn++) { >> + dev = host->bus->devices[devfn]; >> + >> + if (!dev) { >> + continue; >> + } >> + >> + type = dev->config[PCI_HEADER_TYPE] & ~PCI_HEADER_TYPE_MULTI_FUNCTION; > Seems there is PCI_DEVICE_GET_CLASS(dev)->is_bridge (see > pci_root_bus_in_range). Can't that be used instead? Thanks, I will simplify this. >> + if (type == PCI_HEADER_TYPE_BRIDGE) { >> + subordinate = dev->config[PCI_SUBORDINATE_BUS]; >> + if (subordinate > max_bus) { >> + max_bus = subordinate; > what about the secondary bus number, it is always less than the others? > Thanks, the secondary bus number should be taken into account. Maybe a pci_root_bus_range to get [min_bus, max_bus] would be better. > Thanks > > Eric >> + } >> + } >> + } >> + >> + 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 718b5a454a..e0c69534f4 100644 >> --- a/include/hw/pci/pci.h >> +++ b/include/hw/pci/pci.h >> @@ -450,6 +450,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)); >> > > . > Xingang .