Skip to content

Commit

Permalink
powerpc/powernv: Fix update of NVLink DMA mask
Browse files Browse the repository at this point in the history
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.

Fixes: 5d2aa71 ("powerpc/powernv: Add support for Nvlink NPUs")
Signed-off-by: Alistair Popple <alistair@popple.id.au>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
  • Loading branch information
Alistair Popple authored and Michael Ellerman committed Jan 11, 2016
1 parent b0eab5b commit 419dbd5
Showing 1 changed file with 4 additions and 1 deletion.
5 changes: 4 additions & 1 deletion arch/powerpc/platforms/powernv/pci-ioda.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down

0 comments on commit 419dbd5

Please sign in to comment.