Sophie

Sophie

distrib > Mageia > 7 > armv7hl > media > nonfree-updates-src > by-pkgid > 4904d3cf68cdbe2720dc1b36044218ef > files > 6

nvidia390-390.138-2.mga7.nonfree.src.rpm

diff --git a/kernel/common/inc/nv-linux.h b/kernel/common/inc/nv-linux.h
index 37c6841..23efe9e 100644
--- a/kernel/common/inc/nv-linux.h
+++ b/kernel/common/inc/nv-linux.h
@@ -159,12 +159,14 @@ static inline uid_t __kuid_val(kuid_t uid)
 }
 #endif
 
 #if defined(NVCPU_X86_64) && !defined(HAVE_COMPAT_IOCTL)
 #include <linux/syscalls.h>         /* sys_ioctl()                      */
+#if defined(NV_LINUX_IOCTL32_H_PRESENT)
 #include <linux/ioctl32.h>          /* register_ioctl32_conversion()    */
 #endif
+#endif
 
 #if !defined(NV_FILE_OPERATIONS_HAS_IOCTL) && \
   !defined(NV_FILE_OPERATIONS_HAS_UNLOCKED_IOCTL)
 #error "struct file_operations compile test likely failed!"
 #endif
diff --git a/kernel/common/inc/nv-mm.h b/kernel/common/inc/nv-mm.h
index 8df26f1..e791bb2 100644
--- a/kernel/common/inc/nv-mm.h
+++ b/kernel/common/inc/nv-mm.h
@@ -146,10 +146,15 @@ typedef int vm_fault_t;
         #if defined(NV_GET_USER_PAGES_REMOTE_HAS_LOCKED_ARG)
 
                return get_user_pages_remote(tsk, mm, start, nr_pages, flags,
                                             pages, vmas, NULL);
 
+        #elif defined(NV_GET_USER_PAGES_REMOTE_REMOVED_TSK_ARG)
+
+               return get_user_pages_remote(mm, start, nr_pages, flags,
+                                            pages, vmas, NULL);
+
         #else
 
                return get_user_pages_remote(tsk, mm, start, nr_pages, flags,
                                             pages, vmas);
 
diff --git a/kernel/conftest.sh b/kernel/conftest.sh
index cdb249c..54da233 100755
--- a/kernel/conftest.sh
+++ b/kernel/conftest.sh
@@ -132,10 +132,11 @@ test_headers() {
     FILES="$FILES linux/sched/task_stack.h"
     FILES="$FILES xen/ioemu.h"
     FILES="$FILES linux/fence.h"
     FILES="$FILES linux/ktime.h"
     FILES="$FILES linux/dma-resv.h"
+    FILES="$FILES linux/ioctl32.h"
 
     # Arch specific headers which need testing
     FILES_ARCH="asm/book3s/64/hash-64k.h"
     FILES_ARCH="$FILES_ARCH asm/set_memory.h"
     FILES_ARCH="$FILES_ARCH asm/powernv.h"
@@ -2449,10 +2450,69 @@ compile_test() {
             }"
 
             compile_check_conftest "$CODE" "NV_DRM_DRIVER_HAS_LEGACY_DEV_LIST" "" "types"
         ;;
 
+        drm_driver_has_gem_free_object)
+            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_gem_free_object(void) {
+                return offsetof(struct drm_driver, gem_free_object);
+            }"
+
+            compile_check_conftest "$CODE" "NV_DRM_DRIVER_HAS_GEM_FREE_OBJECT" "" "types"
+        ;;
+
+        drm_display_mode_has_vrefresh)
+            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_display_mode_has_vrefresh(void) {
+                return offsetof(struct drm_display_mode, vrefresh);
+            }"
+
+            compile_check_conftest "$CODE" "NV_DRM_DISPLAY_MODE_HAS_VREFRESH" "" "types"
+        ;;
+
+        drm_master_set_returns_int)
+            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
+
+            static int nv_master_set(struct drm_device *x, struct drm_file *y, bool z)
+            {
+                return 1;
+            }
+
+            int conftest_drm_master_set_returns_int(void) {
+                struct drm_driver nv_drm_driver;
+                nv_drm_driver.master_set = nv_master_set;
+
+                return nv_drm_driver.master_set(NULL, NULL, false);
+            }"
+
+            compile_check_conftest "$CODE" "NV_DRM_MASTER_SET_RETURNS_INT" "" "generic"
+        ;;
+
         jiffies_to_timespec)
             #
             # Determine if jiffies_to_timespec() is present
             #
             # removed by commit 751addac78b6
