|[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]|
I have an x86 computer running Red Hat Linux 9.0, kernel 2.4.20-8bigmem #SMP.
with 8G memory, SMP and BIGMEM configured.
For a non-red-hat 2.4.20 kernel, a macro pte_offset is defined in asm-i386/pgtable.h
But it is not defined in the red hat 9.0 kernel 2.4.20-8.
In the Red Hat kernel I found "__pte_offset()" and some pte_offset_kernel (),pte_offset_map" and " pte_offset_map_nested".
pte_offset_kernel() seemed to match the args, but I doubt that's correct, for it actually crushed my driver.
I did find the same definitions of pte_offset_kernel, pte_offset_map and pte_offset_map_nested in the non Red Hat kernel 2.6-test version. It seems Red Hat 9.0 is using some of the kernel.org's 2.6 kernel code.
My driver code can run through pgd_offset(), pmd_offset() all fine, and once it hits pte_offset_kernel(), it dies.
A message is reported: "Unable to handle kernel paging request at virtual address 9236b4d0.
I guess that my driver is not handling the bigmem correctly. (I have 8G memory).
Could someone tell me what to use to replace the pte_offset in my driver / module code.
pte_offset() works fine for me on the non Red Hat kernels.
p.s. What I am doing in the driver is to find the physical address given a PID and a virtual address of a user process.
Thanks a lot!!!