Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 685346 | Differences between
and this patch

Collapse All | Expand All

(-)file_not_specified_in_diff (-28 / +78 lines)
Line  Link Here
0
-- a/kernel/common/inc/nv-linux.h
0
++ b/kernel/common/inc/nv-linux.h
Lines 1082-1087 Link Here
1082
1082
1083
#define NV_PAGE_MASK    (NvU64)(long)PAGE_MASK
1083
#define NV_PAGE_MASK    (NvU64)(long)PAGE_MASK
1084
1084
1085
#ifndef NV_VMF_INSERT_PFN_PRESENT
1086
typedef int vm_fault_t;
1087
#endif
1088
1085
extern void *nvidia_stack_t_cache;
1089
extern void *nvidia_stack_t_cache;
1086
1090
1087
// Changed in 2.6.23 via commit 20c2df83d25c6a95affe6157a4c9cac4cf5ffaac
1091
// Changed in 2.6.23 via commit 20c2df83d25c6a95affe6157a4c9cac4cf5ffaac
1088
-- a/kernel/common/inc/nv-list-helpers.h
1092
++ b/kernel/common/inc/nv-list-helpers.h
Lines 91-100 Link Here
91
        list_entry((pos)->member.next, typeof(*(pos)), member)
91
        list_entry((pos)->member.next, typeof(*(pos)), member)
92
#endif
92
#endif
93
93
94
static inline int list_is_first(const struct list_head *list,
94
#if !defined(NV_LIST_IS_FIRST_PRESENT)
95
                                const struct list_head *head)
95
    static inline int list_is_first(const struct list_head *list,
96
{
96
                                    const struct list_head *head)
97
    return list->prev == head;
97
    {
98
}
98
        return list->prev == head;
99
    }
100
#endif
99
101
100
#endif // __NV_LIST_HELPERS_H__
102
#endif // __NV_LIST_HELPERS_H__
101
-- a/kernel/conftest.sh
103
++ b/kernel/conftest.sh
Lines 106-111 Link Here
106
    FILES="$FILES drm/drm_atomic_uapi.h"
106
    FILES="$FILES drm/drm_atomic_uapi.h"
107
    FILES="$FILES drm/drm_drv.h"
107
    FILES="$FILES drm/drm_drv.h"
108
    FILES="$FILES drm/drm_framebuffer.h"
108
    FILES="$FILES drm/drm_framebuffer.h"
109
    FILES="$FILES drm/drm_probe_helper.h"
109
    FILES="$FILES generated/autoconf.h"
110
    FILES="$FILES generated/autoconf.h"
110
    FILES="$FILES generated/compile.h"
111
    FILES="$FILES generated/compile.h"
111
    FILES="$FILES generated/utsrelease.h"
112
    FILES="$FILES generated/utsrelease.h"
Lines 407-412 Link Here
407
            compile_check_conftest "$CODE" "NV_SET_MEMORY_ARRAY_UC_PRESENT" "" "functions"
408
            compile_check_conftest "$CODE" "NV_SET_MEMORY_ARRAY_UC_PRESENT" "" "functions"
408
        ;;
409
        ;;
409
410
411
        list_is_first)
412
            #
413
            # Determine if the list_is_first() function is present.
414
            #
415
            # Added by commit 0d29c2d43753 ("mm, compaction: Use free lists to quickly
416
            # locate a migration source -fix") in linux-next tree
417
            #
418
            CODE="
419
            #include <linux/list.h> 
420
            void conftest_list_is_first(void) {
421
                list_is_first();
422
            }"
423
424
            compile_check_conftest "$CODE" "NV_LIST_IS_FIRST_PRESENT" "" "functions"
425
        ;;
426
410
        set_pages_uc)
427
        set_pages_uc)
411
            #
428
            #
412
            # Determine if the set_pages_uc() function is present.
429
            # Determine if the set_pages_uc() function is present.
