Kernel-5.19 patch for nvidia-470.xx
Following patches were created by Joan Bruguera. Thank you Joan.
sources : https://gist.github.com/joanbm
[Step-1] At first, We need nvidia-470xx-fix-linux-5.18.patch
[code] |
From 0ec02378bcc0d35d713fd93ba42c3848bc8b1077 Mon Sep 17 00:00:00 2001 From: Joan Bruguera <joanbrugueram@gmail.com> Date: Sat, 12 Mar 2022 08:37:32 +0100 Subject: [PATCH 1/2] Buildfix NVIDIA 470.103.01 for Linux 5.18-rc1 (part 1) --- common/inc/nv-linux.h | 7 +++++++ nvidia-drm/nvidia-drm-drv.c | 4 ++++ nvidia-drm/nvidia-drm-gem.c | 6 ++++++ 3 files changed, 17 insertions(+) diff --git a/common/inc/nv-linux.h b/common/inc/nv-linux.h index 82e19d6..58e66c7 100644 --- a/common/inc/nv-linux.h +++ b/common/inc/nv-linux.h @@ -11,6 +11,8 @@ #ifndef _NV_LINUX_H_ #define _NV_LINUX_H_ +#warning Do not buy NVIDIA for your next GPU! +#include <linux/version.h> #include "nvstatus.h" #include "nv.h" #include "nv-ioctl-numa.h" @@ -958,7 +960,12 @@ static inline pgprot_t nv_adjust_pgprot(pgprot_t vm_prot, NvU32 extra) * When AMD memory encryption is enabled, device memory mappings with the * C-bit set read as 0xFF, so ensure the bit is cleared for user mappings. */ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 18, 0) && defined(_ASM_X86_PGTABLE_H)) + // Rel. commit "x86/coco: Add API to handle encryption mask" (Kirill A. Shutemov, 22 Feb 2022) + prot = __pgprot(__sme_clr(pgprot_val(prot))); +#else prot = pgprot_decrypted(prot); +#endif #endif return prot; } diff --git a/nvidia-drm/nvidia-drm-drv.c b/nvidia-drm/nvidia-drm-drv.c index d7067a4..f57cbc8 100644 --- a/nvidia-drm/nvidia-drm-drv.c +++ b/nvidia-drm/nvidia-drm-drv.c @@ -20,6 +20,7 @@ * DEALINGS IN THE SOFTWARE. */ +#include <linux/version.h> #include "nvidia-drm-conftest.h" /* NV_DRM_AVAILABLE and NV_DRM_DRM_GEM_H_PRESENT */ #include "nvidia-drm-priv.h" @@ -254,7 +255,10 @@ nv_drm_init_mode_config(struct nv_drm_device *nv_dev, #if defined(NV_DRM_FORMAT_MODIFIERS_PRESENT) /* Allow clients to define framebuffer layouts using DRM format modifiers */ +#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 18, 0)) + // Rel. commit "drm: remove allow_fb_modifiers" (Tomohito Esaki, 28 Jan 2022) dev->mode_config.allow_fb_modifiers = true; +#endif #endif /* Initialize output polling support */ diff --git a/nvidia-drm/nvidia-drm-gem.c b/nvidia-drm/nvidia-drm-gem.c index 82de645..8cd3f76 100644 --- a/nvidia-drm/nvidia-drm-gem.c +++ b/nvidia-drm/nvidia-drm-gem.c @@ -49,6 +49,12 @@ #include "nv-mm.h" +#include <linux/version.h> +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 18, 0)) +// Rel. commit "dma-buf-map: Rename to iosys-map" (Lucas De Marchi, 4 Feb 2022) +#define dma_buf_map iosys_map +#endif + void nv_drm_gem_free(struct drm_gem_object *gem) { struct nv_drm_gem_object *nv_gem = to_nv_gem_object(gem); -- 2.35.1 From 6b934e829fb942d1735e2371320ddbec089c6900 Mon Sep 17 00:00:00 2001 From: Joan Bruguera <joanbrugueram@gmail.com> Date: Mon, 4 Apr 2022 19:59:51 +0200 Subject: [PATCH 2/2] Buildfix NVIDIA 470.103.01 for Linux 5.18-rc1 (part 2) See also: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=d56baf6efaf14e2910610216c581ca71d6940012 https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=7968778914e53788a01c2dee2692cab157de9ac0 --- nvidia-uvm/uvm_gpu.c | 8 ++++---- nvidia/linux_nvswitch.c | 18 +++++++++--------- nvidia/nv.c | 18 +++++++++--------- 3 files changed, 22 insertions(+), 22 deletions(-) diff --git a/nvidia-uvm/uvm_gpu.c b/nvidia-uvm/uvm_gpu.c index f58c00b..c9607a8 100644 --- a/nvidia-uvm/uvm_gpu.c +++ b/nvidia-uvm/uvm_gpu.c @@ -3059,16 +3059,16 @@ out: NV_STATUS uvm_gpu_map_cpu_pages(uvm_gpu_t *gpu, struct page *page, size_t size, NvU64 *dma_addr_out) { - NvU64 dma_addr = pci_map_page(gpu->parent->pci_dev, page, 0, size, PCI_DMA_BIDIRECTIONAL); + NvU64 dma_addr = dma_map_page(&gpu->parent->pci_dev->dev, page, 0, size, DMA_BIDIRECTIONAL); UVM_ASSERT(PAGE_ALIGNED(size)); - if (pci_dma_mapping_error(gpu->parent->pci_dev, dma_addr)) + if (dma_mapping_error(&gpu->parent->pci_dev->dev, dma_addr)) return NV_ERR_OPERATING_SYSTEM; if (dma_addr < gpu->parent->dma_addressable_start || dma_addr + size - 1 > gpu->parent->dma_addressable_limit) { - pci_unmap_page(gpu->parent->pci_dev, dma_addr, size, PCI_DMA_BIDIRECTIONAL); + dma_unmap_page(&gpu->parent->pci_dev->dev, dma_addr, size, DMA_BIDIRECTIONAL); UVM_ERR_PRINT_RL("PCI mapped range [0x%llx, 0x%llx) not in the addressable range [0x%llx, 0x%llx), GPU %s\n", dma_addr, dma_addr + (NvU64)size, @@ -3102,7 +3102,7 @@ void uvm_gpu_unmap_cpu_pages(uvm_gpu_t *gpu, NvU64 dma_address, size_t size) if (gpu->parent->npu) dma_address = nv_expand_nvlink_addr(dma_address); dma_address += gpu->parent->dma_addressable_start; - pci_unmap_page(gpu->parent->pci_dev, dma_address, size, PCI_DMA_BIDIRECTIONAL); + dma_unmap_page(&gpu->parent->pci_dev->dev, dma_address, size, DMA_BIDIRECTIONAL); atomic64_sub(size, &gpu->parent->mapped_cpu_pages_size); } diff --git a/nvidia/linux_nvswitch.c b/nvidia/linux_nvswitch.c index ddfc53c..714b9eb 100644 --- a/nvidia/linux_nvswitch.c +++ b/nvidia/linux_nvswitch.c @@ -2139,11 +2139,11 @@ _nvswitch_to_pci_dma_direction ) { if (direction == NVSWITCH_DMA_DIR_TO_SYSMEM) - return PCI_DMA_FROMDEVICE; + return DMA_FROM_DEVICE; else if (direction == NVSWITCH_DMA_DIR_FROM_SYSMEM) - return PCI_DMA_TODEVICE; + return DMA_TO_DEVICE; else - return PCI_DMA_BIDIRECTIONAL; + return DMA_BIDIRECTIONAL; } NvlStatus @@ -2164,9 +2164,9 @@ nvswitch_os_map_dma_region dma_dir = _nvswitch_to_pci_dma_direction(direction); - *dma_handle = (NvU64)pci_map_single(pdev, cpu_addr, size, dma_dir); + *dma_handle = (NvU64) dma_map_single(&pdev->dev, cpu_addr, size, dma_dir); - if (pci_dma_mapping_error(pdev, *dma_handle)) + if (dma_mapping_error(&pdev->dev, *dma_handle)) { pr_err("nvidia-nvswitch: unable to create PCI DMA mapping\n"); return -NVL_ERR_GENERIC; @@ -2193,7 +2193,7 @@ nvswitch_os_unmap_dma_region dma_dir = _nvswitch_to_pci_dma_direction(direction); - pci_unmap_single(pdev, dma_handle, size, dma_dir); + dma_unmap_single(&pdev->dev, dma_handle, size, dma_dir); return NVL_SUCCESS; } @@ -2210,7 +2210,7 @@ nvswitch_os_set_dma_mask if (!pdev) return -NVL_BAD_ARGS; - if (pci_set_dma_mask(pdev, DMA_BIT_MASK(dma_addr_width))) + if (dma_set_mask(&pdev->dev, DMA_BIT_MASK(dma_addr_width))) return -NVL_ERR_GENERIC; return NVL_SUCCESS; @@ -2233,7 +2233,7 @@ nvswitch_os_sync_dma_region_for_cpu dma_dir = _nvswitch_to_pci_dma_direction(direction); - pci_dma_sync_single_for_cpu(pdev, dma_handle, size, dma_dir); + dma_sync_single_for_cpu(&pdev->dev, dma_handle, size, dma_dir); return NVL_SUCCESS; } @@ -2255,7 +2255,7 @@ nvswitch_os_sync_dma_region_for_device dma_dir = _nvswitch_to_pci_dma_direction(direction); - pci_dma_sync_single_for_device(pdev, dma_handle, size, dma_dir); + dma_sync_single_for_device(&pdev->dev, dma_handle, size, dma_dir); return NVL_SUCCESS; } diff --git a/nvidia/nv.c b/nvidia/nv.c index 92a7dc6..5065158 100644 --- a/nvidia/nv.c +++ b/nvidia/nv.c @@ -2821,13 +2821,13 @@ nv_set_dma_address_size( */ if (!nvl->tce_bypass_enabled) { - pci_set_dma_mask(nvl->pci_dev, new_mask); + dma_set_mask(&nvl->pci_dev->dev, new_mask); /* Certain kernels have a bug which causes pci_set_consistent_dma_mask * to call GPL sme_active symbol, this bug has already been fixed in a * minor release update but detect the failure scenario here to prevent * an installation regression */ #if !NV_IS_EXPORT_SYMBOL_GPL_sme_active - pci_set_consistent_dma_mask(nvl->pci_dev, new_mask); + dma_set_coherent_mask(&nvl->pci_dev->dev, new_mask); #endif } } @@ -4524,19 +4524,19 @@ NvU64 NV_API_CALL nv_get_dma_start_address( * as the starting address for all DMA mappings. */ saved_dma_mask = pci_dev->dma_mask; - if (pci_set_dma_mask(pci_dev, DMA_BIT_MASK(64)) != 0) + if (dma_set_mask(&pci_dev->dev, DMA_BIT_MASK(64)) != 0) { goto done; } - dma_addr = pci_map_single(pci_dev, NULL, 1, DMA_BIDIRECTIONAL); - if (pci_dma_mapping_error(pci_dev, dma_addr)) + dma_addr = dma_map_single(&pci_dev->dev, NULL, 1, DMA_BIDIRECTIONAL); + if (dma_mapping_error(&pci_dev->dev, dma_addr)) { - pci_set_dma_mask(pci_dev, saved_dma_mask); + dma_set_mask(&pci_dev->dev, saved_dma_mask); goto done; } - pci_unmap_single(pci_dev, dma_addr, 1, DMA_BIDIRECTIONAL); + dma_unmap_single(&pci_dev->dev, dma_addr, 1, DMA_BIDIRECTIONAL); /* * From IBM: "For IODA2, native DMA bypass or KVM TCE-based implementation @@ -4568,7 +4568,7 @@ NvU64 NV_API_CALL nv_get_dma_start_address( */ nv_printf(NV_DBG_WARNINGS, "NVRM: DMA window limited by platform\n"); - pci_set_dma_mask(pci_dev, saved_dma_mask); + dma_set_mask(&pci_dev->dev, saved_dma_mask); goto done; } else if ((dma_addr & saved_dma_mask) != 0) @@ -4587,7 +4587,7 @@ NvU64 NV_API_CALL nv_get_dma_start_address( */ nv_printf(NV_DBG_WARNINGS, "NVRM: DMA window limited by memory size\n"); - pci_set_dma_mask(pci_dev, saved_dma_mask); + dma_set_mask(&pci_dev->dev, saved_dma_mask); goto done; } } -- 2.35.1 From 689ede6109d1b8aef914809f290e75632c338b9f Mon Sep 17 00:00:00 2001 From: Joan Bruguera <joanbrugueram@gmail.com> Date: Sat, 9 Apr 2022 19:42:24 +0200 Subject: [PATCH] Buildfix NVIDIA 470.103.01 for Linux 5.18-rc2 acpi_bus_get_device was removed and its trivial replacement acpi_fetch_acpi_dev is GPL-exported, so just disable ACPI support as I don't want to deal with it. --- nvidia/nv-acpi.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/nvidia/nv-acpi.c b/nvidia/nv-acpi.c index faf8b44..22a9152 100644 --- a/nvidia/nv-acpi.c +++ b/nvidia/nv-acpi.c @@ -16,7 +16,8 @@ #include <linux/acpi.h> -#if defined(NV_LINUX_ACPI_EVENTS_SUPPORTED) +#include <linux/version.h> +#if defined(NV_LINUX_ACPI_EVENTS_SUPPORTED) && (LINUX_VERSION_CODE < KERNEL_VERSION(5, 18, 0)) static NV_STATUS nv_acpi_extract_integer (const union acpi_object *, void *, NvU32, NvU32 *); static NV_STATUS nv_acpi_extract_buffer (const union acpi_object *, void *, NvU32, NvU32 *); static NV_STATUS nv_acpi_extract_package (const union acpi_object *, void *, NvU32, NvU32 *); -- 2.35.1 |
[Step-2] nvidia-470xx-fix-linux-5.19.patch
---
[code]
|
From cc4acfadcd71ee07c8d1b29411620a79451780b9 Mon Sep 17 00:00:00 2001 From: Joan Bruguera <joanbrugueram@gmail.com> Date: Wed, 13 Apr 2022 21:21:13 +0200 Subject: [PATCH] Buildfix NVIDIA 470.129.06 for Linux 5.19-rc1 --- nvidia-drm/nvidia-dma-resv-helper.h | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/nvidia-drm/nvidia-dma-resv-helper.h b/nvidia-drm/nvidia-dma-resv-helper.h index ad8800d..65ea1f8 100644 --- a/nvidia-drm/nvidia-dma-resv-helper.h +++ b/nvidia-drm/nvidia-dma-resv-helper.h @@ -39,6 +39,15 @@ #include <linux/reservation.h> #endif +#include <linux/version.h> +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 19, 0)) +// Rel. commit "dma-buf: specify usage while adding fences to dma_resv obj v7" (Christian König, 9 Nov 2021) +static inline void dma_resv_add_excl_fence(struct dma_resv *obj, struct dma_fence *fence) +{ + dma_resv_add_fence(obj, fence, DMA_RESV_USAGE_WRITE); +} +#endif + #include <nvidia-dma-fence-helper.h> #if defined(NV_LINUX_DMA_RESV_H_PRESENT) |
---
[2022-08-02] 新規
[ ]
![deepl-clip.sh で簡単翻訳 [更新:2025-04-29]](https://resize.blogsys.jp/fc265bdb808435596af7a249f59820084c144620/crop1/120x120_ffffff/https://livedoor.blogimg.jp/jw_slackware/imgs/0/d/0d2fff59-s.png)






