Re: rmap and nvidia?

O.Sezer
2002-12-16T22:25:48Z

[-- Attachment #1: Type: text/plain, Size: 93 bytes --]

Is this patch correct in any way?
(Ripped out of the 2.5 patch and modified some).

Thanks.

[-- Attachment #2: NVIDIA_kernel_rmap.patch --]
[-- Type: text/plain, Size: 2173 bytes --]

diff -urN NVIDIA_kernel-1.0-4191/nv.c NVIDIA_kernel.rmap15b/nv.c
--- NVIDIA_kernel-1.0-4191/nv.c 2002-12-09 22:27:15.000000000 +0200
+++ NVIDIA_kernel.rmap15b/nv.c 2002-12-17 00:03:12.000000000 +0200
@@ -2217,7 +2217,7 @@
{
pgd_t *pg_dir;
pmd_t *pg_mid_dir;
- pte_t *pte__, pte;
+ pte_t pte;

#if defined(NVCPU_IA64)
if (address > __IA64_UNCACHED_OFFSET)
@@ -2241,14 +2241,7 @@
if (pmd_none(*pg_mid_dir))
goto failed;

-#if defined (pte_offset_atomic)
- pte__ = pte_offset_atomic(pg_mid_dir, address);
- pte = *pte__;
- pte_kunmap(pte__);
-#else
- pte__ = NULL;
- pte = *pte_offset(pg_mid_dir, address);
-#endif
+ PTE_OFFSET(pg_mid_dir, address, pte);

if (!pte_present(pte))
goto failed;
diff -urN NVIDIA_kernel-1.0-4191/nv-linux.h NVIDIA_kernel.rmap15b/nv-linux.h
--- NVIDIA_kernel-1.0-4191/nv-linux.h 2002-12-09 22:27:15.000000000 +0200
+++ NVIDIA_kernel.rmap15b/nv-linux.h 2002-12-17 00:02:19.000000000 +0200
@@ -146,6 +146,28 @@
# define VMA_PRIVATE(vma) ((void*)((vma)->vm_pte))
#endif

+#ifdef pte_offset_map /* rmap-vm or 2.5 */
+#define PTE_OFFSET(pmd, address, pte) \
+ { \
+ pte_t *pPTE; \
+ pPTE = pte_offset_map(pmd, address); \
+ pte = *pPTE; \
+ pte_unmap(pPTE); \
+ }
+#else
+#ifdef pte_offset_atomic /* aa-vm */
+#define PTE_OFFSET(pmd, address, pte) \
+ { \
+ pte_t *pPTE; \
+ pPTE = pte_offset_atomic(pmd, address); \
+ pte = *pPTE; \
+ pte_kunmap(pPTE); \
+ }
+#else /* !pte_offset_atomic */
+#define PTE_OFFSET(pmd, address, pte) (pte = *pte_offset(pmd, address))
+#endif /* pte_offset_atomic */
+#endif /* pte_offset_map */
+
#define NV_PAGE_ALIGN(addr) ( ((addr) + PAGE_SIZE - 1) / PAGE_SIZE)
#define NV_MASK_OFFSET(addr) ( (addr) & (PAGE_SIZE - 1) )