413
-- a/kernel/nvidia/nvidia.Kbuild
430
++ b/kernel/nvidia/nvidia.Kbuild
Lines 102-107 Link Here
102
NV_CONFTEST_FUNCTION_COMPILE_TESTS += follow_pfn
102
NV_CONFTEST_FUNCTION_COMPILE_TESTS += follow_pfn
103
NV_CONFTEST_FUNCTION_COMPILE_TESTS += vmap
103
NV_CONFTEST_FUNCTION_COMPILE_TESTS += vmap
104
NV_CONFTEST_FUNCTION_COMPILE_TESTS += set_pages_uc
104
NV_CONFTEST_FUNCTION_COMPILE_TESTS += set_pages_uc
105
NV_CONFTEST_FUNCTION_COMPILE_TESTS += list_is_first
105
NV_CONFTEST_FUNCTION_COMPILE_TESTS += set_memory_uc
106
NV_CONFTEST_FUNCTION_COMPILE_TESTS += set_memory_uc
106
NV_CONFTEST_FUNCTION_COMPILE_TESTS += set_memory_array_uc
107
NV_CONFTEST_FUNCTION_COMPILE_TESTS += set_memory_array_uc
107
NV_CONFTEST_FUNCTION_COMPILE_TESTS += change_page_attr
108
NV_CONFTEST_FUNCTION_COMPILE_TESTS += change_page_attr
108
-- a/kernel/nvidia-drm/nvidia-drm-connector.c
109
++ b/kernel/nvidia-drm/nvidia-drm-connector.c
Lines 30-35 Link Here
30
#include "nvidia-drm-utils.h"
30
#include "nvidia-drm-utils.h"
31
#include "nvidia-drm-encoder.h"
31
#include "nvidia-drm-encoder.h"
32
32
33
/*
34
 * Commit fcd70cd36b9b ("drm: Split out drm_probe_helper.h")
35
 * moves a number of helper function definitions from
36
 * drm/drm_crtc_helper.h to a new drm_probe_helper.h.
37
 */
38
#if defined(NV_DRM_DRM_PROBE_HELPER_H_PRESENT)
39
#include <drm/drm_probe_helper.h>
40
#endif
33
#include <drm/drm_crtc_helper.h>
41
#include <drm/drm_crtc_helper.h>
34
42
35
#include <drm/drm_atomic.h>
43
#include <drm/drm_atomic.h>
36
-- a/kernel/nvidia-drm/nvidia-drm-drv.c
44
++ b/kernel/nvidia-drm/nvidia-drm-drv.c
Lines 41-46 Link Here
41
41
42
#include <drm/drmP.h>
42
#include <drm/drmP.h>
43
43
44
/*
45
 * Commit fcd70cd36b9b ("drm: Split out drm_probe_helper.h")
46
 * moves a number of helper function definitions from
47
 * drm/drm_crtc_helper.h to a new drm_probe_helper.h.
48
 */
49
#if defined(NV_DRM_DRM_PROBE_HELPER_H_PRESENT)
50
#include <drm/drm_probe_helper.h>
51
#endif
44
#include <drm/drm_crtc_helper.h>
52
#include <drm/drm_crtc_helper.h>
45
53
46
#if defined(NV_DRM_DRM_GEM_H_PRESENT)
54
#if defined(NV_DRM_DRM_GEM_H_PRESENT)
47
-- a/kernel/nvidia-drm/nvidia-drm-encoder.c
55
++ b/kernel/nvidia-drm/nvidia-drm-encoder.c
Lines 31-36 Link Here
31
#include "nvidia-drm-crtc.h"
31
#include "nvidia-drm-crtc.h"
32
#include "nvidia-drm-helper.h"
32
#include "nvidia-drm-helper.h"
33
33
34
/*
35
 * Commit fcd70cd36b9b ("drm: Split out drm_probe_helper.h")
36
 * moves a number of helper function definitions from
37
 * drm/drm_crtc_helper.h to a new drm_probe_helper.h.
38
 */
