From 77765c2a47ce43911b8fe7b09f037c9bc13008ca Mon Sep 17 00:00:00 2001 From: Jeff Kubascik Date: Tue, 30 Jul 2019 08:49:56 -0400 Subject: [PATCH 3/4] Fix PCIe in dom0 for RPi4 There is an issue where the Broadcom PCIe driver and Xen swiotlb layer invoke each other's dma alloc function recursively until the stack blows up. The cause appears to be due to arch_setup_dma_ops being called more than once for the device, possibly through of_dma_configure, and screwing up the dma_ops pointers. This patch adds a check to make sure that the xen_dma_ops are applied only once for a device. --- arch/arm64/mm/dma-mapping.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/arm64/mm/dma-mapping.c b/arch/arm64/mm/dma-mapping.c index d3a5bb16f..243a3b9be 100644 --- a/arch/arm64/mm/dma-mapping.c +++ b/arch/arm64/mm/dma-mapping.c @@ -895,7 +895,7 @@ void arch_setup_dma_ops(struct device *dev, u64 dma_base, u64 size, __iommu_setup_dma_ops(dev, dma_base, size, iommu); #ifdef CONFIG_XEN - if (xen_initial_domain()) { + if (!dev->archdata.dev_dma_ops && xen_initial_domain()) { dev->archdata.dev_dma_ops = dev->dma_ops; dev->dma_ops = xen_dma_ops; } -- 2.17.1