@@ -3138,10 +3198,33 @@ compile_test() {
             else
                 echo "#undef NV_GET_USER_PAGES_REMOTE_HAS_LOCKED_ARG" | append_conftest "functions"
             fi
             echo "#undef NV_GET_USER_PAGES_REMOTE_HAS_WRITE_AND_FORCE_ARGS" | append_conftest "functions"
 
+            # conftest #4: check if get_user_pages_remote() has removed tsk argument
+
+            echo "$CONFTEST_PREAMBLE
+            #include <linux/mm.h>
+            long get_user_pages_remote(struct mm_struct *mm,
+                                       unsigned long start,
+                                       unsigned long nr_pages,
+                                       unsigned int gup_flags,
+                                       struct page **pages,
+                                       struct vm_area_struct **vmas,
+                                       int *locked) {
+                return 0;
+            }" > conftest$$.c
+
+            $CC $CFLAGS -c conftest$$.c > /dev/null 2>&1
+            rm -f conftest$$.c
+
+            if [ -f conftest$$.o ]; then
+                echo "#define NV_GET_USER_PAGES_REMOTE_REMOVED_TSK_ARG" | append_conftest "functions"
+                rm -f conftest$$.o
+            else
+                echo "#undef NV_GET_USER_PAGES_REMOTE_REMOVED_TSK_ARG" | append_conftest "functions"
+            fi
         ;;
 
         usleep_range)
             #
             # Determine if the function usleep_range() is present.
@@ -3227,10 +3310,25 @@ compile_test() {
                 echo "#undef NV_DRM_GEM_OBJECT_LOOKUP_PRESENT" | append_conftest "functions"
                 echo "#undef NV_DRM_GEM_OBJECT_LOOKUP_ARGUMENT_COUNT" | append_conftest "functions"
             fi
         ;;
 
+        drm_gem_object_put_unlocked)
+            CODE="
+            #if defined(NV_DRM_DRMP_H_PRESENT)
+            #include <drm/drmP.h>
+            #endif
+            #if defined(NV_DRM_DRM_GEM_H_PRESENT)
+            #include <drm/drm_gem.h>
+            #endif
+            int conftest_drm_gem_object_put_unlocked(void) {
+                drm_gem_object_put_unlocked();
+            }"
+
+            compile_check_conftest "$CODE" "NV_DRM_GEM_OBJECT_PUT_UNLOCKED_PRESENT" "" "functions"
+        ;;
+
         drm_master_drop_has_from_release_arg)
             #
             # Determine if drm_driver::master_drop() has 'from_release' argument.
             #
             # Last argument 'bool from_release' has been removed by:
@@ -4129,10 +4227,30 @@ compile_test() {
             }"
 
             compile_check_conftest "$CODE" "NV_PCI_DEV_HAS_SKIP_BUS_PM" "" "types"
         ;;
 
+        smp_read_barrier_depends)
+            CODE="
+            #include <asm/barrier.h>
+            void conftest_smp_read_barrier_depends(void) {
+                smp_read_barrier_depends(0);
+            }"
+
+            compile_check_conftest "$CODE" "NV_SMP_READ_BARRIER_DEPENDS_PRESENT" "" "functions"
+        ;;
+
+        vga_tryget)
+            CODE="
+            #include <linux/vgaarb.h>
+            void conftest_vga_tryget(void) {
+                vga_tryget();
+            }"
+
+            compile_check_conftest "$CODE" "NV_VGA_TRYGET_PRESENT" "" "functions"
+        ;;
+
     esac
 }
 
 case "$6" in
     cc_sanity_check)