39
#if defined(NV_DRM_DRM_PROBE_HELPER_H_PRESENT)
40
#include <drm/drm_probe_helper.h>
41
#endif
34
#include <drm/drm_crtc_helper.h>
42
#include <drm/drm_crtc_helper.h>
35
43
36
#include <drm/drm_atomic.h>
44
#include <drm/drm_atomic.h>
37
-- a/kernel/nvidia-drm/nvidia-drm-gem-nvkms-memory.c
45
++ b/kernel/nvidia-drm/nvidia-drm-gem-nvkms-memory.c
Lines 24-29 Link Here
24
24
25
#if defined(NV_DRM_ATOMIC_MODESET_AVAILABLE)
25
#if defined(NV_DRM_ATOMIC_MODESET_AVAILABLE)
26
26
27
#include "nv-linux.h"
27
#include "nvidia-drm-gem-nvkms-memory.h"
28
#include "nvidia-drm-gem-nvkms-memory.h"
28
#include "nvidia-drm-ioctl.h"
29
#include "nvidia-drm-ioctl.h"
29
30
Lines 222-228 Link Here
222
223
223
/* XXX Move these vma operations to os layer */
224
/* XXX Move these vma operations to os layer */
224
225
225
static int __nv_drm_vma_fault(struct vm_area_struct *vma,
226
static vm_fault_t __nv_drm_vma_fault(struct vm_area_struct *vma,
226
                              struct vm_fault *vmf)
227
                              struct vm_fault *vmf)
227
{
228
{
228
    unsigned long address = nv_page_fault_va(vmf);
229
    unsigned long address = nv_page_fault_va(vmf);
Lines 230-236 Link Here
230
    struct nv_drm_gem_nvkms_memory *nv_nvkms_memory = to_nv_nvkms_memory(
231
    struct nv_drm_gem_nvkms_memory *nv_nvkms_memory = to_nv_nvkms_memory(
231
        to_nv_gem_object(gem));
232
        to_nv_gem_object(gem));
232
    unsigned long page_offset, pfn;
233
    unsigned long page_offset, pfn;
233
    int ret = -EINVAL;
234
    vm_fault_t ret;
234
235
235
    pfn = (unsigned long)(uintptr_t)nv_nvkms_memory->pPhysicalAddress;
236
    pfn = (unsigned long)(uintptr_t)nv_nvkms_memory->pPhysicalAddress;
236
    pfn >>= PAGE_SHIFT;
237
    pfn >>= PAGE_SHIFT;
Lines 238-245 Link Here
238
    page_offset = vmf->pgoff - drm_vma_node_start(&gem->vma_node);
239
    page_offset = vmf->pgoff - drm_vma_node_start(&gem->vma_node);
239
240
240
#if defined(NV_VMF_INSERT_PFN_PRESENT)
241
#if defined(NV_VMF_INSERT_PFN_PRESENT)
241
    (void)ret;
242
    ret = vmf_insert_pfn(vma, address, pfn + page_offset);
242
    return vmf_insert_pfn(vma, address, pfn + page_offset);
243
#else
243
#else
244
    ret = vm_insert_pfn(vma, address, pfn + page_offset);
244
    ret = vm_insert_pfn(vma, address, pfn + page_offset);
245
245
Lines 250-265 Link Here
250
             * EBUSY indicates that another thread already handled
250
             * EBUSY indicates that another thread already handled
251
             * the faulted range.
251
             * the faulted range.
252
             */
252
             */
253
            return VM_FAULT_NOPAGE;
253
            ret = VM_FAULT_NOPAGE;
254
            break;
254
        case -ENOMEM:
255
        case -ENOMEM:
255
            return VM_FAULT_OOM;
256
            ret = VM_FAULT_OOM;
257
            break;
256
        default:
258
        default:
257
            WARN_ONCE(1, "Unhandled error in %s: %d\n", __FUNCTION__, ret);
259
            WARN_ONCE(1, "Unhandled error in %s: %d\n", __FUNCTION__, ret);
260
            ret = VM_FAULT_SIGBUS;
258
            break;
261
            break;
259
    }
262
    }
260
261
    return VM_FAULT_SIGBUS;
262
#endif
263
#endif
264
    return ret;
