-----Original Message----- From: kernelnewbies-bounces@kernelnewbies.org [mailto:kernelnewbies- bounces@kernelnewbies.org] On Behalf Of Sri Ram Vemulpali Sent: Tuesday, September 20, 2011 11:24 AM To: kernelnewbies Subject: question on memory mapping one page at a time
Hi all,
can anyone please explain the following code, what it is doing. I want the first few statements of the code, as they are calculating page frame number. This is little confusing, thanks in advance.
struct page *simple_vma_nopage(struct vm_area_struct *vma, unsigned long address, int *type) { struct page *pageptr; unsigned long offset = vma->vm_pgoff << PAGE_SHIFT; unsigned long physaddr = address - vma->vm_start + offset; unsigned long pageframe = physaddr >> PAGE_SHIFT; if (!pfn_valid(pageframe)) return NOPAGE_SIGBUS; pageptr = pfn_to_page(pageframe); get_page(pageptr); if (type) *type = VM_FAULT_MINOR; return pageptr; }
-- Regards, Sri.
Do a search on "Understanding the Linux Virtual Memory Manager" by Mel Gorman. The PDF is out there for free or you can buy the hardcopy. I think you will find the above code clearer after you've read the above. Jeff Haran