Christoph Hellwig <h...@lst.de> writes: > On Wed, Jan 30, 2019 at 11:58:40PM +1100, Michael Ellerman wrote: >> Alexander Fomichev <fomichev...@gmail.com> writes: >> >> > get_dma_ops() falls into arch-dependant get_arch_dma_ops(), which >> > historically returns NULL on PowerPC. Therefore dma_set_mask() fails. >> > This affects Switchtec (and probably other) NTB devices, that they fail >> > to initialize. >> >> What's an NTB device? >> >> drivers/ntb I assume? >> >> So it's a PCI device of some sort, but presumably the device you're >> calling dma_set_mask() on is an NTB device not a PCI device? >> >> But then it works if you tell it to use the PCI DMA ops? >> >> At the very least the code should be checking for the NTB bus type and >> only returning the PCI ops in that specific case, not for all devices. > > Can you provide the context? E.g. the patch and the rest of the commit > log. This all looks rather odd to me.
Sorry, here it is. Or on lore: https://lore.kernel.org/linuxppc-dev/20190128133203.mon4a3nkrzijn43g@alfbook-pro.local/ Subject: [RFC PATCH] powerpc: fix get_arch_dma_ops() for NTB devices get_dma_ops() falls into arch-dependant get_arch_dma_ops(), which historically returns NULL on PowerPC. Therefore dma_set_mask() fails. This affects Switchtec (and probably other) NTB devices, that they fail to initialize. The proposed patch should fix the issue. --- arch/powerpc/include/asm/dma-mapping.h | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/arch/powerpc/include/asm/dma-mapping.h b/arch/powerpc/include/asm/dma-mapping.h index ebf6680..cb6ac96 100644 --- a/arch/powerpc/include/asm/dma-mapping.h +++ b/arch/powerpc/include/asm/dma-mapping.h @@ -70,14 +70,11 @@ extern struct dma_map_ops dma_iommu_ops; #endif extern const struct dma_map_ops dma_nommu_ops; +extern const struct dma_map_ops *get_pci_dma_ops(void); + static inline const struct dma_map_ops *get_arch_dma_ops(struct bus_type *bus) { - /* We don't handle the NULL dev case for ISA for now. We could - * do it via an out of line call but it is not needed for now. The - * only ISA DMA device we support is the floppy and we have a hack - * in the floppy driver directly to get a device for us. - */ - return NULL; + return get_pci_dma_ops(); } /*