PCI/iommu: Fix DMA alias problems
A message that is not in the archive (sent off-list or not yet received): [email protected]
Quoted 5 lines · Alex Williamson
Wow, I didn't think that kind of broken was possible. Maybe instead of a bitmap of function aliases we could have a single devfn alias for a device. That means we'd only be able to support a single alias for a device, but since I don't think we've seen devices that use more than a single alias, maybe that's ok.
In my (never finished) patch set for the same problem, the first thing I did was
include/linux/pci.h +2 -1
@@ -251,12 +251,13 @@ struct pci_dev {struct proc_dir_entry *procent;/* device entry in /proc/bus/pci */ struct pci_slot *slot;/* Physical slot this device is in */ -unsigned int devfn;/* encoded device & function index */ unsigned short vendor;unsigned short device;unsigned short subsystem_vendor;unsigned short subsystem_device;unsigned int class;/* 3 bytes: (base,sub,prog-if) */ +u8 devfn;/* encoded device & function index */ +u8 devfn_quirk;/* zero is non-quirky */ u8 revision;/* PCI revision, low byte of class word */ u8 hdr_type;/* PCI header type (`multi' flag masked out) */ u8 pcie_cap;/* PCIe capability offset */
I encoded "devfn_quirk" as a delta to devfn, so that zero would mean "no quirk", and no existing intialization would need changing.