Re: [PATCH] powerpc/powernv/pci: Fix build of pci-ioda.o
Hi Oliver, On 7/28/20 7:50 PM, Oliver O'Halloran wrote: On Wed, Jul 29, 2020 at 8:35 AM Gustavo Romero wrote: Currently pnv_ioda_setup_bus_dma() is outside of a CONFIG_IOMMU_API guard and if CONFIG_IOMMU_API=n the build can fail if the compiler sets -Werror=unused-function, because pnv_ioda_setup_bus_dma() is only used in functions guarded by a CONFIG_IOMMU_API guard. That issue can be easily reproduced using the skiroot_defconfig. For other configs, like powernv_defconfig, that issue is hidden by the fact that if CONFIG_IOMMU_SUPPORT is enabled plus other common IOMMU options, like CONFIG_OF_IOMMU, by default CONFIG_IOMMU_API is enabled as well. Hence, for powernv_defconfig, it's necessary to set CONFIG_IOMMU_SUPPORT=n to make the build fail, because CONFIG_PCI=y and pci-ioda.c is included in the build, but since CONFIG_IOMMU_SUPPORT=n the CONFIG_IOMMU_API is disabled, breaking the build. This commit fixes that build issue by moving the pnv_ioda_setup_bus_dma() inside a CONFIG_IOMMU_API guard, so when CONFIG_IOMMU_API is disabled that function is not defined. I think a fix for this is already in -next. Indeed. For the records, it's fixed in -next by: commit e3417faec526cbf97773dca691dcd743f5bfeb64 Author: Oliver O'Halloran Date: Sun Jul 5 23:35:57 2020 +1000 powerpc/powernv: Move pnv_ioda_setup_bus_dma under CONFIG_IOMMU_API pnv_ioda_setup_bus_dma() is only used when a passed through PE is returned to the host. If the kernel is built without IOMMU support this is dead code. Move it under the #ifdef with the rest of the IOMMU API support. Reported-by: kernel test robot Signed-off-by: Oliver O'Halloran Reviewed-by: Alexey Kardashevskiy Signed-off-by: Michael Ellerman Link: https://lore.kernel.org/r/20200705133557.443607-2-ooh...@gmail.com Thanks. Cheers, Gustavo
Re: [PATCH] powerpc/powernv/pci: Fix build of pci-ioda.o
On Wed, Jul 29, 2020 at 8:35 AM Gustavo Romero wrote: > > Currently pnv_ioda_setup_bus_dma() is outside of a CONFIG_IOMMU_API guard > and if CONFIG_IOMMU_API=n the build can fail if the compiler sets > -Werror=unused-function, because pnv_ioda_setup_bus_dma() is only used in > functions guarded by a CONFIG_IOMMU_API guard. > > That issue can be easily reproduced using the skiroot_defconfig. For other > configs, like powernv_defconfig, that issue is hidden by the fact that > if CONFIG_IOMMU_SUPPORT is enabled plus other common IOMMU options, like > CONFIG_OF_IOMMU, by default CONFIG_IOMMU_API is enabled as well. Hence, for > powernv_defconfig, it's necessary to set CONFIG_IOMMU_SUPPORT=n to make the > build fail, because CONFIG_PCI=y and pci-ioda.c is included in the build, > but since CONFIG_IOMMU_SUPPORT=n the CONFIG_IOMMU_API is disabled, breaking > the build. > > This commit fixes that build issue by moving the pnv_ioda_setup_bus_dma() > inside a CONFIG_IOMMU_API guard, so when CONFIG_IOMMU_API is disabled that > function is not defined. I think a fix for this is already in -next.
[PATCH] powerpc/powernv/pci: Fix build of pci-ioda.o
Currently pnv_ioda_setup_bus_dma() is outside of a CONFIG_IOMMU_API guard and if CONFIG_IOMMU_API=n the build can fail if the compiler sets -Werror=unused-function, because pnv_ioda_setup_bus_dma() is only used in functions guarded by a CONFIG_IOMMU_API guard. That issue can be easily reproduced using the skiroot_defconfig. For other configs, like powernv_defconfig, that issue is hidden by the fact that if CONFIG_IOMMU_SUPPORT is enabled plus other common IOMMU options, like CONFIG_OF_IOMMU, by default CONFIG_IOMMU_API is enabled as well. Hence, for powernv_defconfig, it's necessary to set CONFIG_IOMMU_SUPPORT=n to make the build fail, because CONFIG_PCI=y and pci-ioda.c is included in the build, but since CONFIG_IOMMU_SUPPORT=n the CONFIG_IOMMU_API is disabled, breaking the build. This commit fixes that build issue by moving the pnv_ioda_setup_bus_dma() inside a CONFIG_IOMMU_API guard, so when CONFIG_IOMMU_API is disabled that function is not defined. Signed-off-by: Gustavo Romero --- arch/powerpc/platforms/powernv/pci-ioda.c | 26 +++ 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/arch/powerpc/platforms/powernv/pci-ioda.c b/arch/powerpc/platforms/powernv/pci-ioda.c index 73a63efcf855..743d840712da 100644 --- a/arch/powerpc/platforms/powernv/pci-ioda.c +++ b/arch/powerpc/platforms/powernv/pci-ioda.c @@ -1885,19 +1885,6 @@ static bool pnv_pci_ioda_iommu_bypass_supported(struct pci_dev *pdev, return false; } -static void pnv_ioda_setup_bus_dma(struct pnv_ioda_pe *pe, struct pci_bus *bus) -{ - struct pci_dev *dev; - - list_for_each_entry(dev, &bus->devices, bus_list) { - set_iommu_table_base(&dev->dev, pe->table_group.tables[0]); - dev->dev.archdata.dma_offset = pe->tce_bypass_base; - - if ((pe->flags & PNV_IODA_PE_BUS_ALL) && dev->subordinate) - pnv_ioda_setup_bus_dma(pe, dev->subordinate); - } -} - static inline __be64 __iomem *pnv_ioda_get_inval_reg(struct pnv_phb *phb, bool real_mode) { @@ -2501,6 +2488,19 @@ static long pnv_pci_ioda2_unset_window(struct iommu_table_group *table_group, #endif #ifdef CONFIG_IOMMU_API +static void pnv_ioda_setup_bus_dma(struct pnv_ioda_pe *pe, struct pci_bus *bus) +{ + struct pci_dev *dev; + + list_for_each_entry(dev, &bus->devices, bus_list) { + set_iommu_table_base(&dev->dev, pe->table_group.tables[0]); + dev->dev.archdata.dma_offset = pe->tce_bypass_base; + + if ((pe->flags & PNV_IODA_PE_BUS_ALL) && dev->subordinate) + pnv_ioda_setup_bus_dma(pe, dev->subordinate); + } +} + unsigned long pnv_pci_ioda2_get_table_size(__u32 page_shift, __u64 window_size, __u32 levels) { -- 2.17.1