From 222eebeb3116c772a43cea6116fd35d1b2d2fd33 Mon Sep 17 00:00:00 2001 From: Brad Griffis Date: Mon, 29 Apr 2024 23:51:45 +0000 Subject: [PATCH] drivers: misc: Fix the argument of iommu_map() for Linux v6.3 There is additional argument added in iommu_map() from Linux v6.3. Pass the proper argument from the driver who are using this APIs. Using conftest methods for differentiating whether additional argument is needed or not. Bug 4374520 Change-Id: I3d6452cf6c71f495e3b6e3b240b2c2d839aa4b0d Signed-off-by: Brad Griffis Reviewed-on: https://git-master.nvidia.com/r/c/linux-nv-oot/+/3128547 Reviewed-by: Jon Hunter GVS: Gerrit_Virtual_Submit --- drivers/misc/nvscic2c-pcie/pci-client.c | 16 +++++++++++++-- .../endpoint/functions/pci-epf-tegra-vnet.c | 20 +++++++++++++++++++ 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/drivers/misc/nvscic2c-pcie/pci-client.c b/drivers/misc/nvscic2c-pcie/pci-client.c index 2eb0ad51..15cfe6d8 100644 --- a/drivers/misc/nvscic2c-pcie/pci-client.c +++ b/drivers/misc/nvscic2c-pcie/pci-client.c @@ -3,6 +3,8 @@ #define pr_fmt(fmt) "nvscic2c-pcie: pci-client: " fmt +#include + #include #include #include @@ -246,7 +248,12 @@ allocate_edma_rx_desc_iova(struct pci_client_t *ctx) goto err; } prot = (IOMMU_CACHE | IOMMU_READ | IOMMU_WRITE); - ret = iommu_map(ctx->domain, ctx->edma_ch_desc_iova, phys_addr, EDMA_CH_DESC_SZ, prot); + ret = iommu_map(ctx->domain, ctx->edma_ch_desc_iova, phys_addr, +#if defined(NV_IOMMU_MAP_HAS_GFP_ARG) + EDMA_CH_DESC_SZ, prot, GFP_KERNEL); +#else + EDMA_CH_DESC_SZ, prot); +#endif if (ret) { pr_err("pci client failed to map iova to 60K physical backing\n"); goto err; @@ -408,7 +415,12 @@ pci_client_map_addr(void *pci_client_h, u64 to_iova, phys_addr_t paddr, if (WARN_ON(!ctx || !to_iova || !paddr || !size)) return -EINVAL; - return iommu_map(ctx->domain, to_iova, paddr, size, prot); + return iommu_map(ctx->domain, to_iova, paddr, size, +#if defined(NV_IOMMU_MAP_HAS_GFP_ARG) + prot, GFP_KERNEL); +#else + prot); +#endif } size_t diff --git a/drivers/pci/endpoint/functions/pci-epf-tegra-vnet.c b/drivers/pci/endpoint/functions/pci-epf-tegra-vnet.c index 5d4d50be..61cd8c11 100644 --- a/drivers/pci/endpoint/functions/pci-epf-tegra-vnet.c +++ b/drivers/pci/endpoint/functions/pci-epf-tegra-vnet.c @@ -321,7 +321,11 @@ static void tvnet_ep_alloc_empty_buffers(struct pci_epf_tvnet *tvnet) } ret = iommu_map(domain, iova, page_to_phys(page), PAGE_SIZE, +#if defined(NV_IOMMU_MAP_HAS_GFP_ARG) + IOMMU_CACHE | IOMMU_READ | IOMMU_WRITE, GFP_KERNEL); +#else IOMMU_CACHE | IOMMU_READ | IOMMU_WRITE); +#endif if (ret < 0) { dev_err(tvnet->fdev, "%s: iommu_map(RAM) failed: %d\n", __func__, ret); @@ -1237,7 +1241,11 @@ static int tvnet_ep_pci_epf_setup_irqsp(struct pci_epf_tvnet *tvnet) syncpt_addr = nvhost_interrupt_syncpt_get_syncpt_addr(ctrl_irqsp->is); #endif ret = iommu_map(domain, amap->iova, syncpt_addr, PAGE_SIZE, +#if defined(NV_IOMMU_MAP_HAS_GFP_ARG) + IOMMU_CACHE | IOMMU_READ | IOMMU_WRITE, GFP_KERNEL); +#else IOMMU_CACHE | IOMMU_READ | IOMMU_WRITE); +#endif if (ret < 0) { dev_err(fdev, "%s: iommu_map of ctrlsp mem failed: %d\n", __func__, ret); @@ -1256,7 +1264,11 @@ static int tvnet_ep_pci_epf_setup_irqsp(struct pci_epf_tvnet *tvnet) syncpt_addr = nvhost_interrupt_syncpt_get_syncpt_addr(data_irqsp->is); #endif ret = iommu_map(domain, amap->iova + PAGE_SIZE, syncpt_addr, PAGE_SIZE, +#if defined(NV_IOMMU_MAP_HAS_GFP_ARG) + IOMMU_CACHE | IOMMU_READ | IOMMU_WRITE, GFP_KERNEL); +#else IOMMU_CACHE | IOMMU_READ | IOMMU_WRITE); +#endif if (ret < 0) { dev_err(fdev, "%s: iommu_map of datasp mem failed: %d\n", __func__, ret); @@ -1323,7 +1335,11 @@ static int tvnet_ep_alloc_single_page_bar0_mem(struct pci_epf *epf, } ret = iommu_map(domain, amap->iova, page_to_phys(amap->page), PAGE_SIZE, +#if defined(NV_IOMMU_MAP_HAS_GFP_ARG) + IOMMU_CACHE | IOMMU_READ | IOMMU_WRITE, GFP_KERNEL); +#else IOMMU_CACHE | IOMMU_READ | IOMMU_WRITE); +#endif if (ret < 0) { dev_err(tvnet->fdev, "%s: type: %d iommu_map(RAM) failed: %d\n", __func__, type, ret); @@ -1404,7 +1420,11 @@ static int tvnet_ep_alloc_multi_page_bar0_mem(struct pci_epf *epf, } ret = iommu_map(domain, amap->iova, page_to_phys(amap->page), +#if defined(NV_IOMMU_MAP_HAS_GFP_ARG) + amap->size, IOMMU_CACHE | IOMMU_READ | IOMMU_WRITE, GFP_KERNEL); +#else amap->size, IOMMU_CACHE | IOMMU_READ | IOMMU_WRITE); +#endif if (ret < 0) { dev_err(tvnet->fdev, "%s: iommu_map(RAM) failed: %d\n", __func__, ret);