Trying to compile driver for Radeon under SuSe 8.0
results in an error indicatign that the Kernel modules
could not be compiled. The text from version.h is
displayed as an error, suggesting not to compile
Kernel modules differently blah blah (See version.h in
kernel header dir).
Logged In: NO
Maybe SuSE 8 is using an -aa kernel. I tried with latest
-aa kernels and the resulting module compiles but does not
load with a unresolved symbol.
With this patch it compiles and loads under 2.4.19-pre8aa2.
But now every GL application (even glxinfo) segfaults using
latest cvs XFree, even with 2.4.19-pre8 kernel and stock drm
module...
My card is a radeon 7500 and the mainboard is a VIA based
Aopen KT133.
diff -urN drm_proc.h drm_proc.h
--- drm_proc.h Fri May 3 20:24:03 2002
+++ drm_proc.h Sat May 4 14:21:47 2002
@@ -449,7 +449,7 @@
for (i = vma->vm_start; i < vma->vm_end; i
+= PAGE_SIZE) {
pgd = pgd_offset(vma->vm_mm, i);
pmd = pmd_offset(pgd, i);
- pte = pte_offset(pmd, i);
+ pte = pte_offset_atomic(pmd, i);
if (pte_present(*pte)) {
address = __pa(pte_page(*pte))
+ (i & (PAGE_SIZE-1));
@@ -465,6 +465,7 @@
} else {
DRM_PROC_PRINT("
0x%08lx\n", i);
}
+ pte_kunmap(pte);
}
#endif
}
diff -urN drm_scatter.h drm_scatter.h
--- drm_scatter.h Tue Jan 22 18:53:28 2002
+++ drm_scatter.h Sat May 4 14:21:47 2002
@@ -66,9 +66,6 @@
drm_scatter_gather_t request;
drm_sg_mem_t *entry;
unsigned long pages, i, j;
- pgd_t *pgd;
- pmd_t *pmd;
- pte_t *pte;
DRM_DEBUG( "%s\n", __FUNCTION__ );
@@ -135,21 +132,10 @@
DRM_DEBUG( "sg alloc virtual = %p\n", entry->virtual );
for ( i = entry->handle, j = 0 ; j < pages ; i +=
PAGE_SIZE, j++ ) {
- pgd = pgd_offset_k( i );
- if ( !pgd_present( *pgd ) )
+ entry->pagelist[j] = vmalloc_to_page((void *)i);
+ if (!entry->pagelist[j])
goto failed;
-
- pmd = pmd_offset( pgd, i );
- if ( !pmd_present( *pmd ) )
- goto failed;
-
- pte = pte_offset( pmd, i );
- if ( !pte_present( *pte ) )
- goto failed;
-
- entry->pagelist[j] = pte_page( *pte );
-
- SetPageReserved( entry->pagelist[j] );
+ SetPageReserved(entry->pagelist[j]);
}
request.handle = entry->handle;
diff -urN drm_vm.h drm_vm.h
--- drm_vm.h Fri May 3 20:24:03 2002
+++ drm_vm.h Sat May 4 14:21:47 2002
@@ -152,9 +152,6 @@
#endif
unsigned long offset;
unsigned long i;
- pgd_t *pgd;
- pmd_t *pmd;
- pte_t *pte;
struct page *page;
if (address > vma->vm_end) return NOPAGE_SIGBUS; /*
Disallow mremap */
@@ -162,17 +159,9 @@
offset = address - vma->vm_start;
i = (unsigned long)map->handle + offset;
- /* We have to walk page tables here because we need
large SAREA's, and
- * they need to be virtually contiguous in kernel space.
- */
- pgd = pgd_offset_k( i );
- if( !pgd_present( *pgd ) ) return NOPAGE_OOM;
- pmd = pmd_offset( pgd, i );
- if( !pmd_present( *pmd ) ) return NOPAGE_OOM;
- pte = pte_offset( pmd, i );
- if( !pte_present( *pte ) ) return NOPAGE_OOM;
-
- page = pte_page(*pte);
+ page = vmalloc_to_page((void *)i);
+ if (!page)
+ return NOPAGE_OOM;
get_page(page);
DRM_DEBUG("shm_nopage 0x%lx\n", address);