question on memory mapping one page at a time
Jeff Haran
jharan at bytemobile.com
Tue Sep 20 16:54:31 EDT 2011
> -----Original Message-----
> From: kernelnewbies-bounces at kernelnewbies.org [mailto:kernelnewbies-
> bounces at 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
More information about the Kernelnewbies
mailing list