--- NVIDIA_kernel-1.0-4363/nv-linux.h.orig Sun Jul 6 14:42:34 2003 +++ NVIDIA_kernel-1.0-4363/nv-linux.h Mon Jul 7 14:57:02 2003 @@ -225,6 +225,18 @@ } #endif +#if defined(pmd_offset_map) +#define NV_PMD_OFFSET(address, pg_dir, pg_mid_dir) \ + { \ + pmd_t *pg_mid_dir__ = pmd_offset_map(pg_dir, address); \ + pg_mid_dir = *pg_mid_dir__; \ + pmd_unmap(pg_mid_dir__); \ + } +#else +#define NV_PMD_OFFSET(address, pg_dir, pg_mid_dir) \ + pg_mid_dir = *pmd_offset(pg_dir, address) +#endif + #define NV_PAGE_ALIGN(addr) ( ((addr) + PAGE_SIZE - 1) / PAGE_SIZE) #define NV_MASK_OFFSET(addr) ( (addr) & (PAGE_SIZE - 1) ) --- NVIDIA_kernel-1.0-4363/nv.c.orig Sun Jul 6 14:45:36 2003 +++ NVIDIA_kernel-1.0-4363/nv.c Sun Jul 6 14:58:55 2003 @@ -2084,7 +2084,7 @@ nv_get_phys_address(unsigned long address) { pgd_t *pg_dir; - pmd_t *pg_mid_dir; + pmd_t pg_mid_dir; pte_t pte; #if defined(NVCPU_IA64) @@ -2105,11 +2105,12 @@ if (pgd_none(*pg_dir)) goto failed; - pg_mid_dir = pmd_offset(pg_dir, address); - if (pmd_none(*pg_mid_dir)) + NV_PMD_OFFSET(address, pg_dir, pg_mid_dir); + + if (pmd_none(pg_mid_dir)) goto failed; - NV_PTE_OFFSET(address, pg_mid_dir, pte); + NV_PTE_OFFSET(address, &pg_mid_dir, pte); if (!pte_present(pte)) goto failed;