[PATCH] platforms/powernv: Fix update of NVLink DMA mask
Alistair Popple
alistair at popple.id.au
Fri Jan 8 11:35:09 AEDT 2016
The emulated NVLink PCI devices share the same IODA2 TCE tables but
only support a single TVT (instead of the normal two for PCI
devices). This requires the kernel to manually replace windows with
either the bypass or non-bypass window depending on what the driver
has requested.
Unfortunately an incorrect optimisation was made in
pnv_pci_ioda_dma_set_mask() which caused updating of some NPU device
PEs to be skipped in certain configurations due to an incorrect
assumption that a NULL peer PE in the array indicated there were no
more peers present. This patch fixes the problem by ensuring all peer
PEs are updated.
Signed-off-by: Alistair Popple <alistair at popple.id.au>
---
arch/powerpc/platforms/powernv/pci-ioda.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/arch/powerpc/platforms/powernv/pci-ioda.c b/arch/powerpc/platforms/powernv/pci-ioda.c
index 323e1e5..458133f 100644
--- a/arch/powerpc/platforms/powernv/pci-ioda.c
+++ b/arch/powerpc/platforms/powernv/pci-ioda.c
@@ -1612,7 +1612,10 @@ static int pnv_pci_ioda_dma_set_mask(struct pci_dev *pdev, u64 dma_mask)
/* Update peer npu devices */
if (pe->flags & PNV_IODA_PE_PEER)
- for (i = 0; pe->peers[i]; i++) {
+ for (i = 0; i < PNV_IODA_MAX_PEER_PES; i++) {
+ if (!pe->peers[i])
+ continue;
+
linked_npu_dev = pe->peers[i]->pdev;
if (dma_get_mask(&linked_npu_dev->dev) != dma_mask)
dma_set_mask(&linked_npu_dev->dev, dma_mask);
--
2.1.4
More information about the Linuxppc-dev
mailing list