Re: [PATCH 1/9] iommu/vt-d: Allow interrupts from the entire bus for aliased devices

From: Jacob Pan
Date: Tue Feb 05 2019 - 18:57:03 EST


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