.. | .. |
---|
15 | 15 | #include "pci.h" |
---|
16 | 16 | |
---|
17 | 17 | DECLARE_RWSEM(pci_bus_sem); |
---|
18 | | -EXPORT_SYMBOL_GPL(pci_bus_sem); |
---|
19 | 18 | |
---|
20 | 19 | /* |
---|
21 | 20 | * pci_for_each_dma_alias - Iterate over DMA aliases for a device |
---|
.. | .. |
---|
33 | 32 | struct pci_bus *bus; |
---|
34 | 33 | int ret; |
---|
35 | 34 | |
---|
36 | | - ret = fn(pdev, PCI_DEVID(pdev->bus->number, pdev->devfn), data); |
---|
| 35 | + /* |
---|
| 36 | + * The device may have an explicit alias requester ID for DMA where the |
---|
| 37 | + * requester is on another PCI bus. |
---|
| 38 | + */ |
---|
| 39 | + pdev = pci_real_dma_dev(pdev); |
---|
| 40 | + |
---|
| 41 | + ret = fn(pdev, pci_dev_id(pdev), data); |
---|
37 | 42 | if (ret) |
---|
38 | 43 | return ret; |
---|
39 | 44 | |
---|
.. | .. |
---|
42 | 47 | * DMA, iterate over that too. |
---|
43 | 48 | */ |
---|
44 | 49 | if (unlikely(pdev->dma_alias_mask)) { |
---|
45 | | - u8 devfn; |
---|
| 50 | + unsigned int devfn; |
---|
46 | 51 | |
---|
47 | | - for_each_set_bit(devfn, pdev->dma_alias_mask, U8_MAX) { |
---|
| 52 | + for_each_set_bit(devfn, pdev->dma_alias_mask, MAX_NR_DEVFNS) { |
---|
48 | 53 | ret = fn(pdev, PCI_DEVID(pdev->bus->number, devfn), |
---|
49 | 54 | data); |
---|
50 | 55 | if (ret) |
---|
.. | .. |
---|
88 | 93 | return ret; |
---|
89 | 94 | continue; |
---|
90 | 95 | case PCI_EXP_TYPE_PCIE_BRIDGE: |
---|
91 | | - ret = fn(tmp, |
---|
92 | | - PCI_DEVID(tmp->bus->number, |
---|
93 | | - tmp->devfn), data); |
---|
| 96 | + ret = fn(tmp, pci_dev_id(tmp), data); |
---|
94 | 97 | if (ret) |
---|
95 | 98 | return ret; |
---|
96 | 99 | continue; |
---|
.. | .. |
---|
101 | 104 | PCI_DEVID(tmp->subordinate->number, |
---|
102 | 105 | PCI_DEVFN(0, 0)), data); |
---|
103 | 106 | else |
---|
104 | | - ret = fn(tmp, |
---|
105 | | - PCI_DEVID(tmp->bus->number, |
---|
106 | | - tmp->devfn), data); |
---|
| 107 | + ret = fn(tmp, pci_dev_id(tmp), data); |
---|
107 | 108 | if (ret) |
---|
108 | 109 | return ret; |
---|
109 | 110 | } |
---|
.. | .. |
---|
111 | 112 | |
---|
112 | 113 | return ret; |
---|
113 | 114 | } |
---|
114 | | -EXPORT_SYMBOL_GPL(pci_for_each_dma_alias); |
---|
115 | 115 | |
---|
116 | 116 | static struct pci_bus *pci_do_find_bus(struct pci_bus *bus, unsigned char busnr) |
---|
117 | 117 | { |
---|
.. | .. |
---|
241 | 241 | } |
---|
242 | 242 | EXPORT_SYMBOL(pci_get_domain_bus_and_slot); |
---|
243 | 243 | |
---|
244 | | -static int match_pci_dev_by_id(struct device *dev, void *data) |
---|
| 244 | +static int match_pci_dev_by_id(struct device *dev, const void *data) |
---|
245 | 245 | { |
---|
246 | 246 | struct pci_dev *pdev = to_pci_dev(dev); |
---|
247 | | - struct pci_device_id *id = data; |
---|
| 247 | + const struct pci_device_id *id = data; |
---|
248 | 248 | |
---|
249 | 249 | if (pci_match_one_device(id, pdev)) |
---|
250 | 250 | return 1; |
---|