Skip to contentSkip to conversation

PCI/iommu: Fix DMA alias problems

PATCH [email protected] 1 participant 1 message May 16, 2014 1 message not in the archive PCI

lore
Share & tools
lore

A message that is not in the archive (sent off-list or not yet received): [email protected]

#1 lore raw
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
index a13d6825..7788870a 100644
@@ -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.