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