diff options
Diffstat (limited to 'kernel-5.0.patch')
-rw-r--r-- | kernel-5.0.patch | 278 |
1 files changed, 241 insertions, 37 deletions
diff --git a/kernel-5.0.patch b/kernel-5.0.patch index 4786b69b6265..9ae00f75c619 100644 --- a/kernel-5.0.patch +++ b/kernel-5.0.patch @@ -1,52 +1,256 @@ ---- kernel/nv-drm.c 2018-05-25 04:16:20.000000000 +0000 -+++ kernel/nv-drm.c 2019-03-04 20:57:40.065280734 +0000 -@@ -252,7 +252,11 @@ - goto done; - } +From 0b4e74ba61c50aefa16a4bafac3a60799eab7a20 Mon Sep 17 00:00:00 2001 +From: Alberto Milone <alberto.milone@canonical.com> +Date: Fri, 15 Feb 2019 14:43:21 +0100 +Subject: [PATCH 1/1] Add support for Linux 5.0 + +--- + Makefile | 2 ++ + conftest.sh | 33 +++++++++++++++++++++++++++++++++ + nv-drm.c | 12 +++++++++++- + nv-time.h | 24 ++++++++++++++++++++++++ + os-interface.c | 13 +++++++------ + uvm/Makefile | 1 + + uvm/nvidia_uvm_linux.h | 1 + + uvm/nvidia_uvm_lite.c | 4 ++-- + 8 files changed, 81 insertions(+), 9 deletions(-) + create mode 100644 nv-time.h + +diff --git a/Makefile b/Makefile +index 8ac3c1a..1959dce 100644 +--- a/Makefile ++++ b/Makefile +@@ -147,6 +147,8 @@ COMPILE_TESTS = \ + vm_fault_present \ + vm_fault_has_address \ + drm_driver_unload_has_int_return_type \ ++ drm_gem_object_get \ ++ do_gettimeofday \ + drm_legacy_pci_init \ + timer_setup + # +diff --git a/conftest.sh b/conftest.sh +index 64d75a1..fb0bf60 100755 +--- a/conftest.sh ++++ b/conftest.sh +@@ -168,6 +168,7 @@ test_headers() { + FILES="$FILES linux/sched/task.h" + FILES="$FILES xen/ioemu.h" + FILES="$FILES linux/fence.h" ++ FILES="$FILES linux/ktime.h" -+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 0, 0) - drm_gem_object_unreference_unlocked(&nv_obj->base); -+#else -+ drm_gem_object_put_unlocked(&nv_obj->base); -+#endif + FILES_ARCH="$FILES_ARCH asm/set_memory.h" - status = RM_OK; +@@ -1971,6 +1972,38 @@ compile_test() { + compile_check_conftest "$CODE" "NV_DRM_DRIVER_UNLOAD_HAS_INT_RETURN_TYPE" "" "types" + ;; ---- kernel/os-interface.c 2018-05-25 04:16:20.000000000 +0000 -+++ kernel/os-interface.c 2019-03-04 21:03:03.815854982 +0000 -@@ -14,6 +14,16 @@ - #include "os-interface.h" - #include "nv-linux.h" ++ drm_gem_object_get) ++ # ++ # Determine if the function drm_gem_object_get() is present. ++ # ++ CODE=" ++ #include <drm/drmP.h> ++ #if defined(NV_DRM_DRM_GEM_H_PRESENT) ++ #include <drm/drm_gem.h> ++ #endif ++ void conftest_drm_gem_object_get(void) { ++ drm_gem_object_get(); ++ }" ++ ++ compile_check_conftest "$CODE" "NV_DRM_GEM_OBJECT_GET_PRESENT" "" "functions" ++ ;; ++ ++ do_gettimeofday) ++ # ++ # Determine if the function do_gettimeofday() is present. ++ # ++ CODE=" ++ #include <linux/time.h> ++ #if defined(NV_LINUX_KTIME_H_PRESENT) ++ #include <linux/ktime.h> ++ #endif ++ void conftest_do_gettimeofday(void) { ++ do_gettimeofday(); ++ }" ++ ++ compile_check_conftest "$CODE" "NV_DO_GETTIMEOFDAY_PRESENT" "" "functions" ++ ;; ++ + drm_legacy_pci_init) + # + # Determine if drm_legacy_pci_init() is present. drm_pci_init() was +diff --git a/nv-drm.c b/nv-drm.c +index 0eb72e4..1c968de 100644 +--- a/nv-drm.c ++++ b/nv-drm.c +@@ -37,6 +37,16 @@ struct nv_gem_object { + struct page **pages; + }; -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 0, 0) -+static inline void do_gettimeofday(struct timeval *tv) ++static inline void ++nv_drm_gem_object_unreference_unlocked(struct nv_gem_object *nv_gem) +{ -+ struct timespec64 now; -+ ktime_get_real_ts64(&now); -+ tv->tv_sec = now.tv_sec; -+ tv->tv_usec = now.tv_nsec/1000; ++#if defined(NV_DRM_GEM_OBJECT_GET_PRESENT) ++ drm_gem_object_put_unlocked(&nv_gem->base); ++#else ++ drm_gem_object_unreference_unlocked(&nv_gem->base); ++#endif +} ++ + static int nv_drm_load( + struct drm_device *dev, + unsigned long flags +@@ -252,7 +262,7 @@ RM_STATUS NV_API_CALL nv_alloc_os_descriptor_handle( + goto done; + } + +- drm_gem_object_unreference_unlocked(&nv_obj->base); ++ nv_drm_gem_object_unreference_unlocked(nv_obj); + + status = RM_OK; + +diff --git a/nv-time.h b/nv-time.h +new file mode 100644 +index 0000000..cc828aa +--- /dev/null ++++ b/nv-time.h +@@ -0,0 +1,24 @@ ++#ifndef __NV_TIME_H__ ++#define __NV_TIME_H__ ++ ++#include "conftest.h" ++#include <linux/time.h> ++ ++#if defined(NV_LINUX_KTIME_H_PRESENT) ++#include <linux/ktime.h> +#endif + - RM_STATUS NV_API_CALL os_disable_console_access(void) - { - NV_ACQUIRE_CONSOLE_SEM(); ---- kernel/uvm/nvidia_uvm_lite.c 2019-03-04 20:57:25.815255511 +0000 -+++ kernel/uvm/nvidia_uvm_lite.c 2019-03-04 21:04:25.239333050 +0000 -@@ -30,6 +30,16 @@ - #include "nvidia_uvm_lite_counters.h" - #include "ctrl2080mc.h" - -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 0, 0) -+static inline void do_gettimeofday(struct timeval *tv) ++static inline void nv_gettimeofday(struct timeval *tv) +{ ++#ifdef NV_DO_GETTIMEOFDAY_PRESENT ++ do_gettimeofday(tv); ++#else + struct timespec64 now; ++ + ktime_get_real_ts64(&now); + tv->tv_sec = now.tv_sec; + tv->tv_usec = now.tv_nsec/1000; -+} +#endif ++} + - // - // nvidia_uvm_lite.c - // This file contains code that is specific to the UVM-Lite mode of operation. ++#endif +diff --git a/os-interface.c b/os-interface.c +index 7e3d362..7190b26 100644 +--- a/os-interface.c ++++ b/os-interface.c +@@ -13,6 +13,7 @@ + + #include "os-interface.h" + #include "nv-linux.h" ++#include "nv-time.h" + + RM_STATUS NV_API_CALL os_disable_console_access(void) + { +@@ -440,7 +441,7 @@ RM_STATUS NV_API_CALL os_get_current_time( + { + struct timeval tm; + +- do_gettimeofday(&tm); ++ nv_gettimeofday(&tm); + + *seconds = tm.tv_sec; + *useconds = tm.tv_usec; +@@ -475,7 +476,7 @@ RM_STATUS NV_API_CALL os_delay_us(NvU32 MicroSeconds) + #ifdef NV_CHECK_DELAY_ACCURACY + struct timeval tm1, tm2; + +- do_gettimeofday(&tm1); ++ nv_gettimeofday(&tm1); + #endif + + if (in_irq() && (MicroSeconds > NV_MAX_ISR_DELAY_US)) +@@ -490,7 +491,7 @@ RM_STATUS NV_API_CALL os_delay_us(NvU32 MicroSeconds) + udelay(usec); + + #ifdef NV_CHECK_DELAY_ACCURACY +- do_gettimeofday(&tm2); ++ nv_gettimeofday(&tm2); + nv_printf(NV_DBG_ERRORS, "NVRM: osDelayUs %d: 0x%x 0x%x\n", + MicroSeconds, tm2.tv_sec - tm1.tv_sec, tm2.tv_usec - tm1.tv_usec); + #endif +@@ -518,7 +519,7 @@ RM_STATUS NV_API_CALL os_delay(NvU32 MilliSeconds) + struct timeval tm_start; + #endif + +- do_gettimeofday(&tm_aux); ++ nv_gettimeofday(&tm_aux); + #ifdef NV_CHECK_DELAY_ACCURACY + tm_start = tm_aux; + #endif +@@ -552,7 +553,7 @@ RM_STATUS NV_API_CALL os_delay(NvU32 MilliSeconds) + do + { + schedule_timeout(jiffies); +- do_gettimeofday(&tm_aux); ++ nv_gettimeofday(&tm_aux); + if (NV_TIMERCMP(&tm_aux, &tm_end, <)) + { + NV_TIMERSUB(&tm_end, &tm_aux, &tm_aux); +@@ -574,7 +575,7 @@ RM_STATUS NV_API_CALL os_delay(NvU32 MilliSeconds) + udelay(MicroSeconds); + } + #ifdef NV_CHECK_DELAY_ACCURACY +- do_gettimeofday(&tm_aux); ++ nv_gettimeofday(&tm_aux); + timersub(&tm_aux, &tm_start, &tm_aux); + nv_printf(NV_DBG_ERRORS, "NVRM: osDelay %dmsec: %d.%06dsec\n", + MilliSeconds, tm_aux.tv_sec, tm_aux.tv_usec); +diff --git a/uvm/Makefile b/uvm/Makefile +index 42ad927..5c7b466 100644 +--- a/uvm/Makefile ++++ b/uvm/Makefile +@@ -171,6 +171,7 @@ COMPILE_TESTS = \ + kbasename \ + fatal_signal_pending \ + kuid_t \ ++ do_gettimeofday \ + vm_fault_has_address + + MODULE_NAME:= nvidia-uvm +diff --git a/uvm/nvidia_uvm_linux.h b/uvm/nvidia_uvm_linux.h +index 1625209..1edb620 100644 +--- a/uvm/nvidia_uvm_linux.h ++++ b/uvm/nvidia_uvm_linux.h +@@ -146,6 +146,7 @@ + #include <linux/interrupt.h> /* tasklets, interrupt helpers */ + #include <linux/timer.h> + #include <linux/time.h> /* do_gettimeofday()*/ ++#include "nv-time.h" + + #include <asm/div64.h> /* do_div() */ + #if defined(NV_ASM_SYSTEM_H_PRESENT) +diff --git a/uvm/nvidia_uvm_lite.c b/uvm/nvidia_uvm_lite.c +index 119c93a..33b8d4b 100644 +--- a/uvm/nvidia_uvm_lite.c ++++ b/uvm/nvidia_uvm_lite.c +@@ -2019,7 +2019,7 @@ static RM_STATUS _check_ecc_errors(UvmGpuMigrationTracking *pMigTracker, + { + if (!!(rmInterruptSet) && !bEccIncomingError) + { +- do_gettimeofday(&eccErrorStartTime); ++ nv_gettimeofday(&eccErrorStartTime); + _set_timeout_in_usec(&eccErrorStartTime, &eccTimeout, + UVM_ECC_ERR_TIMEOUT_USEC); + +@@ -2051,7 +2051,7 @@ static RM_STATUS _check_ecc_errors(UvmGpuMigrationTracking *pMigTracker, + // + if (!!(rmInterruptSet) && (eccErrorStartTime.tv_usec != 0)) + { +- do_gettimeofday(&eccErrorCurrentTime); ++ nv_gettimeofday(&eccErrorCurrentTime); + if ((eccErrorCurrentTime.tv_sec > eccTimeout.tv_sec) || + ((eccErrorCurrentTime.tv_sec == eccTimeout.tv_sec) && + (eccErrorCurrentTime.tv_usec >= eccTimeout.tv_usec))) +-- +2.19.1 + |