Bug#1078120: bullseye-pu: package nvidia-graphics-drivers-tesla-418/418.226.00-6~deb11u2
Package: release.debian.org
Severity: normal
Tags: bullseye
User: release.debian.org@packages.debian.org
Usertags: pu
[ Reason ]
Two commits from Linux 6.8 got backported to Linux 6.1, but only one
of them got backported to Linux 5.10, causing the use of GPL-only
symbols (on ppc64el only) from 5.10.210 onwards.
We already had fixed this in the previous point release in
nvidia-graphics-drivers 470.256.02-2 and
nvidia-graphics-drivers-tesla-470 470.256.02-1~deb11u2
but the Tesla 418/450/460 packages are affected as well.
[ Impact ]
dkms module failing to build on ppc64el
[ Tests ]
Manual module build test in bullseye ppc64el chroot.
The package has autopkgtest-pkg-dkms, but that is not run by
dkms/bullseye.
[ Risks ]
Low. The changes have already been tested in the 470 driver series.
[ Checklist ]
[*] *all* changes are documented in the d/changelog
[*] I reviewed all changes and I approve them
[*] attach debdiff against the package in (old)stable
[*] the issue is verified as fixed in unstable
[ Changes ]
+nvidia-graphics-drivers-tesla-418 (418.226.00-6~deb11u2) bullseye; urgency=medium
+
+ * Cherry-pick ppc64el changes from 418.226.00-16.
+ * Backport pfn_valid changes in nv-mmap.c from 470.239.06.
+ * ppc64el: Use pfn_valid() variant with rcu_read_{,un}lock_sched() for
+ Linux 5.10 from 5.10.210 onwards to avoid using GPL symbols.
+
+ -- Andreas Beckmann <anbe@debian.org> Sun, 04 Aug 2024 16:41:41 +0200
[ Other info ]
I'm not rebuilding the package from sid this time since that contains
some changes not suitable for bullseye as I had not expected to need
updating the package again in bullseye after it got EoLed upstream.
I'm going to upload this change right now.
Andreas
diff --git a/debian/changelog b/debian/changelog
index 45fd50b05..414961dc3 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,12 @@
+nvidia-graphics-drivers-tesla-418 (418.226.00-6~deb11u2) bullseye; urgency=medium
+
+ * Cherry-pick ppc64el changes from 418.226.00-16.
+ * Backport pfn_valid changes in nv-mmap.c from 470.239.06.
+ * ppc64el: Use pfn_valid() variant with rcu_read_{,un}lock_sched() for
+ Linux 5.10 from 5.10.210 onwards to avoid using GPL symbols.
+
+ -- Andreas Beckmann <anbe@debian.org> Sun, 04 Aug 2024 16:41:41 +0200
+
nvidia-graphics-drivers-tesla-418 (418.226.00-6~deb11u1) bullseye; urgency=medium
* Rebuild for bullseye.
diff --git a/debian/gbp.conf b/debian/gbp.conf
index 415779ad1..31f6e0c17 100644
--- a/debian/gbp.conf
+++ b/debian/gbp.conf
@@ -1,5 +1,5 @@
[DEFAULT]
-debian-branch = tesla-418/master
+debian-branch = tesla-418/bullseye
[buildpackage]
overlay = True
diff --git a/debian/module/debian/patches/0036-backport-pfn_valid-changes-in-nv-mmap.c-from-470.239.patch b/debian/module/debian/patches/0036-backport-pfn_valid-changes-in-nv-mmap.c-from-470.239.patch
new file mode 100644
index 000000000..330122f5c
--- /dev/null
+++ b/debian/module/debian/patches/0036-backport-pfn_valid-changes-in-nv-mmap.c-from-470.239.patch
@@ -0,0 +1,39 @@
+From 63d49836d41809282dce33126a0117d51d1d6834 Mon Sep 17 00:00:00 2001
+From: Andreas Beckmann <anbe@debian.org>
+Date: Sun, 25 Feb 2024 09:38:15 +0100
+Subject: [PATCH] backport pfn_valid changes in nv-mmap.c from 470.239.06
+
+---
+ nvidia/nv-mmap.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/nvidia/nv-mmap.c b/nvidia/nv-mmap.c
+index 29ac828..af53116 100644
+--- a/nvidia/nv-mmap.c
++++ b/nvidia/nv-mmap.c
+@@ -13,6 +13,7 @@
+
+ #include "os-interface.h"
+ #include "nv-linux.h"
++#include "nv-ibmnpu.h"
+ #include "nv_speculation_barrier.h"
+
+ extern nv_cpu_type_t nv_cpu_type;
+@@ -461,11 +462,10 @@ int nvidia_mmap_helper(
+ //
+ // This path is similar to the sysmem mapping code.
+ // TODO: Refactor is needed as part of bug#2001704.
+- // Use pfn_valid to determine whether the physical address has
+- // backing struct page. This is used to isolate P8 from P9.
+ //
+- if (!IS_REG_OFFSET(nv, access_start, access_len) &&
+- (pfn_valid(PFN_DOWN(mmap_start))))
++ nv_linux_state_t *nvl = NV_GET_NVL_FROM_NV_STATE(nv);
++ if ((nv_get_numa_status(nvl) == NV_NUMA_STATUS_ONLINE) &&
++ !IS_REG_OFFSET(nv, access_start, access_len))
+ {
+ ret = nvidia_mmap_numa(vma, mmap_context);
+ if (ret)
+--
+2.20.1
+
diff --git a/debian/module/debian/patches/0044-use-pfn_valid-variant-with-rcu_read_-un-lock_sched.patch b/debian/module/debian/patches/0044-use-pfn_valid-variant-with-rcu_read_-un-lock_sched.patch
new file mode 100644
index 000000000..e80d0ade7
--- /dev/null
+++ b/debian/module/debian/patches/0044-use-pfn_valid-variant-with-rcu_read_-un-lock_sched.patch
@@ -0,0 +1,80 @@
+From 2d0d2cad42331b75fcff6f0492d69cbc3a1d47ab Mon Sep 17 00:00:00 2001
+From: Andreas Beckmann <anbe@debian.org>
+Date: Mon, 24 Jun 2024 02:31:03 +0200
+Subject: [PATCH] use pfn_valid() variant with rcu_read_{,un}lock_sched()
+
+---
+ common/inc/nv-linux.h | 45 +++++++++++++++++++++++++++++++++++++++++++
+ nvidia/nv-vtophys.c | 2 +-
+ 2 files changed, 46 insertions(+), 1 deletion(-)
+
+diff --git a/common/inc/nv-linux.h b/common/inc/nv-linux.h
+index 0b5b0db..21a6b7a 100644
+--- a/common/inc/nv-linux.h
++++ b/common/inc/nv-linux.h
+@@ -2050,4 +2050,49 @@ static inline NvU32 nv_default_irq_flags(nv_state_t *nv)
+ #include <linux/backlight.h>
+ #endif
+
++#if defined(CONFIG_HAVE_ARCH_PFN_VALID) || \
++ !defined(NVCPU_PPC64LE) || \
++ LINUX_VERSION_CODE < KERNEL_VERSION(5,10,210) || \
++ LINUX_VERSION_CODE > KERNEL_VERSION(5,11,0)
++# define nv_virt_addr_valid virt_addr_valid
++#else
++/* - based on pfn_valid() from v5.10.210 which uses
++ rcu_read_lock()/rcu_read_unlock() from
++ 5ec8e8ea8b7783fab150cf86404fc38cb4db8800 (v6.8-rc1/v6.1.76)
++ - applied rcu_read_lock_sched()/rcu_read_unlock_sched() switch from
++ f6564fce256a3944aa1bc76cb3c40e792d97c1eb (v6.8-rc3/v6.1.77)
++ which is not yet backported to 5.10
++*/
++static inline int nv_pfn_valid(unsigned long pfn)
++{
++ struct mem_section *ms;
++ int ret;
++
++ if (pfn_to_section_nr(pfn) >= NR_MEM_SECTIONS)
++ return 0;
++ ms = __pfn_to_section(pfn);
++ rcu_read_lock_sched();
++ if (!valid_section(ms)) {
++ rcu_read_unlock_sched();
++ return 0;
++ }
++ /*
++ * Traditionally early sections always returned pfn_valid() for
++ * the entire section-sized span.
++ */
++ ret = early_section(ms) || pfn_section_valid(ms, pfn);
++ rcu_read_unlock_sched();
++
++ return ret;
++}
++
++#define nv_virt_addr_valid(vaddr) ({ \
++ unsigned long _addr = (unsigned long)vaddr; \
++ _addr >= PAGE_OFFSET && _addr < (unsigned long)high_memory && \
++ nv_pfn_valid(virt_to_pfn(_addr)); \
++})
++#endif
++
++#define NV_CHECK_EXPORT_SYMBOL(symbol) (NV_IS_EXPORT_SYMBOL_PRESENT_##symbol && \
++ !NV_IS_EXPORT_SYMBOL_GPL_##symbol)
+ #endif /* _NV_LINUX_H_ */
+diff --git a/nvidia/nv-vtophys.c b/nvidia/nv-vtophys.c
+index 9c8d4ef..02c3068 100644
+--- a/nvidia/nv-vtophys.c
++++ b/nvidia/nv-vtophys.c
+@@ -28,7 +28,7 @@ NvU64 NV_API_CALL nv_get_kern_phys_address(NvU64 address)
+ #endif
+
+ /* direct-mapped kernel address */
+- if (virt_addr_valid(address))
++ if (nv_virt_addr_valid(address))
+ return __pa(address);
+
+ nv_printf(NV_DBG_ERRORS,
+--
+2.20.1
+
diff --git a/debian/module/debian/patches/series.in b/debian/module/debian/patches/series.in
index e43f0c42f..c20226964 100644
--- a/debian/module/debian/patches/series.in
+++ b/debian/module/debian/patches/series.in
@@ -11,6 +11,8 @@
0011-backport-iosys_map-changes-from-470.129.06.patch
0012-backport-dma_set_coherent_mask-from-470.129.06.patch
0013-backport-acpi_bus_get_device-changes-from-470.129.06.patch
+0036-backport-pfn_valid-changes-in-nv-mmap.c-from-470.239.patch
+0044-use-pfn_valid-variant-with-rcu_read_-un-lock_sched.patch
# build system updates
bashisms.patch
Reply to: