On Tue, 5 Feb 2019 13:40:36 -0700 Logan Gunthorpe <logang@xxxxxxxxxxxx> wrote: > On 2019-02-05 12:19 p.m., Jacob Pan wrote: > > On Fri, 1 Feb 2019 10:27:29 -0700 > > Logan Gunthorpe <logang@xxxxxxxxxxxx> wrote: > > > >> On 2019-02-01 9:44 a.m., Joerg Roedel wrote: > >>> On Thu, Jan 31, 2019 at 11:56:48AM -0700, Logan Gunthorpe > >>> wrote: > >>>> @@ -394,6 +402,10 @@ static int set_msi_sid(struct irte *irte, > >>>> struct pci_dev *dev) set_irte_sid(irte, SVT_VERIFY_BUS, > >>>> SQ_ALL_16, PCI_DEVID(PCI_BUS_NUM(data.alias), > >>>> dev->bus->number)); > > I guess devfn can be removed also. but that is separate cleanup. > > Actually, no, I've dug into this and we *do* need the devfn here but > it's needlessly confusing. We should not be using PCI_DEVID() as we > aren't actually representing a DEVID in this case... > > According to the Intel VT-D spec, when using SVT_VERIFY_BUS, the MSB > of the SID field represents the starting bus number and the LSB > represents the end bus number. The requester id's bus number must > then be within that range. The PCI_DEVID macro matches these > semantics if you assume the devfn is the end bus, but doesn't really > make sense here and just confuses the issue. > > So the code was correct, I'll just try to clean it up to make it less > confusing. > you are right, thanks for explaining. > Thanks, > > Logan