0x237 (Refer. arch/x86/include/asm/pgtable_types.h from the source code 2.6.34).
#define _PAGE_BIT_PRESENT 0 /* is present */
#define _PAGE_BIT_RW 1 /* writeable */
#define _PAGE_BIT_USER 2 /* userspace addressable */
#define _PAGE_BIT_PWT 3 /* page write through */
#define _PAGE_BIT_PCD 4 /* page cache disabled */
#define _PAGE_BIT_ACCESSED 5 /* was accessed (raised by CPU) */
#define _PAGE_BIT_DIRTY 6 /* was written to (raised by CPU) */
#define _PAGE_BIT_UNUSED1 9 /* available for programmer */
The following bit positions are set. 1 2 3 4 5 9
When I write into the virtual address, then the page should be dirty and I expect bit position 6 (blocked above) to be set, but I see that it is not set.
Which function is responsible to update the flags in the page table entry. ?
Thanks,
Prabhu
On Mon, Oct 4, 2010 at 12:25 PM, Prabhu nath <gprabhunath@xxxxxxxxx> wrote:
Dear All,
I have an 512 MB RAM on an Intel desktop machine, of which Kernel uses 256M for all allocation for kernel as well as for user
programs. (by passing mem=256M as a boot parameter). Hence I have 256MB of memory which I can treat it as IO memory.
System memory is associated from 0x00000000 - 0x20000000 (512MB) in the physical address space.
Memory addresses from 0x00000000 - 0x10000000 (256 MB) are used by the Kernel - memory management. Subsystem
Memory addresses from 0x10000000 - 20000000 (256MB) is used as IO memory
For an experiment, I used mmap() to map a page (4K) in IO memory (page base address 0x20002000) to user virtual address
I used kernel function remap_pfn_range() in my kernel module's mmap function.
This is rightly mapping the physical page to a user virtual address. But when I write to that address and then read. I get junk
value.
To just verify, when I mapped the VGA controller memory to user virtual address things are working fine.
Can you please help me to resolve this problem.
Regards,
Prabhu