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