parent
a5981c4bf7
commit
eedf7beb21
@ -0,0 +1,595 @@
|
||||
# Calculate format=diff pkg(sys-kernel/calculate-sources)=>5.10,5.11&&merge(x11-drivers/nvidia-drivers)=>390,397
|
||||
diff --git a/kernel/common/inc/nv-linux.h b/kernel/common/inc/nv-linux.h
|
||||
index ac5bb95..79b67bf 100644
|
||||
--- a/kernel/common/inc/nv-linux.h
|
||||
+++ b/kernel/common/inc/nv-linux.h
|
||||
@@ -159,7 +159,7 @@ static inline uid_t __kuid_val(kuid_t uid)
|
||||
}
|
||||
#endif
|
||||
|
||||
-#if defined(NVCPU_X86_64) && !defined(HAVE_COMPAT_IOCTL)
|
||||
+#if defined(NVCPU_X86_64) && !defined(NV_FILE_OPERATIONS_HAS_COMPAT_IOCTL)
|
||||
#include <linux/syscalls.h> /* sys_ioctl() */
|
||||
#include <linux/ioctl32.h> /* register_ioctl32_conversion() */
|
||||
#endif
|
||||
@@ -175,7 +175,14 @@ static inline uid_t __kuid_val(kuid_t uid)
|
||||
|
||||
#if defined(NV_VM_INSERT_PAGE_PRESENT)
|
||||
#include <linux/pagemap.h>
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 16, 0)
|
||||
#include <linux/dma-mapping.h>
|
||||
+#else
|
||||
+#include <linux/dma-direct.h>
|
||||
+#if defined(NV_LINUX_DMA_MAP_OPS_H_PRESENT)
|
||||
+#include <linux/dma-map-ops.h>
|
||||
+#endif
|
||||
+#endif
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_SWIOTLB) && defined(NVCPU_AARCH64)
|
||||
@@ -531,7 +538,11 @@ extern int nv_pat_mode;
|
||||
|
||||
static inline void *nv_vmalloc(unsigned long size)
|
||||
{
|
||||
+#if defined(NV_VMALLOC_HAS_PGPROT_T_ARG)
|
||||
void *ptr = __vmalloc(size, GFP_KERNEL, PAGE_KERNEL);
|
||||
+#else
|
||||
+ void *ptr = __vmalloc(size, GFP_KERNEL);
|
||||
+#endif
|
||||
if (ptr)
|
||||
NV_MEMDBG_ADD(ptr, size);
|
||||
return ptr;
|
||||
diff --git a/kernel/common/inc/nv-mm.h b/kernel/common/inc/nv-mm.h
|
||||
index 1270bf3..a5325fe 100644
|
||||
--- a/kernel/common/inc/nv-mm.h
|
||||
+++ b/kernel/common/inc/nv-mm.h
|
||||
@@ -29,6 +29,10 @@
|
||||
typedef int vm_fault_t;
|
||||
#endif
|
||||
|
||||
+#if defined(NV_MM_HAS_MMAP_LOCK)
|
||||
+#define mmap_sem mmap_lock
|
||||
+#endif
|
||||
+
|
||||
/* get_user_pages
|
||||
*
|
||||
* The 8-argument version of get_user_pages was deprecated by commit
|
||||
@@ -140,9 +144,13 @@ typedef int vm_fault_t;
|
||||
flags |= FOLL_FORCE;
|
||||
|
||||
#if defined(NV_GET_USER_PAGES_REMOTE_HAS_LOCKED_ARG)
|
||||
-
|
||||
+ #if defined (NV_GET_USER_PAGES_REMOTE_HAS_TSK_ARG)
|
||||
return get_user_pages_remote(tsk, mm, start, nr_pages, flags,
|
||||
pages, vmas, NULL);
|
||||
+ #else
|
||||
+ return get_user_pages_remote(mm, start, nr_pages, flags,
|
||||
+ pages, vmas, NULL);
|
||||
+ #endif
|
||||
|
||||
#else
|
||||
|
||||
@@ -155,7 +163,7 @@ typedef int vm_fault_t;
|
||||
#endif
|
||||
#else
|
||||
#if defined(NV_GET_USER_PAGES_HAS_WRITE_AND_FORCE_ARGS)
|
||||
- #define NV_GET_USER_PAGES_REMOTE NV_GET_USER_PAGES
|
||||
+ #define NV_GET_USER_PAGES_REMOTE get_user_pages
|
||||
#else
|
||||
#include <linux/mm.h>
|
||||
#include <linux/sched.h>
|
||||
diff --git a/kernel/conftest.sh b/kernel/conftest.sh
|
||||
index 7da7505..5272f6f 100755
|
||||
--- a/kernel/conftest.sh
|
||||
+++ b/kernel/conftest.sh
|
||||
@@ -134,6 +134,7 @@ test_headers() {
|
||||
FILES="$FILES linux/fence.h"
|
||||
FILES="$FILES linux/ktime.h"
|
||||
FILES="$FILES linux/dma-resv.h"
|
||||
+ FILES="$FILES linux/dma-map-ops.h"
|
||||
|
||||
# Arch specific headers which need testing
|
||||
FILES_ARCH="asm/book3s/64/hash-64k.h"
|
||||
@@ -2045,7 +2046,15 @@ compile_test() {
|
||||
# Determine if the phys_to_dma function is present.
|
||||
#
|
||||
CODE="
|
||||
+ #include <linux/version.h>
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 16, 0)
|
||||
#include <linux/dma-mapping.h>
|
||||
+#else
|
||||
+ #include <linux/dma-direct.h>
|
||||
+#if defined(NV_LINUX_DMA_MAP_OPS_H_PRESENT)
|
||||
+ #include <linux/dma-map-ops.h>
|
||||
+#endif
|
||||
+#endif
|
||||
void conftest_phys_to_dma(void) {
|
||||
phys_to_dma();
|
||||
}"
|
||||
@@ -2059,6 +2068,9 @@ compile_test() {
|
||||
#
|
||||
CODE="
|
||||
#include <linux/dma-mapping.h>
|
||||
+#if defined(NV_LINUX_DMA_MAP_OPS_H_PRESENT)
|
||||
+ #include <linux/dma-map-ops.h>
|
||||
+#endif
|
||||
void conftest_dma_ops(void) {
|
||||
(void)dma_ops;
|
||||
}"
|
||||
@@ -2073,6 +2085,9 @@ compile_test() {
|
||||
#
|
||||
CODE="
|
||||
#include <linux/dma-mapping.h>
|
||||
+#if defined(NV_LINUX_DMA_MAP_OPS_H_PRESENT)
|
||||
+ #include <linux/dma-map-ops.h>
|
||||
+#endif
|
||||
void conftest_dma_ops(void) {
|
||||
(void)swiotlb_dma_ops;
|
||||
}"
|
||||
@@ -2083,22 +2098,28 @@ compile_test() {
|
||||
dma_map_ops)
|
||||
#
|
||||
# Determine if the 'struct dma_map_ops' type is present.
|
||||
- #
|
||||
+ #
|
||||
CODE="
|
||||
#include <linux/dma-mapping.h>
|
||||
+#if defined(NV_LINUX_DMA_MAP_OPS_H_PRESENT)
|
||||
+ #include <linux/dma-map-ops.h>
|
||||
+#endif
|
||||
void conftest_dma_map_ops(void) {
|
||||
struct dma_map_ops ops;
|
||||
}"
|
||||
|
||||
compile_check_conftest "$CODE" "NV_DMA_MAP_OPS_PRESENT" "" "types"
|
||||
;;
|
||||
-
|
||||
+
|
||||
get_dma_ops)
|
||||
#
|
||||
# Determine if the get_dma_ops() function is present.
|
||||
#
|
||||
CODE="
|
||||
#include <linux/dma-mapping.h>
|
||||
+#if defined(NV_LINUX_DMA_MAP_OPS_H_PRESENT)
|
||||
+ #include <linux/dma-map-ops.h>
|
||||
+#endif
|
||||
void conftest_get_dma_ops(void) {
|
||||
get_dma_ops();
|
||||
}"
|
||||
@@ -2112,6 +2133,9 @@ compile_test() {
|
||||
#
|
||||
CODE="
|
||||
#include <linux/dma-mapping.h>
|
||||
+#if defined(NV_LINUX_DMA_MAP_OPS_H_PRESENT)
|
||||
+ #include <linux/dma-map-ops.h>
|
||||
+#endif
|
||||
void conftest_noncoherent_swiotlb_dma_ops(void) {
|
||||
(void)noncoherent_swiotlb_dma_ops;
|
||||
}"
|
||||
@@ -2128,6 +2152,9 @@ compile_test() {
|
||||
#
|
||||
CODE="
|
||||
#include <linux/dma-mapping.h>
|
||||
+#if defined(NV_LINUX_DMA_MAP_OPS_H_PRESENT)
|
||||
+ #include <linux/dma-map-ops.h>
|
||||
+#endif
|
||||
void conftest_dma_map_resource(void) {
|
||||
dma_map_resource();
|
||||
}"
|
||||
@@ -3038,6 +3065,7 @@ compile_test() {
|
||||
|
||||
if [ -f conftest$$.o ]; then
|
||||
echo "#undef NV_GET_USER_PAGES_REMOTE_PRESENT" | append_conftest "functions"
|
||||
+ echo "#undef NV_GET_USER_PAGES_REMOTE_HAS_TSK_ARG" | append_conftest "functions"
|
||||
echo "#undef NV_GET_USER_PAGES_REMOTE_HAS_WRITE_AND_FORCE_ARGS" | append_conftest "functions"
|
||||
echo "#undef NV_GET_USER_PAGES_REMOTE_HAS_LOCKED_ARG" | append_conftest "functions"
|
||||
rm -f conftest$$.o
|
||||
@@ -3065,14 +3093,20 @@ compile_test() {
|
||||
rm -f conftest$$.c
|
||||
|
||||
if [ -f conftest$$.o ]; then
|
||||
+ echo "#define NV_GET_USER_PAGES_REMOTE_HAS_TSK_ARG" | append_conftest "functions"
|
||||
echo "#define NV_GET_USER_PAGES_REMOTE_HAS_WRITE_AND_FORCE_ARGS" | append_conftest "functions"
|
||||
echo "#undef NV_GET_USER_PAGES_REMOTE_HAS_LOCKED_ARG" | append_conftest "functions"
|
||||
rm -f conftest$$.o
|
||||
return
|
||||
fi
|
||||
|
||||
+ echo "#undef NV_GET_USER_PAGES_REMOTE_HAS_WRITE_AND_FORCE_ARGS" | append_conftest "functions"
|
||||
+
|
||||
+ #
|
||||
# conftest #3: check if get_user_pages_remote() has locked argument
|
||||
-
|
||||
+ # Return if these arguments are present. Fall through to conftest #4
|
||||
+ # if these args are absent.
|
||||
+ #
|
||||
echo "$CONFTEST_PREAMBLE
|
||||
#include <linux/mm.h>
|
||||
long get_user_pages_remote(struct task_struct *tsk,
|
||||
@@ -3090,13 +3124,40 @@ compile_test() {
|
||||
rm -f conftest$$.c
|
||||
|
||||
if [ -f conftest$$.o ]; then
|
||||
+ echo "#define NV_GET_USER_PAGES_REMOTE_HAS_TSK_ARG" | append_conftest "functions"
|
||||
+ echo "#define NV_GET_USER_PAGES_REMOTE_HAS_LOCKED_ARG" | append_conftest "functions"
|
||||
+ rm -f conftest$$.o
|
||||
+ return
|
||||
+ fi
|
||||
+
|
||||
+ #
|
||||
+ # conftest #4: check if get_user_pages_remote() does not take
|
||||
+ # 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 "#undef NV_GET_USER_PAGES_REMOTE_HAS_TSK_ARG" | append_conftest "functions"
|
||||
echo "#define NV_GET_USER_PAGES_REMOTE_HAS_LOCKED_ARG" | append_conftest "functions"
|
||||
rm -f conftest$$.o
|
||||
else
|
||||
+
|
||||
+ echo "#define NV_GET_USER_PAGES_REMOTE_HAS_TSK_ARG" | append_conftest "functions"
|
||||
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"
|
||||
-
|
||||
;;
|
||||
|
||||
usleep_range)
|
||||
@@ -3879,6 +3940,9 @@ compile_test() {
|
||||
#
|
||||
CODE="
|
||||
#include <linux/dma-mapping.h>
|
||||
+#if defined(NV_LINUX_DMA_MAP_OPS_H_PRESENT)
|
||||
+ #include <linux/dma-map-ops.h>
|
||||
+#endif
|
||||
void conftest_dma_is_direct(void) {
|
||||
dma_is_direct();
|
||||
}"
|
||||
@@ -4067,6 +4131,44 @@ compile_test() {
|
||||
compile_check_conftest "$CODE" "NV_KTIME_GET_REAL_TS64_PRESENT" "" "functions"
|
||||
;;
|
||||
|
||||
+ vmalloc_has_pgprot_t_arg)
|
||||
+ #
|
||||
+ # Determine if __vmalloc has the 'pgprot' argument.
|
||||
+ #
|
||||
+ # The third argument to __vmalloc, page protection
|
||||
+ # 'pgprot_t prot', was removed by commit 88dca4ca5a93
|
||||
+ # (mm: remove the pgprot argument to __vmalloc)
|
||||
+ # in v5.8-rc1 (2020-06-01).
|
||||
+ CODE="
|
||||
+ #include <linux/vmalloc.h>
|
||||
+
|
||||
+ void conftest_vmalloc_has_pgprot_t_arg(void) {
|
||||
+ pgprot_t prot;
|
||||
+ (void)__vmalloc(0, 0, prot);
|
||||
+ }"
|
||||
+
|
||||
+ compile_check_conftest "$CODE" "NV_VMALLOC_HAS_PGPROT_T_ARG" "" "types"
|
||||
+
|
||||
+ ;;
|
||||
+
|
||||
+ mm_has_mmap_lock)
|
||||
+ #
|
||||
+ # Determine if the 'mm_struct' structure has a 'mmap_lock' field.
|
||||
+ #
|
||||
+ # Kernel commit da1c55f1b272 ("mmap locking API: rename mmap_sem
|
||||
+ # to mmap_lock") replaced the field 'mmap_sem' by 'mmap_lock'
|
||||
+ # in v5.8-rc1 (2020-06-08).
|
||||
+ CODE="
|
||||
+ #include <linux/mm_types.h>
|
||||
+
|
||||
+ int conftest_mm_has_mmap_lock(void) {
|
||||
+ return offsetof(struct mm_struct, mmap_lock);
|
||||
+ }"
|
||||
+
|
||||
+ compile_check_conftest "$CODE" "NV_MM_HAS_MMAP_LOCK" "" "types"
|
||||
+
|
||||
+ ;;
|
||||
+
|
||||
pci_dev_has_skip_bus_pm)
|
||||
#
|
||||
# Determine if skip_bus_pm flag is present in struct pci_dev.
|
||||
@@ -4088,6 +4190,115 @@ compile_test() {
|
||||
compile_check_conftest "$CODE" "NV_PCI_DEV_HAS_SKIP_BUS_PM" "" "types"
|
||||
;;
|
||||
|
||||
+ drm_gem_object_put_unlocked)
|
||||
+ #
|
||||
+ # Determine if the function drm_gem_object_put_unlocked() is present.
|
||||
+ #
|
||||
+ # In v5.9-rc1, commit 2f4dd13d4bb8 ("drm/gem: add
|
||||
+ # drm_gem_object_put helper") removes drm_gem_object_put_unlocked()
|
||||
+ # function and replace its definition by transient macro. Commit
|
||||
+ # ab15d56e27be ("drm: remove transient
|
||||
+ # drm_gem_object_put_unlocked()") finally removes
|
||||
+ # drm_gem_object_put_unlocked() macro.
|
||||
+ #
|
||||
+ 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
|
||||
+ void conftest_drm_gem_object_put_unlocked(void) {
|
||||
+ drm_gem_object_put_unlocked();
|
||||
+ }"
|
||||
+
|
||||
+ compile_check_conftest "$CODE" "NV_DRM_GEM_OBJECT_PUT_UNLOCK_PRESENT" "" "functions"
|
||||
+ ;;
|
||||
+
|
||||
+ drm_display_mode_has_vrefresh)
|
||||
+ #
|
||||
+ # Determine if the 'drm_display_mode' structure has a 'vrefresh'
|
||||
+ # field.
|
||||
+ #
|
||||
+ # Removed by commit 0425662fdf05 ("drm: Nuke mode->vrefresh") in
|
||||
+ # v5.9-rc1.
|
||||
+ #
|
||||
+ CODE="
|
||||
+ #include <drm/drm_modes.h>
|
||||
+
|
||||
+ 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_driver_master_set_has_int_return_type)
|
||||
+ #
|
||||
+ # Determine if drm_driver::master_set() returns integer value
|
||||
+ #
|
||||
+ # Changed to void by commit 907f53200f98 ("drm: vmwgfx: remove
|
||||
+ # drm_driver::master_set() return type") in v5.9-rc1.
|
||||
+ #
|
||||
+ 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_master_set_has_int_return_type(struct drm_driver *drv,
|
||||
+ struct drm_device *dev, struct drm_file *file_priv, bool from_open) {
|
||||
+
|
||||
+ return drv->master_set(dev, file_priv, from_open);
|
||||
+ }"
|
||||
+
|
||||
+ compile_check_conftest "$CODE" "NV_DRM_DRIVER_SET_MASTER_HAS_INT_RETURN_TYPE" "" "types"
|
||||
+ ;;
|
||||
+
|
||||
+ drm_driver_has_gem_free_object)
|
||||
+ #
|
||||
+ # Determine if the 'drm_driver' structure has a 'gem_free_object'
|
||||
+ # function pointer.
|
||||
+ #
|
||||
+ # drm_driver::gem_free_object is removed by commit 1a9458aeb8eb
|
||||
+ # ("drm: remove drm_driver::gem_free_object") in v5.9-rc1.
|
||||
+ #
|
||||
+ 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"
|
||||
+ ;;
|
||||
+
|
||||
+ vga_tryget)
|
||||
+ #
|
||||
+ # Determine if vga_tryget() is present
|
||||
+ #
|
||||
+ # vga_tryget() was removed by commit f369bc3f9096 ("vgaarb: mark
|
||||
+ # vga_tryget static") in v5.9-rc1 (2020-08-01).
|
||||
+ #
|
||||
+ CODE="
|
||||
+ #include <linux/vgaarb.h>
|
||||
+ void conftest_vga_tryget(void) {
|
||||
+ vga_tryget();
|
||||
+ }"
|
||||
+
|
||||
+ compile_check_conftest "$CODE" "NV_VGA_TRYGET_PRESENT" "" "functions"
|
||||
+ ;;
|
||||
esac
|
||||
}
|
||||
|
||||
diff --git a/kernel/nvidia-drm/nvidia-drm-drv.c b/kernel/nvidia-drm/nvidia-drm-drv.c
|
||||
index 17e377d..85d9798 100644
|
||||
--- a/kernel/nvidia-drm/nvidia-drm-drv.c
|
||||
+++ b/kernel/nvidia-drm/nvidia-drm-drv.c
|
||||
@@ -466,8 +466,8 @@ static void nv_drm_unload(struct drm_device *dev)
|
||||
|
||||
#if defined(NV_DRM_ATOMIC_MODESET_AVAILABLE)
|
||||
|
||||
-static int nv_drm_master_set(struct drm_device *dev,
|
||||
- struct drm_file *file_priv, bool from_open)
|
||||
+static int __nv_drm_master_set(struct drm_device *dev,
|
||||
+ struct drm_file *file_priv, bool from_open)
|
||||
{
|
||||
struct nv_drm_device *nv_dev = to_nv_device(dev);
|
||||
|
||||
@@ -478,6 +478,22 @@ static int nv_drm_master_set(struct drm_device *dev,
|
||||
return 0;
|
||||
}
|
||||
|
||||
+#include <linux/version.h>
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 9, 0)
|
||||
+static int nv_drm_master_set(struct drm_device *dev,
|
||||
+ struct drm_file *file_priv, bool from_open)
|
||||
+{
|
||||
+ return __nv_drm_master_set(dev, file_priv, from_open);
|
||||
+}
|
||||
+#else
|
||||
+static void nv_drm_master_set(struct drm_device *dev,
|
||||
+ struct drm_file *file_priv, bool from_open)
|
||||
+{
|
||||
+ WARN_ON(__nv_drm_master_set(dev, file_priv, from_open) != 0);
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
+
|
||||
#if defined(NV_DRM_MASTER_DROP_HAS_FROM_RELEASE_ARG)
|
||||
static
|
||||
void nv_drm_master_drop(struct drm_device *dev,
|
||||
@@ -677,7 +693,9 @@ static struct drm_driver nv_drm_driver = {
|
||||
#endif
|
||||
DRIVER_GEM | DRIVER_RENDER,
|
||||
|
||||
+#if defined(NV_DRM_DRIVER_HAS_GEM_FREE_OBJECT)
|
||||
.gem_free_object = nv_drm_gem_free,
|
||||
+#endif
|
||||
|
||||
.ioctls = nv_drm_ioctls,
|
||||
.num_ioctls = ARRAY_SIZE(nv_drm_ioctls),
|
||||
diff --git a/kernel/nvidia-drm/nvidia-drm-gem-user-memory.c b/kernel/nvidia-drm/nvidia-drm-gem-user-memory.c
|
||||
index 76dedba..92a5192 100644
|
||||
--- a/kernel/nvidia-drm/nvidia-drm-gem-user-memory.c
|
||||
+++ b/kernel/nvidia-drm/nvidia-drm-gem-user-memory.c
|
||||
@@ -20,6 +20,7 @@
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
+#include <linux/version.h>
|
||||
#include "nvidia-drm-conftest.h"
|
||||
|
||||
#if defined(NV_DRM_AVAILABLE)
|
||||
@@ -47,8 +48,13 @@ static struct sg_table *__nv_drm_gem_user_memory_prime_get_sg_table(
|
||||
{
|
||||
struct nv_drm_gem_user_memory *nv_user_memory = to_nv_user_memory(nv_gem);
|
||||
|
||||
- return drm_prime_pages_to_sg(nv_user_memory->pages,
|
||||
- nv_user_memory->pages_count);
|
||||
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 10, 0))
|
||||
+ return drm_prime_pages_to_sg(nv_gem->nv_dev->dev, nv_user_memory->pages,
|
||||
+ nv_user_memory->pages_count);
|
||||
+#else
|
||||
+ return drm_prime_pages_to_sg(nv_user_memory->pages,
|
||||
+ nv_user_memory->pages_count);
|
||||
+#endif
|
||||
}
|
||||
|
||||
static void *__nv_drm_gem_user_memory_prime_vmap(
|
||||
diff --git a/kernel/nvidia-drm/nvidia-drm-gem.h b/kernel/nvidia-drm/nvidia-drm-gem.h
|
||||
index 5691a7a..18c50ca 100644
|
||||
--- a/kernel/nvidia-drm/nvidia-drm-gem.h
|
||||
+++ b/kernel/nvidia-drm/nvidia-drm-gem.h
|
||||
@@ -87,7 +87,13 @@ 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_UNLOCK_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
|
||||
diff --git a/kernel/nvidia-drm/nvidia-drm-utils.c b/kernel/nvidia-drm/nvidia-drm-utils.c
|
||||
index 8cb2d5e..e30b2b6 100644
|
||||
--- a/kernel/nvidia-drm/nvidia-drm-utils.c
|
||||
+++ b/kernel/nvidia-drm/nvidia-drm-utils.c
|
||||
@@ -103,7 +103,9 @@ 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 */
|
||||
|
||||
@@ -189,7 +191,11 @@ 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;
|
||||
+#else
|
||||
+ dst->timings.refreshRate = drm_mode_vrefresh(src) * 1000;
|
||||
+#endif
|
||||
|
||||
dst->timings.pixelClockHz = src->clock * 1000; /* In Hz */
|
||||
|
||||
diff --git a/kernel/nvidia-uvm/uvm8_tools.c b/kernel/nvidia-uvm/uvm8_tools.c
|
||||
index 86dbb77..63d0b64 100644
|
||||
--- a/kernel/nvidia-uvm/uvm8_tools.c
|
||||
+++ b/kernel/nvidia-uvm/uvm8_tools.c
|
||||
@@ -190,7 +190,6 @@ static uvm_tools_event_tracker_t *tools_event_tracker(struct file *filp)
|
||||
{
|
||||
long event_tracker = atomic_long_read((atomic_long_t *)&filp->private_data);
|
||||
|
||||
- smp_read_barrier_depends();
|
||||
return (uvm_tools_event_tracker_t *)event_tracker;
|
||||
}
|
||||
|
||||
diff --git a/kernel/nvidia-uvm/uvm8_va_range.h b/kernel/nvidia-uvm/uvm8_va_range.h
|
||||
index 8cae357..6166cc8 100644
|
||||
--- a/kernel/nvidia-uvm/uvm8_va_range.h
|
||||
+++ b/kernel/nvidia-uvm/uvm8_va_range.h
|
||||
@@ -717,7 +717,6 @@ static uvm_va_block_t *uvm_va_range_block(uvm_va_range_t *va_range, size_t index
|
||||
// make sure that any initialization of this block by the creating thread is
|
||||
// visible to later accesses in this thread, which requires a data
|
||||
// dependency barrier.
|
||||
- smp_read_barrier_depends();
|
||||
return block;
|
||||
}
|
||||
|
||||
diff --git a/kernel/nvidia/nv.c b/kernel/nvidia/nv.c
|
||||
index 15983f6..cfb2375 100644
|
||||
--- a/kernel/nvidia/nv.c
|
||||
+++ b/kernel/nvidia/nv.c
|
||||
@@ -3872,7 +3872,9 @@ nvidia_probe
|
||||
|
||||
#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);
|
||||
+#endif
|
||||
#endif
|
||||
vga_set_legacy_decoding(dev, VGA_RSRC_NONE);
|
||||
#endif
|
||||
diff --git a/kernel/nvidia/nvidia.Kbuild b/kernel/nvidia/nvidia.Kbuild
|
||||
index 63e369f..656db7b 100644
|
||||
--- a/kernel/nvidia/nvidia.Kbuild
|
||||
+++ b/kernel/nvidia/nvidia.Kbuild
|
||||
@@ -192,7 +192,9 @@ NV_CONFTEST_TYPE_COMPILE_TESTS += iterate_dir
|
||||
NV_CONFTEST_TYPE_COMPILE_TESTS += kstrtoull
|
||||
NV_CONFTEST_TYPE_COMPILE_TESTS += backlight_properties_type
|
||||
NV_CONFTEST_TYPE_COMPILE_TESTS += proc_ops
|
||||
+NV_CONFTEST_TYPE_COMPILE_TESTS += vmalloc_has_pgprot_t_arg
|
||||
NV_CONFTEST_TYPE_COMPILE_TESTS += timeval
|
||||
+NV_CONFTEST_TYPE_COMPILE_TESTS += mm_has_mmap_lock
|
||||
NV_CONFTEST_TYPE_COMPILE_TESTS += kmem_cache_has_kobj_remove_work
|
||||
NV_CONFTEST_TYPE_COMPILE_TESTS += sysfs_slab_unlink
|
||||
NV_CONFTEST_TYPE_COMPILE_TESTS += pci_dev_has_skip_bus_pm
|
@ -0,0 +1,14 @@
|
||||
# Calculate format=diff pkg(sys-kernel/calculate-sources)=>5.10,5.11&&merge(x11-drivers/nvidia-drivers[-uvm])=>390,397
|
||||
diff --git a/kernel/Makefile b/kernel/Makefile
|
||||
index 23f630c..e354b74 100644
|
||||
--- a/kernel/Makefile
|
||||
+++ b/kernel/Makefile
|
||||
@@ -59,7 +59,7 @@ else
|
||||
)
|
||||
endif
|
||||
|
||||
- NV_KERNEL_MODULES ?= $(wildcard nvidia nvidia-uvm nvidia-modeset nvidia-drm nvidia-vgpu-vfio)
|
||||
+ NV_KERNEL_MODULES ?= $(wildcard nvidia nvidia-modeset nvidia-drm nvidia-vgpu-vfio)
|
||||
NV_KERNEL_MODULES := $(filter-out $(NV_EXCLUDE_KERNEL_MODULES), \
|
||||
$(NV_KERNEL_MODULES))
|
||||
NV_VERBOSE ?=
|
Loading…
Reference in new issue