Go to:
Gentoo Home
Documentation
Forums
Lists
Bugs
Planet
Store
Wiki
Get Gentoo!
Gentoo's Bugzilla – Attachment 553466 Details for
Bug 650482
x11-drivers/nvidia-drivers-390.42 has an outdated pax_kernel patch
Home
|
New
–
[Ex]
|
Browse
|
Search
|
Privacy Policy
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Pax patch ported to nvidia-drivers-396.54
nvidia-drivers-396.54-pax.patch (text/plain), 14.73 KB, created by
Miroslaw Mieszczak
on 2018-10-28 09:04:15 UTC
(
hide
)
Description:
Pax patch ported to nvidia-drivers-396.54
Filename:
MIME Type:
Creator:
Miroslaw Mieszczak
Created:
2018-10-28 09:04:15 UTC
Size:
14.73 KB
patch
obsolete
>diff -u -r work.orig/kernel/common/inc/nv-linux.h work/kernel/common/inc/nv-linux.h >--- work.orig/kernel/common/inc/nv-linux.h 2018-08-15 09:44:28.000000000 +0200 >+++ work/kernel/common/inc/nv-linux.h 2018-10-28 00:40:56.613295982 +0200 >@@ -1114,7 +1114,8 @@ > #if (NV_KMEM_CACHE_CREATE_ARGUMENT_COUNT == 5) > #define NV_KMEM_CACHE_CREATE_FULL(name, size, align, flags, ctor) \ > kmem_cache_create(name, size, align, flags, ctor) >- >+#define NV_KMEM_CACHE_CREATE_FULL_USERCOPY(name, size, align, flags, useroffset, usersize, ctor) \ >+ kmem_cache_create_usercopy(name, size, align, flags, useroffset, usersize, ctor) > #else > #define NV_KMEM_CACHE_CREATE_FULL(name, size, align, flags, ctor) \ > kmem_cache_create(name, size, align, flags, ctor, NULL) >@@ -1123,6 +1124,14 @@ > #define NV_KMEM_CACHE_CREATE(name, type) \ > NV_KMEM_CACHE_CREATE_FULL(name, sizeof(type), 0, 0, NULL) > >+#ifdef SLAB_USERCOPY >+#define NV_KMEM_CACHE_CREATE_USERCOPY(name, type) \ >+ NV_KMEM_CACHE_CREATE_FULL(name, sizeof(type), 0, SLAB_USERCOPY, NULL) >+#else >+#define NV_KMEM_CACHE_CREATE_USERCOPY(name, type) \ >+ NV_KMEM_CACHE_CREATE_FULL_USERCOPY(name, sizeof(type), 0, 0, 0, sizeof(type), NULL) >+#endif >+ > #define NV_KMEM_CACHE_DESTROY(kmem_cache) \ > kmem_cache_destroy(kmem_cache) > >Tylko w work/kernel/common/inc: nv-linux.h.orig >diff -u -r work.orig/kernel/common/inc/nv-modeset-interface.h work/kernel/common/inc/nv-modeset-interface.h >--- work.orig/kernel/common/inc/nv-modeset-interface.h 2018-08-15 09:44:28.000000000 +0200 >+++ work/kernel/common/inc/nv-modeset-interface.h 2018-10-28 00:40:56.613295982 +0200 >@@ -72,7 +72,7 @@ > * mix nvidia and nvidia-modeset kernel modules from different > * releases. > */ >- const char *version_string; >+// const char *version_string; > > /* > * Return system information. >@@ -115,8 +115,8 @@ > > int (*set_callbacks)(const nvidia_modeset_callbacks_t *cb); > >-} nvidia_modeset_rm_ops_t; >+} __do_const nvidia_modeset_rm_ops_t; > >-NV_STATUS nvidia_get_rm_ops(nvidia_modeset_rm_ops_t *rm_ops); >+NV_STATUS nvidia_get_rm_ops(const nvidia_modeset_rm_ops_t **rm_ops, const char **version_string); > > #endif /* _NV_MODESET_INTERFACE_H_ */ >diff -u -r work.orig/kernel/common/inc/nv-register-module.h work/kernel/common/inc/nv-register-module.h >--- work.orig/kernel/common/inc/nv-register-module.h 2018-08-15 09:44:29.000000000 +0200 >+++ work/kernel/common/inc/nv-register-module.h 2018-10-28 00:40:56.613295982 +0200 >@@ -34,7 +34,7 @@ > int (*ioctl)(struct inode *, struct file * file, unsigned int cmd, unsigned long arg); > unsigned int (*poll)(struct file * file, poll_table *wait); > >-} nvidia_module_t; >+} __do_const nvidia_module_t; > > int nvidia_register_module(nvidia_module_t *); > int nvidia_unregister_module(nvidia_module_t *); >diff -u -r work.orig/kernel/nvidia/nv.c work/kernel/nvidia/nv.c >--- work.orig/kernel/nvidia/nv.c 2018-08-15 09:44:27.000000000 +0200 >+++ work/kernel/nvidia/nv.c 2018-10-28 00:40:56.613295982 +0200 >@@ -798,7 +798,7 @@ > > nv_memdbg_init(); > >- nvidia_stack_t_cache = NV_KMEM_CACHE_CREATE(nvidia_stack_cache_name, >+ nvidia_stack_t_cache = NV_KMEM_CACHE_CREATE_USERCOPY(nvidia_stack_cache_name, > nvidia_stack_t); > if (nvidia_stack_t_cache == NULL) > { >diff -u -r work.orig/kernel/nvidia/nv-chrdev.c work/kernel/nvidia/nv-chrdev.c >--- work.orig/kernel/nvidia/nv-chrdev.c 2018-08-15 09:44:28.000000000 +0200 >+++ work/kernel/nvidia/nv-chrdev.c 2018-10-28 00:40:56.613295982 +0200 >@@ -20,8 +20,6 @@ > { > nvidia_module_t *module = (nvidia_module_t *)param; > >- module->instance = nv_module_instance; >- > return (nvidia_register_module(module)); > } > >Tylko w work/kernel/nvidia: nv.c.orig >diff -u -r work.orig/kernel/nvidia/nv-instance.c work/kernel/nvidia/nv-instance.c >--- work.orig/kernel/nvidia/nv-instance.c 2018-08-15 09:44:29.000000000 +0200 >+++ work/kernel/nvidia/nv-instance.c 2018-10-28 00:40:56.613295982 +0200 >@@ -51,6 +51,7 @@ > nvidia_module_t nv_fops = { > .owner = THIS_MODULE, > .module_name = MODULE_NAME, >+ .instance = MODULE_INSTANCE_NUMBER, > .open = nvidia_open, > .close = nvidia_close, > .ioctl = nvidia_ioctl, >diff -u -r work.orig/kernel/nvidia/nv-mmap.c work/kernel/nvidia/nv-mmap.c >--- work.orig/kernel/nvidia/nv-mmap.c 2018-08-15 09:44:28.000000000 +0200 >+++ work/kernel/nvidia/nv-mmap.c 2018-10-28 00:40:56.614295982 +0200 >@@ -103,12 +103,12 @@ > } > > #if defined(NV_VM_OPERATIONS_STRUCT_HAS_ACCESS) >-static int >+static ssize_t > nvidia_vma_access( > struct vm_area_struct *vma, > unsigned long addr, > void *buffer, >- int length, >+ size_t length, > int write > ) > { >Tylko w work/kernel/nvidia: nv-mmap.c.orig >diff -u -r work.orig/kernel/nvidia/nv-modeset-interface.c work/kernel/nvidia/nv-modeset-interface.c >--- work.orig/kernel/nvidia/nv-modeset-interface.c 2018-08-15 09:44:28.000000000 +0200 >+++ work/kernel/nvidia/nv-modeset-interface.c 2018-10-28 00:40:56.614295982 +0200 >@@ -8,14 +8,14 @@ > * _NVRM_COPYRIGHT_END_ > */ > >-#include "nv-modeset-interface.h" >- > #include "nv-misc.h" > #include "os-interface.h" > #include "nv-linux.h" > #include "nvstatus.h" > #include "nv.h" > >+#include "nv-modeset-interface.h" >+ > static const nvidia_modeset_callbacks_t *nv_modeset_callbacks; > > static int nvidia_modeset_rm_ops_alloc_stack(nvidia_stack_t **sp) >@@ -100,10 +100,9 @@ > return count; > } > >-NV_STATUS nvidia_get_rm_ops(nvidia_modeset_rm_ops_t *rm_ops) >+NV_STATUS nvidia_get_rm_ops(const nvidia_modeset_rm_ops_t **rm_ops, const char **version_string) > { >- const nvidia_modeset_rm_ops_t local_rm_ops = { >- .version_string = NV_VERSION_STRING, >+ static const nvidia_modeset_rm_ops_t local_rm_ops = { > .system_info = { > .allow_write_combining = NV_FALSE, > }, >@@ -116,17 +115,26 @@ > .set_callbacks = nvidia_modeset_set_callbacks, > }; > >- if (strcmp(rm_ops->version_string, NV_VERSION_STRING) != 0) >+ static const nvidia_modeset_rm_ops_t local_rm_ops_wc = { >+ .system_info = { >+ .allow_write_combining = NV_TRUE, >+ }, >+ .alloc_stack = nvidia_modeset_rm_ops_alloc_stack, >+ .free_stack = nvidia_modeset_rm_ops_free_stack, >+ .enumerate_gpus = nvidia_modeset_enumerate_gpus, >+ .open_gpu = nvidia_dev_get, >+ .close_gpu = nvidia_dev_put, >+ .op = rm_kernel_rmapi_op, /* provided by nv-kernel.o */ >+ .set_callbacks = nvidia_modeset_set_callbacks, >+ }; >+ >+ if (strcmp(*version_string, NV_VERSION_STRING) != 0) > { >- rm_ops->version_string = NV_VERSION_STRING; >+ *version_string = NV_VERSION_STRING; > return NV_ERR_GENERIC; > } > >- *rm_ops = local_rm_ops; >- >- if (NV_ALLOW_WRITE_COMBINING(NV_MEMORY_TYPE_FRAMEBUFFER)) { >- rm_ops->system_info.allow_write_combining = NV_TRUE; >- } >+ *rm_ops = NV_ALLOW_WRITE_COMBINING(NV_MEMORY_TYPE_FRAMEBUFFER) ? &local_rm_ops_wc : &local_rm_ops; > > return NV_OK; > } >diff -u -r work.orig/kernel/nvidia-drm/nvidia-drm-drv.c work/kernel/nvidia-drm/nvidia-drm-drv.c >--- work.orig/kernel/nvidia-drm/nvidia-drm-drv.c 2018-08-15 09:44:34.000000000 +0200 >+++ work/kernel/nvidia-drm/nvidia-drm-drv.c 2018-10-28 00:40:56.614295982 +0200 >@@ -594,7 +594,7 @@ static const struct drm_ioctl_desc nv_dr > DRM_CONTROL_ALLOW|DRM_RENDER_ALLOW|DRM_UNLOCKED), > }; > >-static struct drm_driver nv_drm_driver = { >+static drm_driver_no_const nv_drm_driver __read_only = { > > .driver_features = DRIVER_GEM | DRIVER_PRIME | DRIVER_RENDER, > >@@ -731,6 +731,7 @@ > return; > } > >+ pax_open_kernel(); > nv_drm_driver.driver_features |= DRIVER_MODESET | DRIVER_ATOMIC; > > nv_drm_driver.master_set = nv_drm_master_set; >@@ -741,6 +742,7 @@ > nv_drm_driver.dumb_destroy = drm_gem_dumb_destroy; > > nv_drm_driver.gem_vm_ops = &nv_drm_gem_vma_ops; >+ pax_close_kernel(); > #endif /* NV_DRM_ATOMIC_MODESET_AVAILABLE */ > } > >Tylko w work/kernel/nvidia-drm: nvidia-drm-drv.c.orig >diff -u -r work.orig/kernel/nvidia-modeset/nvidia-modeset-linux.c work/kernel/nvidia-modeset/nvidia-modeset-linux.c >--- work.orig/kernel/nvidia-modeset/nvidia-modeset-linux.c 2018-08-15 09:44:33.000000000 +0200 >+++ work/kernel/nvidia-modeset/nvidia-modeset-linux.c 2018-10-28 00:40:56.614295982 +0200 >@@ -337,7 +337,7 @@ > * Interface with resman. > *************************************************************************/ > >-static nvidia_modeset_rm_ops_t __rm_ops = { 0 }; >+static const nvidia_modeset_rm_ops_t *__rm_ops; > static nvidia_modeset_callbacks_t nvkms_rm_callbacks = { > .suspend = nvkms_suspend, > .resume = nvkms_resume >@@ -347,19 +347,18 @@ > { > NV_STATUS nvstatus; > int ret; >+ const char *version_string = NV_VERSION_STRING; > >- __rm_ops.version_string = NV_VERSION_STRING; >- >- nvstatus = nvidia_get_rm_ops(&__rm_ops); >+ nvstatus = nvidia_get_rm_ops(&__rm_ops, &version_string); > > if (nvstatus != NV_OK) { > printk(KERN_ERR NVKMS_LOG_PREFIX "Version mismatch: " > "nvidia.ko(%s) nvidia-modeset.ko(%s)\n", >- __rm_ops.version_string, NV_VERSION_STRING); >+ version_string, NV_VERSION_STRING); > return -EINVAL; > } > >- ret = __rm_ops.set_callbacks(&nvkms_rm_callbacks); >+ ret = __rm_ops->set_callbacks(&nvkms_rm_callbacks); > if (ret < 0) { > printk(KERN_ERR NVKMS_LOG_PREFIX "Failed to register callbacks\n"); > return ret; >@@ -370,20 +369,20 @@ > > static void nvkms_free_rm(void) > { >- __rm_ops.set_callbacks(NULL); >+ __rm_ops->set_callbacks(NULL); > } > > void NVKMS_API_CALL nvkms_call_rm(void *ops) > { > nvidia_modeset_stack_ptr stack = NULL; > >- if (__rm_ops.alloc_stack(&stack) != 0) { >+ if (__rm_ops->alloc_stack(&stack) != 0) { > return; > } > >- __rm_ops.op(stack, ops); >+ __rm_ops->op(stack, ops); > >- __rm_ops.free_stack(stack); >+ __rm_ops->free_stack(stack); > } > > /************************************************************************* >@@ -711,13 +710,13 @@ > nvidia_modeset_stack_ptr stack = NULL; > NvBool ret; > >- if (__rm_ops.alloc_stack(&stack) != 0) { >+ if (__rm_ops->alloc_stack(&stack) != 0) { > return NV_FALSE; > } > >- ret = __rm_ops.open_gpu(gpuId, stack) == 0; >+ ret = __rm_ops->open_gpu(gpuId, stack) == 0; > >- __rm_ops.free_stack(stack); >+ __rm_ops->free_stack(stack); > > return ret; > } >@@ -726,23 +725,23 @@ > { > nvidia_modeset_stack_ptr stack = NULL; > >- if (__rm_ops.alloc_stack(&stack) != 0) { >+ if (__rm_ops->alloc_stack(&stack) != 0) { > return; > } > >- __rm_ops.close_gpu(gpuId, stack); >+ __rm_ops->close_gpu(gpuId, stack); > >- __rm_ops.free_stack(stack); >+ __rm_ops->free_stack(stack); > } > > NvU32 NVKMS_API_CALL nvkms_enumerate_gpus(nv_gpu_info_t *gpu_info) > { >- return __rm_ops.enumerate_gpus(gpu_info); >+ return __rm_ops->enumerate_gpus(gpu_info); > } > > NvBool NVKMS_API_CALL nvkms_allow_write_combining(void) > { >- return __rm_ops.system_info.allow_write_combining; >+ return __rm_ops->system_info.allow_write_combining; > } > > /************************************************************************* >diff -u -r work.orig/kernel/nvidia-uvm/uvm8_global.c work/kernel/nvidia-uvm/uvm8_global.c >--- work.orig/kernel/nvidia-uvm/uvm8_global.c 2018-08-15 09:44:30.000000000 +0200 >+++ work/kernel/nvidia-uvm/uvm8_global.c 2018-10-28 00:40:56.614295982 +0200 >@@ -42,17 +42,17 @@ > "UVM mode by disabling (0) or enabling (1)"); > > uvm_global_t g_uvm_global; >-static struct UvmOpsUvmEvents g_exported_uvm8_ops; >+static struct UvmOpsUvmEvents g_exported_uvm8_ops = { >+ .startDevice = NULL, >+ .stopDevice = NULL, >+ .isrTopHalf = uvm8_isr_top_half, >+}; > static bool g_ops_registered = false; > > static NV_STATUS uvm8_register_callbacks(void) > { > NV_STATUS status = NV_OK; > >- g_exported_uvm8_ops.startDevice = NULL; >- g_exported_uvm8_ops.stopDevice = NULL; >- g_exported_uvm8_ops.isrTopHalf = uvm8_isr_top_half; >- > // Register the UVM callbacks with the main GPU driver: > status = uvm_rm_locked_call(nvUvmInterfaceRegisterUvmCallbacks(&g_exported_uvm8_ops)); > if (status != NV_OK) >Tylko w work/kernel/nvidia-uvm: uvm8_global.c.orig >diff -u -r work.orig/kernel/nvidia-uvm/uvm8_gpu_semaphore.c work/kernel/nvidia-uvm/uvm8_gpu_semaphore.c >--- work.orig/kernel/nvidia-uvm/uvm8_gpu_semaphore.c 2018-08-15 09:44:31.000000000 +0200 >+++ work/kernel/nvidia-uvm/uvm8_gpu_semaphore.c 2018-10-28 00:40:56.615295982 +0200 >@@ -368,7 +368,7 @@ > // being optimized out on non-SMP configs (we need them for interacting with > // the GPU correctly even on non-SMP). > mb(); >- ACCESS_ONCE(*semaphore->payload) = payload; >+ ACCESS_ONCE_RW(*semaphore->payload) = payload; > } > > // This function is intended to catch channels which have been left dangling in >diff -u -r work.orig/kernel/nvidia-uvm/uvm8_hal.h work/kernel/nvidia-uvm/uvm8_hal.h >--- work.orig/kernel/nvidia-uvm/uvm8_hal.h 2018-08-15 09:44:31.000000000 +0200 >+++ work/kernel/nvidia-uvm/uvm8_hal.h 2018-10-28 00:40:56.615295982 +0200 >@@ -455,7 +455,7 @@ > // access_counter_buffer_ops: id is a hardware class > uvm_access_counter_buffer_hal_t access_counter_buffer_ops; > } u; >-} uvm_hal_class_ops_t; >+} __do_const uvm_hal_class_ops_t; > > NV_STATUS uvm_hal_init_table(void); > NV_STATUS uvm_hal_init_gpu(uvm_gpu_t *gpu); >Tylko w work/kernel/nvidia-uvm: uvm8_hal.h.orig >diff -u -r work.orig/kernel/nvidia-uvm/uvm8_mmu.h work/kernel/nvidia-uvm/uvm8_mmu.h >--- work.orig/kernel/nvidia-uvm/uvm8_mmu.h 2018-08-15 09:44:31.000000000 +0200 >+++ work/kernel/nvidia-uvm/uvm8_mmu.h 2018-10-28 00:40:56.615295982 +0200 >@@ -24,7 +24,6 @@ > #ifndef __UVM8_MMU_H__ > #define __UVM8_MMU_H__ > >-#include "uvm8_forward_decl.h" > #include "uvm8_hal_types.h" > #include "uvm8_pmm_gpu.h" > #include "uvmtypes.h" >diff -u -r work.orig/kernel/nvidia-uvm/uvm_common.c work/kernel/nvidia-uvm/uvm_common.c >--- work.orig/kernel/nvidia-uvm/uvm_common.c 2018-08-15 09:44:29.000000000 +0200 >+++ work/kernel/nvidia-uvm/uvm_common.c 2018-10-28 00:40:56.615295982 +0200 >@@ -40,7 +40,6 @@ > #define UVM_SPIN_LOOP_PRINT_TIMEOUT_SEC 30ULL > > static dev_t g_uvmBaseDev; >-struct UvmOpsUvmEvents g_exportedUvmOps; > > static char* uvm_driver_mode = "8"; > >diff -u -r work.orig/kernel/nvidia-uvm/uvm_linux.h work/kernel/nvidia-uvm/uvm_linux.h >--- work.orig/kernel/nvidia-uvm/uvm_linux.h 2018-08-15 09:44:30.000000000 +0200 >+++ work/kernel/nvidia-uvm/uvm_linux.h 2018-10-28 00:40:56.615295982 +0200 >@@ -429,7 +429,7 @@ > > // WRITE_ONCE/READ_ONCE have incompatible definitions across versions, which produces warnings. > // Therefore, we define our own macros >-#define UVM_WRITE_ONCE(x, val) (ACCESS_ONCE(x) = (val)) >+#define UVM_WRITE_ONCE(x, val) (ACCESS_ONCE_RW(x) = (val)) > #define UVM_READ_ONCE(x) ACCESS_ONCE(x) > > // Added in 3.11 >Tylko w work/kernel/nvidia-uvm: uvm_linux.h.orig
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 650482
:
523896
| 553466