[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v3] pci: fix pci_requester_id()
From: |
Peter Xu |
Subject: |
Re: [Qemu-devel] [PATCH v3] pci: fix pci_requester_id() |
Date: |
Tue, 17 May 2016 16:00:47 +0800 |
User-agent: |
Mutt/1.5.24 (2015-08-30) |
On Tue, May 17, 2016 at 10:46:12AM +0300, Michael S. Tsirkin wrote:
> On Tue, May 17, 2016 at 02:45:07PM +0800, Peter Xu wrote:
> > This fix SID verification failure when IOMMU IR is enabled with PCI
> > bridges. Existing pci_requester_id() is more like getting BDF info
> > only. Renaming it to pci_get_bdf(). Meanwhile, we provide the correct
> > implementation to get requester ID. VT-d spec 5.1.1 is a good reference
> > to go, though it talks only about interrupt delivery, the rule works
> > exactly the same for non-interrupt cases.
> >
> > Currently, there are three use cases for pci_requester_id():
> >
> > - PCIX status bits: here we need BDF only, not requester ID. Replacing
> > with pci_get_bdf().
> > - PCIe Error injection and MSI delivery: for both these cases, we are
> > looking for requester IDs. Here we should use the new impl.
> >
> > To avoid a PCI walk every time we send MSI message, one requester_id
> > field is added to PCIDevice to cache the result when we use it the first
> > time. Here assumption is made that requester_id will never change
> > during device lifecycle.
>
> That's wrong though. It can change if bus number changes.
>
> That's why I said add a pointer to the actual requester,
> set it up during initialization, not on first use.
Ah... So finally we need one more field for that... Will fix in
v4. Thanks!
-- peterx