Message ID | 1452213309-27592-1-git-send-email-alistair@popple.id.au (mailing list archive) |
---|---|
State | Accepted |
Headers | show |
On Fri, 2016-08-01 at 00:35:09 UTC, Alistair Popple wrote: > 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@popple.id.au> Applied to powerpc next, thanks. https://git.kernel.org/powerpc/c/419dbd5e1ff0e45a6e1d28c1f7 cheers
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);
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@popple.id.au> --- arch/powerpc/platforms/powernv/pci-ioda.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)