diff -Nru nvidia-graphics-drivers-390-390.138/debian/changelog nvidia-graphics-drivers-390-390.138/debian/changelog --- nvidia-graphics-drivers-390-390.138/debian/changelog 2020-07-13 16:03:46.000000000 +0000 +++ nvidia-graphics-drivers-390-390.138/debian/changelog 2020-12-14 17:18:10.000000000 +0000 @@ -1,3 +1,10 @@ +nvidia-graphics-drivers-390 (390.138-0ubuntu3) hirsute; urgency=medium + + * debian/dkms_nvidia/patches/buildfix_kernel_5.10.patch (LP: #1908099): + - Add support for Linux 5.10 (fix build errors). + + -- Andrea Righi Mon, 14 Dec 2020 17:18:10 +0000 + nvidia-graphics-drivers-390 (390.138-0ubuntu2) groovy; urgency=medium * debian/dkms_nvidia/patches/buildfix_kernel_5.8.patch, diff -Nru nvidia-graphics-drivers-390-390.138/debian/dkms_nvidia/patches/buildfix_kernel_5.10.patch nvidia-graphics-drivers-390-390.138/debian/dkms_nvidia/patches/buildfix_kernel_5.10.patch --- nvidia-graphics-drivers-390-390.138/debian/dkms_nvidia/patches/buildfix_kernel_5.10.patch 1970-01-01 00:00:00.000000000 +0000 +++ nvidia-graphics-drivers-390-390.138/debian/dkms_nvidia/patches/buildfix_kernel_5.10.patch 2020-12-14 17:16:30.000000000 +0000 @@ -0,0 +1,275 @@ +diff -urpN --exclude 'conftest*.c' --exclude make.log --exclude tags a/common/inc/nv-linux.h b/common/inc/nv-linux.h +--- a/common/inc/nv-linux.h 2020-12-04 08:10:57.609500186 +0000 ++++ b/common/inc/nv-linux.h 2020-12-04 07:35:22.403047561 +0000 +@@ -161,8 +161,10 @@ static inline uid_t __kuid_val(kuid_t ui + + #if defined(NVCPU_X86_64) && !defined(HAVE_COMPAT_IOCTL) + #include /* sys_ioctl() */ ++#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 10, 0)) + #include /* register_ioctl32_conversion() */ + #endif ++#endif + + #if !defined(NV_FILE_OPERATIONS_HAS_IOCTL) && \ + !defined(NV_FILE_OPERATIONS_HAS_UNLOCKED_IOCTL) +@@ -175,7 +177,11 @@ static inline uid_t __kuid_val(kuid_t ui + + #if defined(NV_VM_INSERT_PAGE_PRESENT) + #include ++#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 10, 0)) + #include ++#else ++#include ++#endif + #endif + + #if defined(CONFIG_SWIOTLB) && defined(NVCPU_AARCH64) +diff -urpN --exclude 'conftest*.c' --exclude make.log --exclude tags a/common/inc/nv-mm.h b/common/inc/nv-mm.h +--- a/common/inc/nv-mm.h 2020-12-04 08:10:57.609500186 +0000 ++++ b/common/inc/nv-mm.h 2020-12-04 07:24:12.985966395 +0000 +@@ -25,6 +25,9 @@ + + #include "conftest.h" + ++#include ++#include ++ + #if !defined(NV_VM_FAULT_T_IS_PRESENT) + typedef int vm_fault_t; + #endif +@@ -143,7 +146,11 @@ typedef int vm_fault_t; + if (force) + flags |= FOLL_FORCE; + +- #if defined(NV_GET_USER_PAGES_REMOTE_HAS_LOCKED_ARG) ++ #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 10, 0)) ++ return get_user_pages_remote(mm, start, nr_pages, flags, ++ pages, vmas, NULL); ++ ++ #elif defined(NV_GET_USER_PAGES_REMOTE_HAS_LOCKED_ARG) + + return get_user_pages_remote(tsk, mm, start, nr_pages, flags, + pages, vmas, NULL); +diff -urpN --exclude 'conftest*.c' --exclude make.log --exclude tags a/conftest.sh b/conftest.sh +--- a/conftest.sh 2020-12-04 08:10:57.613500188 +0000 ++++ b/conftest.sh 2020-12-04 08:09:07.837458030 +0000 +@@ -2045,7 +2045,12 @@ compile_test() { + # Determine if the phys_to_dma function is present. + # + CODE=" ++ #include ++ #include + #include ++ #if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 10, 0) ++ #include ++ #endif + void conftest_phys_to_dma(void) { + phys_to_dma(); + }" +@@ -2058,7 +2063,12 @@ compile_test() { + # Determine if the 'dma_ops' structure is present. + # + CODE=" ++ #include ++ #include + #include ++ #if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 10, 0) ++ #include ++ #endif + void conftest_dma_ops(void) { + (void)dma_ops; + }" +@@ -2072,7 +2082,12 @@ compile_test() { + # It does not exist on all architectures. + # + CODE=" ++ #include ++ #include + #include ++ #if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 10, 0) ++ #include ++ #endif + void conftest_dma_ops(void) { + (void)swiotlb_dma_ops; + }" +@@ -2085,7 +2100,12 @@ compile_test() { + # Determine if the 'struct dma_map_ops' type is present. + # + CODE=" ++ #include ++ #include + #include ++ #if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 10, 0) ++ #include ++ #endif + void conftest_dma_map_ops(void) { + struct dma_map_ops ops; + }" +@@ -2098,7 +2118,12 @@ compile_test() { + # Determine if the get_dma_ops() function is present. + # + CODE=" ++ #include ++ #include + #include ++ #if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 10, 0) ++ #include ++ #endif + void conftest_get_dma_ops(void) { + get_dma_ops(); + }" +@@ -2111,7 +2136,12 @@ compile_test() { + # Determine if the 'noncoherent_swiotlb_dma_ops' symbol is present. + # + CODE=" ++ #include ++ #include + #include ++ #if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 10, 0) ++ #include ++ #endif + void conftest_noncoherent_swiotlb_dma_ops(void) { + (void)noncoherent_swiotlb_dma_ops; + }" +@@ -2127,7 +2157,12 @@ compile_test() { + # 2016-08-10 6f3d87968f9c8b529bc81eff5a1f45e92553493d + # + CODE=" ++ #include ++ #include + #include ++ #if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 10, 0) ++ #include ++ #endif + void conftest_dma_map_resource(void) { + dma_map_resource(); + }" +@@ -3878,7 +3913,12 @@ compile_test() { + # means that dma_direct can perform DMA mappings itself. + # + CODE=" ++ #include ++ #include + #include ++ #if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 10, 0) ++ #include ++ #endif + void conftest_dma_is_direct(void) { + dma_is_direct(); + }" +diff -urpN --exclude 'conftest*.c' --exclude make.log --exclude tags a/nvidia/nv.c b/nvidia/nv.c +--- a/nvidia/nv.c 2020-12-04 08:10:57.405500112 +0000 ++++ b/nvidia/nv.c 2020-12-04 07:43:10.051470482 +0000 +@@ -36,6 +36,9 @@ + #include "nv-retpoline.h" + #endif + ++#include ++#include ++ + /* + * The module information macros for Linux single-module builds + * are present in nv-frontend.c. +@@ -3871,7 +3874,8 @@ nvidia_probe + pci_set_master(dev); + + #if defined(CONFIG_VGA_ARB) && !defined(NVCPU_PPC64LE) +-#if defined(VGA_DEFAULT_DEVICE) ++#if defined(VGA_DEFAULT_DEVICE) && \ ++ (LINUX_VERSION_CODE < KERNEL_VERSION(5, 10, 0)) + vga_tryget(VGA_DEFAULT_DEVICE, VGA_RSRC_LEGACY_MASK); + #endif + vga_set_legacy_decoding(dev, VGA_RSRC_NONE); +diff -urpN --exclude 'conftest*.c' --exclude make.log --exclude tags a/nvidia-drm/nvidia-drm-drv.c b/nvidia-drm/nvidia-drm-drv.c +--- a/nvidia-drm/nvidia-drm-drv.c 2020-12-04 08:10:57.409500113 +0000 ++++ b/nvidia-drm/nvidia-drm-drv.c 2020-12-04 07:51:28.444643552 +0000 +@@ -35,6 +35,9 @@ + #include "nvidia-drm-gem-nvkms-memory.h" + #include "nvidia-drm-gem-user-memory.h" + ++#include ++#include ++ + #if defined(NV_DRM_AVAILABLE) + + #include "nvidia-drm-ioctl.h" +@@ -677,7 +680,9 @@ static struct drm_driver nv_drm_driver = + #endif + DRIVER_GEM | DRIVER_RENDER, + ++#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 10, 0) + .gem_free_object = nv_drm_gem_free, ++#endif + + .ioctls = nv_drm_ioctls, + .num_ioctls = ARRAY_SIZE(nv_drm_ioctls), +diff -urpN --exclude 'conftest*.c' --exclude make.log --exclude tags a/nvidia-drm/nvidia-drm-gem-user-memory.c b/nvidia-drm/nvidia-drm-gem-user-memory.c +--- a/nvidia-drm/nvidia-drm-gem-user-memory.c 2020-12-04 08:10:57.413500114 +0000 ++++ b/nvidia-drm/nvidia-drm-gem-user-memory.c 2020-12-04 07:58:31.653105211 +0000 +@@ -31,6 +31,9 @@ + #include "nvidia-drm-gem-user-memory.h" + #include "nvidia-drm-ioctl.h" + ++#include ++#include ++ + static inline + void __nv_drm_gem_user_memory_free(struct nv_drm_gem_object *nv_gem) + { +@@ -47,8 +50,13 @@ static struct sg_table *__nv_drm_gem_use + { + struct nv_drm_gem_user_memory *nv_user_memory = to_nv_user_memory(nv_gem); + ++#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 10, 0) + return drm_prime_pages_to_sg(nv_user_memory->pages, + nv_user_memory->pages_count); ++#else ++ return drm_prime_pages_to_sg(nv_gem->nv_dev->dev, nv_user_memory->pages, ++ nv_user_memory->pages_count); ++#endif + } + + static void *__nv_drm_gem_user_memory_prime_vmap( +diff -urpN --exclude 'conftest*.c' --exclude make.log --exclude tags a/nvidia-drm/nvidia-drm-gem.h b/nvidia-drm/nvidia-drm-gem.h +--- a/nvidia-drm/nvidia-drm-gem.h 2020-12-04 08:10:57.413500114 +0000 ++++ b/nvidia-drm/nvidia-drm-gem.h 2020-12-04 07:54:07.804852950 +0000 +@@ -44,6 +44,9 @@ + #include "nvidia-dma-resv-helper.h" + #endif + ++#include ++#include ++ + struct nv_drm_gem_object; + + struct nv_drm_gem_object_funcs { +@@ -87,8 +90,12 @@ static inline void + nv_drm_gem_object_unreference_unlocked(struct nv_drm_gem_object *nv_gem) + { + #if defined(NV_DRM_GEM_OBJECT_GET_PRESENT) ++#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 10, 0) + drm_gem_object_put_unlocked(&nv_gem->base); + #else ++ drm_gem_object_put(&nv_gem->base); ++#endif ++#else + drm_gem_object_unreference_unlocked(&nv_gem->base); + #endif + } +diff -urpN --exclude 'conftest*.c' --exclude make.log --exclude tags a/nvidia-uvm/uvm8_va_range.h b/nvidia-uvm/uvm8_va_range.h +--- a/nvidia-uvm/uvm8_va_range.h 2020-12-04 08:10:57.445500126 +0000 ++++ b/nvidia-uvm/uvm8_va_range.h 2020-12-04 07:46:02.679996442 +0000 +@@ -42,6 +42,13 @@ + #include "uvm8_tracker.h" + #include "uvm_ioctl.h" + ++#include ++#include ++ ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 10, 0) ++#define smp_read_barrier_depends smp_rmb ++#endif ++ + // VA Ranges are the UVM driver equivalent of Linux kernel vmas. They represent + // user allocations of any page-aligned size. We maintain these as a separate + // data structure from the vma tree for several reasons: diff -Nru nvidia-graphics-drivers-390-390.138/debian/dkms_nvidia.conf nvidia-graphics-drivers-390-390.138/debian/dkms_nvidia.conf --- nvidia-graphics-drivers-390-390.138/debian/dkms_nvidia.conf 2020-07-13 16:03:46.000000000 +0000 +++ nvidia-graphics-drivers-390-390.138/debian/dkms_nvidia.conf 2020-12-14 17:18:10.000000000 +0000 @@ -14,5 +14,6 @@ AUTOINSTALL="yes" PATCH[0]="disable_fstack-clash-protection_fcf-protection.patch" PATCH[1]="buildfix_kernel_5.8.patch" +PATCH[2]="buildfix_kernel_5.10.patch" #PATCH[1]="do-not-call-pci_save_state.patch" #PATCH_MATCH[0]="^4.[6-7]" diff -Nru nvidia-graphics-drivers-390-390.138/debian/templates/dkms_nvidia.conf.in nvidia-graphics-drivers-390-390.138/debian/templates/dkms_nvidia.conf.in --- nvidia-graphics-drivers-390-390.138/debian/templates/dkms_nvidia.conf.in 2020-07-13 16:03:07.000000000 +0000 +++ nvidia-graphics-drivers-390-390.138/debian/templates/dkms_nvidia.conf.in 2020-12-14 17:17:58.000000000 +0000 @@ -14,5 +14,6 @@ AUTOINSTALL="yes" PATCH[0]="disable_fstack-clash-protection_fcf-protection.patch" PATCH[1]="buildfix_kernel_5.8.patch" +PATCH[2]="buildfix_kernel_5.10.patch" #PATCH[1]="do-not-call-pci_save_state.patch" #PATCH_MATCH[0]="^4.[6-7]"