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(
7 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0)
13 @@ -41,7 +42,11 @@ NvU64 nv_get_phys_address(
14 if (!NV_PGD_PRESENT(pgd))
17 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0)
18 + pmd = NV_PMD_OFFSET(address, p4d);
20 pmd = NV_PMD_OFFSET(address, pgd);
22 if (!NV_PMD_PRESENT(pmd))
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);
30 #if defined(PUD_SHIFT) /* 4-level pgtable */
31 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0)
36 -#define NV_PMD_OFFSET(address, pgd) \
37 +#define NV_PMD_OFFSET(address, _PGD_P4D) \
39 pmd_t *__pmd = NULL; \
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); \