Created
July 25, 2023 02:37
-
-
Save Vigilans/eb54564f83ed065f5dc1000abc3db6af to your computer and use it in GitHub Desktop.
Patches for building nvidia-legacy-390xx-kernel-dkms_390.157-1 with clang on linux 6.x kernel
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# DKMS configuration for the NVIDIA kernel module. -*- sh -*- | |
# The version is replaced at build time by dh_dkms invoked in debian/rules. | |
PACKAGE_NAME="nvidia-legacy-390xx" | |
PACKAGE_VERSION="390.157" | |
# The NVIDIA driver does not support real-time kernels. | |
# Can't easily set this via BUILD_EXCLUSIVE. | |
[[ "$kernelver" =~ "-rt-" ]] && build_exclude="yes" | |
AUTOINSTALL=yes | |
PATCH=(nvidia-graphics-drivers-legacy-390xx-kernel-6.3-with-clang.patch cc_version_check-gcc5.patch bashisms.patch 0001-backport-error-on-unknown-conftests.patch 0002-backport-error-on-unknown-conftests-uvm-part.patch 0003-backport-set_-memory-pages-_array-_uc-changes-from-5.patch 0004-fix-conftest-includes.patch do-div-cast.patch fragile-ARCH.patch use-kbuild-compiler.patch use-kbuild-flags.patch conftest-verbose.patch nvidia-use-ARCH.o_binary.patch nvidia-modeset-use-ARCH.o_binary.patch include-swiotlb-header-on-arm.patch ignore_xen_on_arm.patch arm-outer-sync.patch nvidia-drm-arm-cflags.patch armhf-on-arm64-kernel.patch nvidia-graphics-drivers-legacy-390xx-kernel-6.4.patch) | |
MAKE[0]="env NV_VERBOSE=1 \ | |
make ${parallel_jobs+-j$parallel_jobs} modules KERNEL_UNAME=${kernelver}" | |
CLEAN="make KERNEL_UNAME=${kernelver} clean" | |
BUILT_MODULE_NAME[0]="nvidia" | |
DEST_MODULE_NAME[0]="$PACKAGE_NAME" | |
DEST_MODULE_LOCATION[0]="/updates/dkms" | |
BUILT_MODULE_NAME[1]="nvidia-modeset" | |
DEST_MODULE_NAME[1]="$PACKAGE_NAME-modeset" | |
DEST_MODULE_LOCATION[1]="/updates/dkms" | |
BUILT_MODULE_NAME[2]="nvidia-drm" | |
DEST_MODULE_NAME[2]="$PACKAGE_NAME-drm" | |
DEST_MODULE_LOCATION[2]="/updates/dkms" | |
BUILT_MODULE_NAME[3]="nvidia-uvm" | |
DEST_MODULE_NAME[3]="$PACKAGE_NAME-uvm" | |
DEST_MODULE_LOCATION[3]="/updates/dkms" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff -ur a/conftest.sh b/conftest.sh | |
--- a/conftest.sh 2023-06-01 20:00:46.719933661 +0800 | |
+++ b/conftest.sh 2023-06-01 21:26:23.218584390 +0800 | |
@@ -255,6 +255,9 @@ | |
CFLAGS="$CFLAGS -mfentry -DCC_USING_FENTRY" | |
fi | |
fi | |
+ | |
+ # Warnings | |
+ CFLAGS="$CFLAGS -Wno-error=implicit-function-declaration" | |
} | |
CONFTEST_PREAMBLE="#include \"conftest/headers.h\" | |
@@ -294,6 +297,12 @@ | |
echo "$CONFTEST_PREAMBLE | |
$CODE" > conftest$$.c | |
+ if [ -n "$PRINT" ]; then | |
+ >&2 echo "$CONFTEST_PREAMBLE | |
+ $CODE" | |
+ >&2 echo "$CC $CFLAGS -c conftest$$.c" | |
+ fi | |
+ | |
$CC $CFLAGS -c conftest$$.c > /dev/null 2>&1 | |
rm -f conftest$$.c | |
@@ -860,6 +869,25 @@ | |
return | |
fi | |
+ echo "$CONFTEST_PREAMBLE | |
+ #include <linux/acpi.h> | |
+ | |
+ acpi_op_remove conftest_op_remove_routine; | |
+ | |
+ void conftest_acpi_device_ops_remove(struct acpi_device *device) { | |
+ return conftest_op_remove_routine(device); | |
+ }" > conftest$$.c | |
+ | |
+ $CC $CFLAGS -c conftest$$.c > /dev/null 2>&1 | |
+ rm -f conftest$$.c | |
+ | |
+ if [ -f conftest$$.o ]; then | |
+ rm -f conftest$$.o | |
+ echo "#define NV_ACPI_DEVICE_OPS_REMOVE_ARGUMENT_COUNT 1" | append_conftest "types" | |
+ echo "#define NV_ACPI_DEVICE_OPS_REMOVE_VOID_RETURN" | append_conftest "types" | |
+ return | |
+ fi | |
+ | |
CODE=" | |
#include <linux/acpi.h> | |
@@ -4646,6 +4674,25 @@ | |
compile_check_conftest "$CODE" "NV_ACPI_VIDEO_BACKLIGHT_USE_NATIVE" "" "functions" | |
;; | |
+ | |
+ vma_vm_flags) | |
+ echo "$CONFTEST_PREAMBLE | |
+ #include <linux/mm_types.h> | |
+ #include <linux/mm.h> | |
+ void conftest_vma_vm_flags(void) { | |
+ struct vm_area_struct *vma; | |
+ vma->vm_flags |= VM_IO; | |
+ }" > conftest$$.c | |
+ | |
+ $CC $CFLAGS -c conftest$$.c >/dev/null 2>&1 | |
+ rm -f conftest$$.c | |
+ | |
+ if [ -f conftest$$.o ]; then | |
+ rm -f conftest$$.o | |
+ echo "#define NV_VMA_VM_FLAGS_NON_CONST" | append_conftest "types" | |
+ return | |
+ fi | |
+ ;; | |
esac | |
} | |
@@ -4765,14 +4812,14 @@ | |
echo "However, mixing compiler versions between the kernel"; | |
echo "and kernel modules can result in subtle bugs that are"; | |
echo "difficult to diagnose."; | |
- echo ""; | |
- echo "*** Failed CC version check. Bailing out! ***"; | |
- echo ""; | |
+ # echo ""; | |
+ # echo "*** Failed CC version check. Bailing out! ***"; | |
+ # echo ""; | |
elif [ "$VERBOSE" = "just_msg" ]; then | |
echo "The kernel was built with ${kernel_cc_string}, but the" \ | |
"current compiler version is `$CC --version | head -n 1`."; | |
fi | |
- exit 1; | |
+ exit 0; | |
fi | |
;; | |
diff -ur a/Kbuild b/Kbuild | |
--- a/Kbuild 2023-06-01 20:00:46.716600311 +0800 | |
+++ b/Kbuild 2023-06-01 21:37:31.631878921 +0800 | |
@@ -68,6 +68,7 @@ | |
EXTRA_CFLAGS += $(call cc-option,-Werror=undef,) | |
EXTRA_CFLAGS += -DNV_SPECTRE_V2=$(NV_SPECTRE_V2) | |
EXTRA_CFLAGS += -DNV_KERNEL_INTERFACE_LAYER | |
+EXTRA_CFLAGS += -Wno-error=unused-command-line-argument -Wno-error=strict-prototypes | |
# | |
# Detect SGI UV systems and apply system-specific optimizations. | |
diff -ur a/nvidia/nv-acpi.c b/nvidia/nv-acpi.c | |
--- a/nvidia/nv-acpi.c 2023-06-01 20:00:46.719933661 +0800 | |
+++ b/nvidia/nv-acpi.c 2023-06-01 21:09:10.110158992 +0800 | |
@@ -23,7 +23,9 @@ | |
static int nv_acpi_add (struct acpi_device *); | |
-#if !defined(NV_ACPI_DEVICE_OPS_REMOVE_ARGUMENT_COUNT) || (NV_ACPI_DEVICE_OPS_REMOVE_ARGUMENT_COUNT == 2) | |
+#if defined(NV_ACPI_DEVICE_OPS_REMOVE_VOID_RETURN) | |
+static void nv_acpi_remove_one_arg(struct acpi_device *device); | |
+#elif !defined(NV_ACPI_DEVICE_OPS_REMOVE_ARGUMENT_COUNT) || (NV_ACPI_DEVICE_OPS_REMOVE_ARGUMENT_COUNT == 2) | |
static int nv_acpi_remove_two_args(struct acpi_device *device, int type); | |
#else | |
static int nv_acpi_remove_one_arg(struct acpi_device *device); | |
@@ -331,7 +333,9 @@ | |
return 0; | |
} | |
-#if !defined(NV_ACPI_DEVICE_OPS_REMOVE_ARGUMENT_COUNT) || (NV_ACPI_DEVICE_OPS_REMOVE_ARGUMENT_COUNT == 2) | |
+#if defined(NV_ACPI_DEVICE_OPS_REMOVE_VOID_RETURN) | |
+static void nv_acpi_remove_one_arg(struct acpi_device *device) | |
+#elif !defined(NV_ACPI_DEVICE_OPS_REMOVE_ARGUMENT_COUNT) || (NV_ACPI_DEVICE_OPS_REMOVE_ARGUMENT_COUNT == 2) | |
static int nv_acpi_remove_two_args(struct acpi_device *device, int type) | |
#else | |
static int nv_acpi_remove_one_arg(struct acpi_device *device) | |
@@ -384,8 +388,9 @@ | |
module_put(THIS_MODULE); | |
device->driver_data = NULL; | |
} | |
- | |
+#if !defined(NV_ACPI_DEVICE_OPS_REMOVE_VOID_RETURN) | |
return status; | |
+#endif | |
} | |
static void nv_acpi_event(acpi_handle handle, u32 event_type, void *data) | |
diff -ur a/nvidia/nvidia.Kbuild b/nvidia/nvidia.Kbuild | |
--- a/nvidia/nvidia.Kbuild 2023-06-01 20:00:46.723267010 +0800 | |
+++ b/nvidia/nvidia.Kbuild 2023-06-01 21:21:33.040487461 +0800 | |
@@ -209,6 +209,7 @@ | |
NV_CONFTEST_TYPE_COMPILE_TESTS += vmalloc_has_pgprot_t_arg | |
NV_CONFTEST_TYPE_COMPILE_TESTS += pci_dev_has_skip_bus_pm | |
NV_CONFTEST_TYPE_COMPILE_TESTS += pci_channel_state | |
+NV_CONFTEST_TYPE_COMPILE_TESTS += vma_vm_flags | |
NV_CONFTEST_GENERIC_COMPILE_TESTS += dom0_kernel_present | |
NV_CONFTEST_GENERIC_COMPILE_TESTS += nvidia_vgpu_kvm_build | |
diff -ur a/nvidia/nv-mmap.c b/nvidia/nv-mmap.c | |
--- a/nvidia/nv-mmap.c 2023-06-01 20:00:46.723267010 +0800 | |
+++ b/nvidia/nv-mmap.c 2023-06-01 21:32:12.473639152 +0800 | |
@@ -447,7 +447,11 @@ | |
addr = mmap_start; | |
// Needed for the linux kernel for mapping compound pages | |
+#if defined(NV_VMA_VM_FLAGS_NON_CONST) | |
vma->vm_flags |= VM_MIXEDMAP; | |
+#else | |
+ vm_flags_set(vma, VM_MIXEDMAP); | |
+#endif | |
for (j = 0; j < pages; j++) | |
{ | |
@@ -471,7 +475,11 @@ | |
} | |
} | |
- vma->vm_flags |= VM_IO; | |
+#if defined(NV_VMA_VM_FLAGS_NON_CONST) | |
+ vma->vm_flags |= VM_IO; | |
+#else | |
+ vm_flags_set(vma, VM_IO); | |
+#endif | |
} | |
else | |
{ | |
@@ -533,15 +541,25 @@ | |
NV_PRINT_AT(NV_DBG_MEMINFO, at); | |
+#if defined(NV_VMA_VM_FLAGS_NON_CONST) | |
vma->vm_flags |= (VM_IO | VM_LOCKED | VM_RESERVED); | |
vma->vm_flags |= (VM_DONTEXPAND | VM_DONTDUMP); | |
+#else | |
+ vm_flags_set(vma, VM_IO | VM_LOCKED | VM_RESERVED); | |
+ vm_flags_set(vma, VM_DONTEXPAND | VM_DONTDUMP); | |
+#endif | |
} | |
if ((prot & NV_PROTECT_WRITEABLE) == 0) | |
{ | |
vma->vm_page_prot = NV_PGPROT_READ_ONLY(vma->vm_page_prot); | |
+#if defined(NV_VMA_VM_FLAGS_NON_CONST) | |
vma->vm_flags &= ~VM_WRITE; | |
vma->vm_flags &= ~VM_MAYWRITE; | |
+#else | |
+ vm_flags_clear(vma, VM_WRITE); | |
+ vm_flags_clear(vma, VM_MAYWRITE); | |
+#endif | |
} | |
vma->vm_ops = &nv_vm_ops; | |
diff -ur a/nvidia-drm/nvidia-drm-connector.c b/nvidia-drm/nvidia-drm-connector.c | |
--- a/nvidia-drm/nvidia-drm-connector.c 2023-06-01 20:00:46.723267010 +0800 | |
+++ b/nvidia-drm/nvidia-drm-connector.c 2023-06-01 21:49:29.945419448 +0800 | |
@@ -98,7 +98,12 @@ | |
break; | |
} | |
- if (connector->override_edid) { | |
+ int override = 0; | |
+ mutex_lock(&connector->edid_override_mutex); | |
+ if (connector->edid_override) | |
+ override = 1; | |
+ mutex_unlock(&connector->edid_override_mutex); | |
+ if (override) { | |
const struct drm_property_blob *edid = connector->edid_blob_ptr; | |
if (edid->length <= sizeof(pDetectParams->edid.buffer)) { | |
@@ -111,6 +116,7 @@ | |
} | |
} | |
+ | |
if (!nvKms->getDynamicDisplayInfo(nv_dev->pDevice, pDetectParams)) { | |
NV_DRM_DEV_LOG_ERR( | |
nv_dev, | |
diff -ur a/nvidia-drm/nvidia-drm-drv.c b/nvidia-drm/nvidia-drm-drv.c | |
--- a/nvidia-drm/nvidia-drm-drv.c 2023-06-01 20:00:46.723267010 +0800 | |
+++ b/nvidia-drm/nvidia-drm-drv.c 2023-06-01 21:50:48.782474687 +0800 | |
@@ -241,7 +241,7 @@ | |
/* Currently unused. Update when needed. */ | |
- dev->mode_config.fb_base = 0; | |
+ // dev->mode_config.fb_base = 0; | |
dev->mode_config.async_page_flip = false; | |
diff -ur a/nvidia-drm/nvidia-drm-fb.c b/nvidia-drm/nvidia-drm-fb.c | |
--- a/nvidia-drm/nvidia-drm-fb.c 2023-06-01 20:00:46.723267010 +0800 | |
+++ b/nvidia-drm/nvidia-drm-fb.c 2023-06-01 21:55:43.793928784 +0800 | |
@@ -30,6 +30,7 @@ | |
#include "nvidia-drm-utils.h" | |
#include "nvidia-drm-gem.h" | |
+#include <drm/drm_modeset_helper.h> | |
#include <drm/drm_crtc_helper.h> | |
static void nv_drm_framebuffer_destroy(struct drm_framebuffer *fb) | |
diff -ur a/nvidia-uvm/uvm8.c b/nvidia-uvm/uvm8.c | |
--- a/nvidia-uvm/uvm8.c 2023-06-01 20:00:46.726600361 +0800 | |
+++ b/nvidia-uvm/uvm8.c 2023-06-01 21:39:07.522351555 +0800 | |
@@ -658,7 +658,12 @@ | |
// Using VM_DONTCOPY would be nice, but madvise(MADV_DOFORK) can reset that | |
// so we have to handle vm_open on fork anyway. We could disable MADV_DOFORK | |
// with VM_IO, but that causes other mapping issues. | |
+#if defined(NV_VMA_VM_FLAGS_NON_CONST) | |
vma->vm_flags |= VM_MIXEDMAP | VM_DONTEXPAND; | |
+#else | |
+ vm_flags_set(vma, VM_MIXEDMAP | VM_DONTEXPAND); | |
+#endif | |
+ | |
vma->vm_ops = &uvm_vm_ops_managed; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/conftest.sh b/conftest.sh | |
index 1b17a37..80ff621 100644 | |
--- a/conftest.sh | |
+++ b/conftest.sh | |
@@ -4698,6 +4698,30 @@ compile_test() { | |
fi | |
;; | |
+ drm_driver_has_dumb_destroy) | |
+ # | |
+ # Determine if the 'drm_driver' structure has a 'dumb_destroy' | |
+ # function pointer. | |
+ # | |
+ # Removed by commit 96a7b60f6ddb2 ("drm: remove dumb_destroy | |
+ # callback") in v6.3 linux-next (2023-02-10). | |
+ # | |
+ CODE=" | |
+ #if defined(NV_DRM_DRMP_H_PRESENT) | |
+ #include <drm/drmP.h> | |
+ #endif | |
+ | |
+ #if defined(NV_DRM_DRM_DRV_H_PRESENT) | |
+ #include <drm/drm_drv.h> | |
+ #endif | |
+ | |
+ int conftest_drm_driver_has_dumb_destroy(void) { | |
+ return offsetof(struct drm_driver, dumb_destroy); | |
+ }" | |
+ | |
+ compile_check_conftest "$CODE" "NV_DRM_DRIVER_HAS_DUMB_DESTROY" "" "types" | |
+ ;; | |
+ | |
# When adding a new conftest entry, please use the correct format for | |
# specifying the relevant upstream Linux kernel commit. | |
# | |
diff --git a/nvidia-drm/nvidia-drm-drv.c b/nvidia-drm/nvidia-drm-drv.c | |
index 629a445..8ee1d04 100644 | |
--- a/nvidia-drm/nvidia-drm-drv.c | |
+++ b/nvidia-drm/nvidia-drm-drv.c | |
@@ -762,7 +762,9 @@ static void nv_drm_update_drm_driver_features(void) | |
nv_drm_driver.dumb_create = nv_drm_dumb_create; | |
nv_drm_driver.dumb_map_offset = nv_drm_dumb_map_offset; | |
+#if defined(NV_DRM_DRIVER_HAS_DUMB_DESTROY) | |
nv_drm_driver.dumb_destroy = nv_drm_dumb_destroy; | |
+#endif | |
#if defined(NV_DRM_DRIVER_HAS_GEM_PRIME_CALLBACKS) | |
nv_drm_driver.gem_vm_ops = &nv_drm_gem_vma_ops; | |
diff --git a/nvidia-drm/nvidia-drm-gem-nvkms-memory.c b/nvidia-drm/nvidia-drm-gem-nvkms-memory.c | |
index cd60138..6843fb0 100644 | |
--- a/nvidia-drm/nvidia-drm-gem-nvkms-memory.c | |
+++ b/nvidia-drm/nvidia-drm-gem-nvkms-memory.c | |
@@ -226,12 +226,14 @@ done: | |
return ret; | |
} | |
+#if defined(NV_DRM_DRIVER_HAS_DUMB_DESTROY) | |
int nv_drm_dumb_destroy(struct drm_file *file, | |
struct drm_device *dev, | |
uint32_t handle) | |
{ | |
return drm_gem_handle_delete(file, handle); | |
} | |
+#endif | |
/* XXX Move these vma operations to os layer */ | |
diff --git a/nvidia-drm/nvidia-drm-gem-nvkms-memory.h b/nvidia-drm/nvidia-drm-gem-nvkms-memory.h | |
index 2d9d1a1..9bde6cd 100644 | |
--- a/nvidia-drm/nvidia-drm-gem-nvkms-memory.h | |
+++ b/nvidia-drm/nvidia-drm-gem-nvkms-memory.h | |
@@ -79,9 +79,11 @@ int nv_drm_dumb_map_offset(struct drm_file *file, | |
struct drm_device *dev, uint32_t handle, | |
uint64_t *offset); | |
+#if defined(NV_DRM_DRIVER_HAS_DUMB_DESTROY) | |
int nv_drm_dumb_destroy(struct drm_file *file, | |
struct drm_device *dev, | |
uint32_t handle); | |
+#endif | |
extern const struct vm_operations_struct nv_drm_gem_vma_ops; | |
diff --git a/nvidia-drm/nvidia-drm.Kbuild b/nvidia-drm/nvidia-drm.Kbuild | |
index e283874..393b912 100644 | |
--- a/nvidia-drm/nvidia-drm.Kbuild | |
+++ b/nvidia-drm/nvidia-drm.Kbuild | |
@@ -106,3 +106,4 @@ NV_CONFTEST_TYPE_COMPILE_TESTS += drm_device_has_pdev | |
NV_CONFTEST_TYPE_COMPILE_TESTS += dma_resv_add_fence | |
NV_CONFTEST_TYPE_COMPILE_TESTS += dma_resv_reserve_fences | |
NV_CONFTEST_TYPE_COMPILE_TESTS += reservation_object_reserve_shared_has_num_fences_arg | |
+NV_CONFTEST_TYPE_COMPILE_TESTS += drm_driver_has_dumb_destroy |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
nvidia-graphics-drivers-legacy-390xx-kernel-6.3-with-clang.patch | |
cc_version_check-gcc5.patch | |
bashisms.patch | |
# kernel support | |
0001-backport-error-on-unknown-conftests.patch | |
0002-backport-error-on-unknown-conftests-uvm-part.patch | |
0003-backport-set_-memory-pages-_array-_uc-changes-from-5.patch | |
0004-fix-conftest-includes.patch | |
do-div-cast.patch | |
# build system updates | |
fragile-ARCH.patch | |
use-kbuild-compiler.patch | |
use-kbuild-flags.patch | |
conftest-verbose.patch | |
nvidia-use-ARCH.o_binary.patch | |
nvidia-modeset-use-ARCH.o_binary.patch | |
# armhf support | |
include-swiotlb-header-on-arm.patch | |
ignore_xen_on_arm.patch | |
arm-outer-sync.patch | |
nvidia-drm-arm-cflags.patch | |
armhf-on-arm64-kernel.patch | |
nvidia-graphics-drivers-legacy-390xx-kernel-6.4.patch |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment