Message ID | 1621914605-14724-6-git-send-email-wangxingang5@huawei.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | IOMMU: Add support for IOMMU Bypass Feature | expand |
Hi Xingang, On 5/25/21 5:50 AM, Wang Xingang wrote: > From: Xingang Wang <wangxingang5@huawei.com> > > This helps to get the bus number range of a pci bridge hierarchy. > > Signed-off-by: Xingang Wang <wangxingang5@huawei.com> > --- > hw/pci/pci.c | 15 +++++++++++++++ > include/hw/pci/pci.h | 1 + > 2 files changed, 16 insertions(+) > > diff --git a/hw/pci/pci.c b/hw/pci/pci.c > index 27d588e268..7f18ea5ef5 100644 > --- a/hw/pci/pci.c > +++ b/hw/pci/pci.c > @@ -537,6 +537,21 @@ int pci_bus_num(PCIBus *s) > return PCI_BUS_GET_CLASS(s)->bus_num(s); > } > Add a doc comment such as "returns the min and max bus numbers of a root bus"? Besides Reviewed-by: Eric Auger <eric.auger@redhat.com> Thanks Eric > +void pci_bus_range(PCIBus *bus, int *min_bus, int *max_bus) > +{ > + int i; > + *min_bus = *max_bus = pci_bus_num(bus); > + > + for (i = 0; i < ARRAY_SIZE(bus->devices); ++i) { > + PCIDevice *dev = bus->devices[i]; > + > + if (dev && PCI_DEVICE_GET_CLASS(dev)->is_bridge) { > + *min_bus = MIN(*min_bus, dev->config[PCI_SECONDARY_BUS]); > + *max_bus = MAX(*max_bus, dev->config[PCI_SUBORDINATE_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 f4d51b672b..d0f4266e37 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); > +void pci_bus_range(PCIBus *bus, int *min_bus, int *max_bus); > static inline int pci_dev_bus_num(const PCIDevice *dev) > { > return pci_bus_num(pci_get_bus(dev));
Hi Eric, On 2021/6/2 21:03, Eric Auger wrote: > Hi Xingang, > > On 5/25/21 5:50 AM, Wang Xingang wrote: >> From: Xingang Wang <wangxingang5@huawei.com> >> >> This helps to get the bus number range of a pci bridge hierarchy. >> >> Signed-off-by: Xingang Wang <wangxingang5@huawei.com> >> --- >> hw/pci/pci.c | 15 +++++++++++++++ >> include/hw/pci/pci.h | 1 + >> 2 files changed, 16 insertions(+) >> >> diff --git a/hw/pci/pci.c b/hw/pci/pci.c >> index 27d588e268..7f18ea5ef5 100644 >> --- a/hw/pci/pci.c >> +++ b/hw/pci/pci.c >> @@ -537,6 +537,21 @@ int pci_bus_num(PCIBus *s) >> return PCI_BUS_GET_CLASS(s)->bus_num(s); >> } >> > Add a doc comment such as "returns the min and max bus numbers of a root > bus"? > > Besides > Reviewed-by: Eric Auger <eric.auger@redhat.com> > > Thanks > > Eric > Thanks, I will add some annotation here. Xingang >> +void pci_bus_range(PCIBus *bus, int *min_bus, int *max_bus) >> +{ >> + int i; >> + *min_bus = *max_bus = pci_bus_num(bus); >> + >> + for (i = 0; i < ARRAY_SIZE(bus->devices); ++i) { >> + PCIDevice *dev = bus->devices[i]; >> + >> + if (dev && PCI_DEVICE_GET_CLASS(dev)->is_bridge) { >> + *min_bus = MIN(*min_bus, dev->config[PCI_SECONDARY_BUS]); >> + *max_bus = MAX(*max_bus, dev->config[PCI_SUBORDINATE_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 f4d51b672b..d0f4266e37 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); >> +void pci_bus_range(PCIBus *bus, int *min_bus, int *max_bus); >> static inline int pci_dev_bus_num(const PCIDevice *dev) >> { >> return pci_bus_num(pci_get_bus(dev)); > > . > .
diff --git a/hw/pci/pci.c b/hw/pci/pci.c index 27d588e268..7f18ea5ef5 100644 --- a/hw/pci/pci.c +++ b/hw/pci/pci.c @@ -537,6 +537,21 @@ int pci_bus_num(PCIBus *s) return PCI_BUS_GET_CLASS(s)->bus_num(s); } +void pci_bus_range(PCIBus *bus, int *min_bus, int *max_bus) +{ + int i; + *min_bus = *max_bus = pci_bus_num(bus); + + for (i = 0; i < ARRAY_SIZE(bus->devices); ++i) { + PCIDevice *dev = bus->devices[i]; + + if (dev && PCI_DEVICE_GET_CLASS(dev)->is_bridge) { + *min_bus = MIN(*min_bus, dev->config[PCI_SECONDARY_BUS]); + *max_bus = MAX(*max_bus, dev->config[PCI_SUBORDINATE_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 f4d51b672b..d0f4266e37 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); +void pci_bus_range(PCIBus *bus, int *min_bus, int *max_bus); static inline int pci_dev_bus_num(const PCIDevice *dev) { return pci_bus_num(pci_get_bus(dev));