diff --git a/kernel/nvidia-drm/nvidia-drm-drv.c b/kernel/nvidia-drm/nvidia-drm-drv.c
index 17e377d..95e035b 100644
--- a/kernel/nvidia-drm/nvidia-drm-drv.c
+++ b/kernel/nvidia-drm/nvidia-drm-drv.c
@@ -464,20 +464,29 @@ static void nv_drm_unload(struct drm_device *dev)
 }
 #endif
 
 #if defined(NV_DRM_ATOMIC_MODESET_AVAILABLE)
 
+#if defined(NV_DRM_MASTER_SET_RETURNS_INT)
 static int nv_drm_master_set(struct drm_device *dev,
                              struct drm_file *file_priv, bool from_open)
+#else
+static void nv_drm_master_set(struct drm_device *dev,
+                              struct drm_file *file_priv, bool from_open)
+#endif
 {
     struct nv_drm_device *nv_dev = to_nv_device(dev);
 
+#if defined(NV_DRM_MASTER_SET_RETURNS_INT)
     if (!nvKms->grabOwnership(nv_dev->pDevice)) {
         return -EINVAL;
     }
 
     return 0;
+#else
+    nvKms->grabOwnership(nv_dev->pDevice);
+#endif
 }
 
 #if defined(NV_DRM_MASTER_DROP_HAS_FROM_RELEASE_ARG)
 static
 void nv_drm_master_drop(struct drm_device *dev,
@@ -675,11 +684,15 @@ static struct drm_driver nv_drm_driver = {
 #if defined(NV_DRM_DRIVER_PRIME_FLAG_PRESENT)
                                DRIVER_PRIME |
 #endif
                                DRIVER_GEM  | DRIVER_RENDER,
 
+#if defined(NV_DRM_DRIVER_HAS_GEM_FREE_OBJECT)
     .gem_free_object        = nv_drm_gem_free,
+#else
+    .gem_free_object_unlocked = nv_drm_gem_free,
+#endif
 
     .ioctls                 = nv_drm_ioctls,
     .num_ioctls             = ARRAY_SIZE(nv_drm_ioctls),
 
     .prime_handle_to_fd     = drm_gem_prime_handle_to_fd,
diff --git a/kernel/nvidia-drm/nvidia-drm-gem.c b/kernel/nvidia-drm/nvidia-drm-gem.c
index 37100ed..eb7b959 100644
--- a/kernel/nvidia-drm/nvidia-drm-gem.c
+++ b/kernel/nvidia-drm/nvidia-drm-gem.c
@@ -41,11 +41,13 @@
 void nv_drm_gem_free(struct drm_gem_object *gem)
 {
     struct drm_device *dev = gem->dev;
     struct nv_drm_gem_object *nv_gem = to_nv_gem_object(gem);
 
+#if !defined(NV_DRM_DRIVER_HAS_GEM_FREE_OBJECT)
     WARN_ON(!mutex_is_locked(&dev->struct_mutex));
+#endif
 
     /* Cleanup core gem object */
 
     drm_gem_object_release(&nv_gem->base);
 
diff --git a/kernel/nvidia-drm/nvidia-drm-gem.h b/kernel/nvidia-drm/nvidia-drm-gem.h
index 5691a7a..7fc6f69 100644
--- a/kernel/nvidia-drm/nvidia-drm-gem.h
+++ b/kernel/nvidia-drm/nvidia-drm-gem.h
@@ -85,11 +85,15 @@ static inline struct nv_drm_gem_object *to_nv_gem_object(
 
 static inline void
 nv_drm_gem_object_unreference_unlocked(struct nv_drm_gem_object *nv_gem)
 {
 #if defined(NV_DRM_GEM_OBJECT_GET_PRESENT)
+#if defined(NV_DRM_GEM_OBJECT_PUT_UNLOCKED_PRESENT)
     drm_gem_object_put_unlocked(&nv_gem->base);
+#else
+    drm_gem_object_put(&nv_gem->base);
+#endif
 #else
     drm_gem_object_unreference_unlocked(&nv_gem->base);
 #endif
 }
 
@@ -136,11 +140,10 @@ void nv_drm_gem_object_init(struct nv_drm_device *nv_dev,
     nv_dma_resv_init(&nv_gem->resv);
 
 #if defined(NV_DRM_GEM_OBJECT_HAS_RESV)
     nv_gem->base.resv = &nv_gem->resv;
 #endif
-
 #endif
 
     drm_gem_private_object_init(dev, &nv_gem->base, size);
 }
 
diff --git a/kernel/nvidia-drm/nvidia-drm-utils.c b/kernel/nvidia-drm/nvidia-drm-utils.c
index 8cb2d5e..6460d4d 100644
--- a/kernel/nvidia-drm/nvidia-drm-utils.c
+++ b/kernel/nvidia-drm/nvidia-drm-utils.c
@@ -101,11 +101,13 @@ int nvkms_connector_type_to_drm_connector_type(NvKmsConnectorType type,
 
 void
 nvkms_display_mode_to_drm_mode(const struct NvKmsKapiDisplayMode *displayMode,
                                struct drm_display_mode *mode)
 {
+#if defined(NV_DRM_DISPLAY_MODE_HAS_VREFRESH)
     mode->vrefresh    = (displayMode->timings.refreshRate + 500) / 1000; /* In Hz */
+#endif
 
     mode->clock       = (displayMode->timings.pixelClockHz + 500) / 1000; /* In Hz */
 
     mode->hdisplay    = displayMode->timings.hVisible;
     mode->hsync_start = displayMode->timings.hSyncStart;
@@ -187,11 +189,13 @@ bool drm_format_to_nvkms_format(u32 format,
 }
 
 void drm_mode_to_nvkms_display_mode(const struct drm_display_mode *src,
                                     struct NvKmsKapiDisplayMode *dst)
 {
+#if defined(NV_DRM_DISPLAY_MODE_HAS_VREFRESH)
     dst->timings.refreshRate  = src->vrefresh * 1000;
+#endif
 
     dst->timings.pixelClockHz = src->clock * 1000; /* In Hz */
 
     dst->timings.hVisible   = src->hdisplay;
     dst->timings.hSyncStart = src->hsync_start;
diff --git a/kernel/nvidia-drm/nvidia-drm.Kbuild b/kernel/nvidia-drm/nvidia-drm.Kbuild
index 4cfbbbc..d9dbab8 100644
--- a/kernel/nvidia-drm/nvidia-drm.Kbuild
+++ b/kernel/nvidia-drm/nvidia-drm.Kbuild
@@ -47,18 +47,20 @@ $(call ASSIGN_PER_OBJ_CFLAGS, $(NVIDIA_DRM_OBJECTS), $(NVIDIA_DRM_CFLAGS))
 
 NV_OBJECTS_DEPEND_ON_CONFTEST += $(NVIDIA_DRM_OBJECTS)
 
 NV_CONFTEST_GENERIC_COMPILE_TESTS += drm_available
 NV_CONFTEST_GENERIC_COMPILE_TESTS += drm_atomic_available
+NV_CONFTEST_GENERIC_COMPILE_TESTS += drm_master_set_returns_int
 NV_CONFTEST_GENERIC_COMPILE_TESTS += is_export_symbol_gpl_refcount_inc
 NV_CONFTEST_GENERIC_COMPILE_TESTS += is_export_symbol_gpl_refcount_dec_and_test
 
 NV_CONFTEST_FUNCTION_COMPILE_TESTS += drm_dev_unref
 NV_CONFTEST_FUNCTION_COMPILE_TESTS += drm_reinit_primary_mode_group
 NV_CONFTEST_FUNCTION_COMPILE_TESTS += get_user_pages_remote
 NV_CONFTEST_FUNCTION_COMPILE_TESTS += get_user_pages
 NV_CONFTEST_FUNCTION_COMPILE_TESTS += drm_gem_object_lookup
+NV_CONFTEST_FUNCTION_COMPILE_TESTS += drm_gem_object_put_unlocked
 NV_CONFTEST_FUNCTION_COMPILE_TESTS += drm_atomic_state_ref_counting
 NV_CONFTEST_FUNCTION_COMPILE_TESTS += drm_driver_has_gem_prime_res_obj
 NV_CONFTEST_FUNCTION_COMPILE_TESTS += drm_atomic_helper_connector_dpms
 NV_CONFTEST_FUNCTION_COMPILE_TESTS += drm_connector_funcs_have_mode_in_name
 NV_CONFTEST_FUNCTION_COMPILE_TESTS += vmf_insert_pfn
@@ -70,10 +72,12 @@ NV_CONFTEST_FUNCTION_COMPILE_TESTS += drm_connector_for_each_possible_encoder
 NV_CONFTEST_TYPE_COMPILE_TESTS += drm_bus_present
 NV_CONFTEST_TYPE_COMPILE_TESTS += drm_bus_has_bus_type
 NV_CONFTEST_TYPE_COMPILE_TESTS += drm_bus_has_get_irq
 NV_CONFTEST_TYPE_COMPILE_TESTS += drm_bus_has_get_name
 NV_CONFTEST_TYPE_COMPILE_TESTS += drm_driver_has_legacy_dev_list
+NV_CONFTEST_TYPE_COMPILE_TESTS += drm_driver_has_gem_free_object
+NV_CONFTEST_TYPE_COMPILE_TESTS += drm_display_mode_has_vrefresh
 NV_CONFTEST_TYPE_COMPILE_TESTS += drm_driver_has_set_busid
 NV_CONFTEST_TYPE_COMPILE_TESTS += drm_crtc_state_has_connectors_changed
 NV_CONFTEST_TYPE_COMPILE_TESTS += drm_init_function_args
 NV_CONFTEST_TYPE_COMPILE_TESTS += drm_mode_connector_list_update_has_merge_type_bits_arg
 NV_CONFTEST_TYPE_COMPILE_TESTS += drm_helper_mode_fill_fb_struct
diff --git a/kernel/nvidia-modeset/nvidia-modeset-linux.c b/kernel/nvidia-modeset/nvidia-modeset-linux.c
index f7f1def..8fb2161 100644
--- a/kernel/nvidia-modeset/nvidia-modeset-linux.c
+++ b/kernel/nvidia-modeset/nvidia-modeset-linux.c
@@ -49,12 +49,14 @@
 #endif
 
 
 #if NV_NEEDS_COMPAT_IOCTL_REGISTRATION
 #include <linux/syscalls.h> /* sys_ioctl() */
+#if defined(NV_LINUX_IOCTL32_H_PRESENT)
 #include <linux/ioctl32.h> /* register_ioctl32_conversion() */
 #endif
+#endif
 
 #define NVKMS_MAJOR_DEVICE_NUMBER 195
 #define NVKMS_MINOR_DEVICE_NUMBER 254
 
 #define NVKMS_LOG_PREFIX "nvidia-modeset: "
diff --git a/kernel/nvidia/nv.c b/kernel/nvidia/nv.c
index 15983f6..a7be80a 100644
--- a/kernel/nvidia/nv.c
+++ b/kernel/nvidia/nv.c
@@ -3870,11 +3870,15 @@ nvidia_probe
 
     pci_set_master(dev);
 
 #if defined(CONFIG_VGA_ARB) && !defined(NVCPU_PPC64LE)
 #if defined(VGA_DEFAULT_DEVICE)
+#if defined(NV_VGA_TRYGET_PRESENT)
     vga_tryget(VGA_DEFAULT_DEVICE, VGA_RSRC_LEGACY_MASK);
+#else
+    vga_get(VGA_DEFAULT_DEVICE, VGA_RSRC_LEGACY_MASK, 0);
+#endif
 #endif
     vga_set_legacy_decoding(dev, VGA_RSRC_NONE);
 #endif
 
     if (rm_get_cpu_type(sp, &nv_cpu_type) != NV_OK)