Skip to content

Commit 1882668

Browse files
committed
Add nvidia driver patch for Xen PAT table lookup
1 parent 67a2c5f commit 1882668

File tree

2 files changed

+51
-0
lines changed

2 files changed

+51
-0
lines changed

hack/build/nvidiagpu-common.sh

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,9 @@ tar -xzf "$ARCHIVE" -C "$NV_WORKDIR"
4242
OLDPWD=$(pwd)
4343
cd "$NV_WORKDIR"/"$NV_KMOD_REPO_OWNER"-*
4444

45+
# Apply nvidia hackpatches if we have them
46+
for patch in "${OLDPWD}"/patches-nvidia/*.patch; do patch -p1 < "$patch"; done
47+
4548
if [ "${TARGET_ARCH_STANDARD}" = "aarch64" ]; then
4649
CROSS_ENV="env CC=aarch64-linux-gnu-gcc LD=aarch64-linux-gnu-ld AR=aarch64-linux-gnu-ar CXX=aarch64-linux-gnu-g++ OBJCOPY=aarch64-linux-gnu-objcopy"
4750
else
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
From d14d762911594a3b4c9dd11f15105e80d2e4335b Mon Sep 17 00:00:00 2001
2+
From: Benjamin Leggett <benjamin@edera.io>
3+
Date: Mon, 28 Jul 2025 20:06:45 -0400
4+
Subject: [PATCH] Edera hack
5+
6+
---
7+
kernel-open/nvidia/nv-pat.c | 11 ++++-------
8+
1 file changed, 4 insertions(+), 7 deletions(-)
9+
10+
diff --git a/kernel-open/nvidia/nv-pat.c b/kernel-open/nvidia/nv-pat.c
11+
index 1fa530d9..83c00eab 100644
12+
--- a/kernel-open/nvidia/nv-pat.c
13+
+++ b/kernel-open/nvidia/nv-pat.c
14+
@@ -40,12 +40,9 @@ int nv_pat_mode = NV_PAT_MODE_DISABLED;
15+
* WC entry is as expected before using PAT.
16+
*/
17+
18+
-#if defined(CONFIG_X86_PAT)
19+
-#define NV_ENABLE_BUILTIN_PAT_SUPPORT 0
20+
-#else
21+
+// HACK(edera) - force use of builtin PAT even on x86 to work around
22+
+// buggy PAT detection under Xen
23+
#define NV_ENABLE_BUILTIN_PAT_SUPPORT 1
24+
-#endif
25+
-
26+
27+
#define NV_READ_PAT_ENTRIES(pat1, pat2) rdmsr(0x277, (pat1), (pat2))
28+
#define NV_WRITE_PAT_ENTRIES(pat1, pat2) wrmsr(0x277, (pat1), (pat2))
29+
@@ -63,14 +60,14 @@ static inline void nv_disable_caches(unsigned long *cr4)
30+
wbinvd();
31+
*cr4 = NV_READ_CR4();
32+
if (*cr4 & 0x80) NV_WRITE_CR4(*cr4 & ~0x80);
33+
- __flush_tlb();
34+
+ __flush_tlb_local();
35+
}
36+
37+
static inline void nv_enable_caches(unsigned long cr4)
38+
{
39+
unsigned long cr0 = read_cr0();
40+
wbinvd();
41+
- __flush_tlb();
42+
+ __flush_tlb_local();
43+
write_cr0((cr0 & 0x9fffffff));
44+
if (cr4 & 0x80) NV_WRITE_CR4(cr4);
45+
}
46+
--
47+
2.50.1
48+

0 commit comments

Comments
 (0)