I have a problem mmaping /dev/mem on some address in RAM. I am aware of
caveats,but I am trying to mmap a region which I am sure is not in use by the
kernel(some additional code does this and returns a physical address which is
what I use for mmap). The mmap call itself succeeds and /proc/pid/maps also
shows that region, but I am unable to see what I write in target memory.I also
tried with the O_SYNC flag as I was wondering is caching had anything to do
with the results that I was seeing.No effect.
This however works with a mem= option and when the mmap region falls out of the
mem= boundary.
any clues?
Please cc as I am not subscribed
sridhar
>>>>> sridhar vaidyanathan (sv) writes:
sv> I have a problem mmaping /dev/mem on some address in RAM. I am
sv> aware of caveats,but I am trying to mmap a region which I am sure
sv> is not in use by the kernel(some additional code does this and
sv> returns a physical address which is what I use for mmap). The
sv> mmap call itself succeeds and /proc/pid/maps also shows that
sv> region, but I am unable to see what I write in target memory.I
sv> also tried with the O_SYNC flag as I was wondering is caching had
sv> anything to do with the results that I was seeing.No effect.
sv> This however works with a mem= option and when the mmap region
sv> falls out of the mem= boundary. any clues? Please cc as I am
sv> not subscribed sridhar
look at mm/memory.c:remap_pte_range():
if ((!VALID_PAGE(page)) || PageReserved(page))
set_pte(pte, mk_pte_phys(phys_addr, prot));
so, your pages aren't mapped at all and pte'es contain zero ...