From 9c1ff707530f373981a58d93e51496becf57e774 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jan=20R=C4=99korajski?= Date: Thu, 7 Sep 2023 15:02:57 +0200 Subject: [PATCH] - fix build on ix86 --- ...-get_user_pages-vmas-argument-remova.patch | 42 ------------------- ...er_pages-vmas-argument-removal-x8664.patch | 42 +++++++++++++++++++ xorg-driver-video-nvidia-legacy-390xx.spec | 4 ++ 3 files changed, 46 insertions(+), 42 deletions(-) create mode 100644 kernel-6.5-handle-get_user_pages-vmas-argument-removal-x8664.patch diff --git a/kernel-6.5-handle-get_user_pages-vmas-argument-remova.patch b/kernel-6.5-handle-get_user_pages-vmas-argument-remova.patch index 9e997d8..4da3e0b 100644 --- a/kernel-6.5-handle-get_user_pages-vmas-argument-remova.patch +++ b/kernel-6.5-handle-get_user_pages-vmas-argument-remova.patch @@ -153,48 +153,6 @@ index be405f29..dd4a2a6d 100644 nv_mmap_read_unlock(mm); if (pages_pinned < 0 || (unsigned)pages_pinned < pages_count) { -diff --git a/kernel/nvidia-uvm/uvm8_tools.c b/kernel/nvidia-uvm/uvm8_tools.c -index 1dc7c97d..ea521945 100644 ---- a/kernel/nvidia-uvm/uvm8_tools.c -+++ b/kernel/nvidia-uvm/uvm8_tools.c -@@ -251,13 +251,37 @@ static NV_STATUS map_user_pages(NvU64 user_va, NvU64 size, void **addr, struct p - } - - nv_mmap_read_lock(current->mm); -+#if defined(NV_GET_USER_PAGES_DROPPED_VMA) -+ ret = NV_GET_USER_PAGES(user_va, num_pages, 1, 0, *pages); -+#else - ret = NV_GET_USER_PAGES(user_va, num_pages, 1, 0, *pages, vmas); -+#endif - nv_mmap_read_unlock(current->mm); - if (ret != num_pages) { - status = NV_ERR_INVALID_ARGUMENT; - goto fail; - } - -+#if defined(NV_GET_USER_PAGES_DROPPED_VMA) -+ struct vm_area_struct *vma; -+ unsigned long start; -+ -+ nv_mmap_read_lock(current->mm); -+ start = user_va; -+ for (i = 0; i < num_pages; i++) { -+ vma = find_vma(current->mm, start); -+ if (!vma) { -+ nv_mmap_read_unlock(current->mm); -+ status = NV_ERR_INVALID_ARGUMENT; -+ goto fail; -+ } -+ -+ vmas[i] = vma; -+ start = (start + PAGE_SIZE) & PAGE_MASK; -+ } -+ nv_mmap_read_unlock(current->mm); -+#endif -+ - for (i = 0; i < num_pages; i++) { - if (page_count((*pages)[i]) > MAX_PAGE_COUNT || uvm_file_is_nvidia_uvm(vmas[i]->vm_file)) { - status = NV_ERR_INVALID_ARGUMENT; diff --git a/kernel/nvidia/os-mlock.c b/kernel/nvidia/os-mlock.c index f88daed4..ad5cb9a1 100644 --- a/kernel/nvidia/os-mlock.c diff --git a/kernel-6.5-handle-get_user_pages-vmas-argument-removal-x8664.patch b/kernel-6.5-handle-get_user_pages-vmas-argument-removal-x8664.patch new file mode 100644 index 0000000..d54b24c --- /dev/null +++ b/kernel-6.5-handle-get_user_pages-vmas-argument-removal-x8664.patch @@ -0,0 +1,42 @@ +diff --git a/kernel/nvidia-uvm/uvm8_tools.c b/kernel/nvidia-uvm/uvm8_tools.c +index 1dc7c97d..ea521945 100644 +--- a/kernel/nvidia-uvm/uvm8_tools.c ++++ b/kernel/nvidia-uvm/uvm8_tools.c +@@ -251,13 +251,37 @@ static NV_STATUS map_user_pages(NvU64 user_va, NvU64 size, void **addr, struct p + } + + nv_mmap_read_lock(current->mm); ++#if defined(NV_GET_USER_PAGES_DROPPED_VMA) ++ ret = NV_GET_USER_PAGES(user_va, num_pages, 1, 0, *pages); ++#else + ret = NV_GET_USER_PAGES(user_va, num_pages, 1, 0, *pages, vmas); ++#endif + nv_mmap_read_unlock(current->mm); + if (ret != num_pages) { + status = NV_ERR_INVALID_ARGUMENT; + goto fail; + } + ++#if defined(NV_GET_USER_PAGES_DROPPED_VMA) ++ struct vm_area_struct *vma; ++ unsigned long start; ++ ++ nv_mmap_read_lock(current->mm); ++ start = user_va; ++ for (i = 0; i < num_pages; i++) { ++ vma = find_vma(current->mm, start); ++ if (!vma) { ++ nv_mmap_read_unlock(current->mm); ++ status = NV_ERR_INVALID_ARGUMENT; ++ goto fail; ++ } ++ ++ vmas[i] = vma; ++ start = (start + PAGE_SIZE) & PAGE_MASK; ++ } ++ nv_mmap_read_unlock(current->mm); ++#endif ++ + for (i = 0; i < num_pages; i++) { + if (page_count((*pages)[i]) > MAX_PAGE_COUNT || uvm_file_is_nvidia_uvm(vmas[i]->vm_file)) { + status = NV_ERR_INVALID_ARGUMENT; diff --git a/xorg-driver-video-nvidia-legacy-390xx.spec b/xorg-driver-video-nvidia-legacy-390xx.spec index 44e506b..eb00f7b 100644 --- a/xorg-driver-video-nvidia-legacy-390xx.spec +++ b/xorg-driver-video-nvidia-legacy-390xx.spec @@ -57,6 +57,7 @@ Patch4: kernel-6.3-uvm.patch Patch5: kernel-6.4.patch Patch6: kernel-6.5-garbage-collect-all-references-to-get_user.patch Patch7: kernel-6.5-handle-get_user_pages-vmas-argument-remova.patch +Patch8: kernel-6.5-handle-get_user_pages-vmas-argument-removal-x8664.patch URL: https://www.nvidia.com/en-us/drivers/unix/ BuildRequires: rpm-build >= 4.6 BuildRequires: rpmbuild(macros) >= 1.752 @@ -325,6 +326,9 @@ rm -rf NVIDIA-Linux-x86*-%{version}* %patch5 -p1 %patch6 -p1 %patch7 -p1 +%ifarch %{x8664} +%patch8 -p1 +%endif echo 'EXTRA_CFLAGS += -Wno-pointer-arith -Wno-sign-compare -Wno-unused' >> kernel/Makefile.kbuild %build -- 2.44.0