]>
Commit | Line | Data |
---|---|---|
105dfaf5 JR |
1 | --- kernel/nv-vtophys.c 2016-12-09 20:30:08.000000000 +0100 |
2 | +++ kernel/nv-vtophys.c 2017-05-10 10:05:28.452722808 +0200 | |
3 | @@ -25,6 +25,9 @@ NvU64 nv_get_phys_address( | |
4 | #else | |
5 | struct mm_struct *mm; | |
6 | pgd_t *pgd = NULL; | |
7 | +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0) | |
8 | + p4d_t *p4d = NULL; | |
9 | +#endif | |
10 | pmd_t *pmd = NULL; | |
11 | pte_t *pte = NULL; | |
12 | NvU64 retval; | |
13 | @@ -41,7 +42,11 @@ NvU64 nv_get_phys_address( | |
14 | if (!NV_PGD_PRESENT(pgd)) | |
15 | goto failed; | |
16 | ||
17 | +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0) | |
18 | + pmd = NV_PMD_OFFSET(address, p4d); | |
19 | +#else | |
20 | pmd = NV_PMD_OFFSET(address, pgd); | |
21 | +#endif | |
22 | if (!NV_PMD_PRESENT(pmd)) | |
23 | goto failed; | |
24 | ||
25 | --- kernel/nv-linux.h 2017-05-10 09:19:05.820789291 +0200 | |
26 | +++ kernel/nv-linux.h 2017-05-10 10:05:57.656844602 +0200 | |
27 | @@ -1389,11 +1389,16 @@ typedef void irqreturn_t; | |
28 | #define NV_PMD_UNMAP(pmd) pmd_unmap(pmd); | |
29 | #else | |
30 | #if defined(PUD_SHIFT) /* 4-level pgtable */ | |
31 | +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0) | |
32 | +#define _PGD_P4D p4d | |
33 | +#else | |
34 | +#define _PGD_P4D pgd | |
35 | +#endif | |
36 | -#define NV_PMD_OFFSET(address, pgd) \ | |
37 | +#define NV_PMD_OFFSET(address, _PGD_P4D) \ | |
38 | ({ \ | |
39 | pmd_t *__pmd = NULL; \ | |
40 | pud_t *__pud; \ | |
41 | - __pud = pud_offset(pgd, address); \ | |
42 | + __pud = pud_offset(_PGD_P4D, address); \ | |
43 | if ((__pud != NULL) && \ | |
44 | !(pud_bad(*__pud) || pud_none(*__pud))) \ | |
45 | __pmd = pmd_offset(__pud, address); \ |