263
}
265
}
264
266
265
/*
267
/*
Lines 268-279 Link Here
268
 */
270
 */
269
271
270
#if defined(NV_VM_OPS_FAULT_REMOVED_VMA_ARG)
272
#if defined(NV_VM_OPS_FAULT_REMOVED_VMA_ARG)
271
static int nv_drm_vma_fault(struct vm_fault *vmf)
273
static vm_fault_t nv_drm_vma_fault(struct vm_fault *vmf)
272
{
274
{
273
    return __nv_drm_vma_fault(vmf->vma, vmf);
275
    return __nv_drm_vma_fault(vmf->vma, vmf);
274
}
276
}
275
#else
277
#else
276
static int nv_drm_vma_fault(struct vm_area_struct *vma,
278
static vm_fault_t nv_drm_vma_fault(struct vm_area_struct *vma,
277
                                struct vm_fault *vmf)
279
                                struct vm_fault *vmf)
278
{
280
{
279
    return __nv_drm_vma_fault(vma, vmf);
281
    return __nv_drm_vma_fault(vma, vmf);
280
-- a/kernel/nvidia-uvm/uvm8.c
282
++ b/kernel/nvidia-uvm/uvm8.c
Lines 166-178 Link Here
166
// If a fault handler is not set, paths like handle_pte_fault in older kernels
166
// If a fault handler is not set, paths like handle_pte_fault in older kernels
167
// assume the memory is anonymous. That would make debugging this failure harder
167
// assume the memory is anonymous. That would make debugging this failure harder
168
// so we force it to fail instead.
168
// so we force it to fail instead.
169
static int uvm_vm_fault_sigbus(struct vm_area_struct *vma, struct vm_fault *vmf)
169
static vm_fault_t uvm_vm_fault_sigbus(struct vm_area_struct *vma, struct vm_fault *vmf)
170
{
170
{
171
    UVM_DBG_PRINT_RL("Fault to address 0x%lx in disabled vma\n", nv_page_fault_va(vmf));
171
    UVM_DBG_PRINT_RL("Fault to address 0x%lx in disabled vma\n", nv_page_fault_va(vmf));
172
    return VM_FAULT_SIGBUS;
172
    return VM_FAULT_SIGBUS;
173
}
173
}
174
174
175
static int uvm_vm_fault_sigbus_wrapper(struct vm_fault *vmf)
175
static vm_fault_t uvm_vm_fault_sigbus_wrapper(struct vm_fault *vmf)
176
{
176
{
177
#if defined(NV_VM_OPS_FAULT_REMOVED_VMA_ARG)
177
#if defined(NV_VM_OPS_FAULT_REMOVED_VMA_ARG)
178
    return uvm_vm_fault_sigbus(vmf->vma, vmf);
178
    return uvm_vm_fault_sigbus(vmf->vma, vmf);
Lines 390-396 Link Here
390
        uvm_record_unlock_mmap_sem_write(&current->mm->mmap_sem);
390
        uvm_record_unlock_mmap_sem_write(&current->mm->mmap_sem);
391
}
391
}
392
392
393
static int uvm_vm_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
393
static vm_fault_t uvm_vm_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
394
{
394
{
395
    uvm_va_space_t *va_space = uvm_va_space_get(vma->vm_file);
395
    uvm_va_space_t *va_space = uvm_va_space_get(vma->vm_file);
396
    uvm_va_block_t *va_block;
396
    uvm_va_block_t *va_block;
Lines 507-513 Link Here
507
    }
507
    }
508
}
508
}
509
509
510
static int uvm_vm_fault_wrapper(struct vm_fault *vmf)
510
static vm_fault_t uvm_vm_fault_wrapper(struct vm_fault *vmf)
511
{
511
{
512
#if defined(NV_VM_OPS_FAULT_REMOVED_VMA_ARG)
512
#if defined(NV_VM_OPS_FAULT_REMOVED_VMA_ARG)
513
    return uvm_vm_fault(vmf->vma, vmf);
513
    return uvm_vm_fault(vmf->vma, vmf);

Return to bug 685346