Reviewed-by: Ray Ni <[email protected]> > -----Original Message----- > From: [email protected] <[email protected]> On Behalf Of Foster Nong > Sent: Wednesday, October 12, 2022 10:37 AM > To: [email protected] > Cc: Nong, Foster <[email protected]> > Subject: [edk2-devel] [PATCH v2 1/2] MdeModulePkg: Fixed extra 1 SR-IOV > reserved bus > > Below code will calculate the reserved bus number for the each PF. > > Based on the VF routing ID algorithm, PFRid and LastVF in below code > already sure that "All VFs and PFs must have distinct Routing IDs". > PF will be assigned Routing ID based on secBusNumber, ReservedBusNum > will add into SubBusNumber directly. So the SR-IOV device will be > assigned bus range as SecBusNumber ~ (SubBusNumber=(SecBusNumber + > ReservedBusNum)). > Thus "+1" in below code will cause extra 1 bus, and introduce a bus hole. > > PFRid = EFI_PCI_RID (Bus, Device, Func); > LastVF = PFRid + FirstVFOffset + (PciIoDevice->InitialVFs - 1) * VFStride; > PciIoDevice->ReservedBusNum = (UINT16)(EFI_PCI_BUS_OF_RID (LastVF) - > Bus + 1); > > In SR-IOV spec, there is a note in section 2.1.2: > Note: Bus Numbers are a constrained resource. Devices are strongly > encouraged to avoid leaving “holes” in their Bus Number usage to avoid > wasting Bus Numbers > > So the issue can be fixed with below code change. > PciIoDevice->ReservedBusNum = (UINT16)(EFI_PCI_BUS_OF_RID (LastVF) - > Bus); > > https://bugzilla.tianocore.org/show_bug.cgi?id=4069 > > Signed-off-by: Foster Nong <[email protected]> > --- > MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.c > b/MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.c > index eb250f6f7b..bc20da1f38 100644 > --- a/MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.c > +++ b/MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.c > @@ -2425,7 +2425,7 @@ CreatePciIoDevice ( > // > > // Calculate ReservedBusNum for this PF > > // > > - PciIoDevice->ReservedBusNum = (UINT16)(EFI_PCI_BUS_OF_RID (LastVF) - > Bus + 1); > > + PciIoDevice->ReservedBusNum = (UINT16)(EFI_PCI_BUS_OF_RID (LastVF) - > Bus); > > } > > > > DEBUG (( > > -- > 2.37.1.windows.1 > > > > >
-=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#95171): https://edk2.groups.io/g/devel/message/95171 Mute This Topic: https://groups.io/mt/94282084/21656 Group Owner: [email protected] Unsubscribe: https://edk2.groups.io/g/devel/unsub [[email protected]] -=-=-=-=-=-=-=-=-=-=-=-
