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.
-----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
On Wed, Sep 21, 2011 at 2:24 AM, Jeff Haran <jharan@bytemobile.com> wrote:
-----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
_______________________________________________ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
Also you can go through the second chapter of understanding linux kernel. Regards, Rohan Puri
thanks for the replies. On Tue, Sep 20, 2011 at 11:42 PM, rohan puri <rohan.puri15@gmail.com> wrote:
On Wed, Sep 21, 2011 at 2:24 AM, Jeff Haran <jharan@bytemobile.com> wrote:
-----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
_______________________________________________ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
Also you can go through the second chapter of understanding linux kernel.
Regards, Rohan Puri
-- Regards, Sri.
--- El mié 21-sep-11, Sri Ram Vemulpali <sri.ram.gmu06@gmail.com> escribió:
De: Sri Ram Vemulpali <sri.ram.gmu06@gmail.com> Asunto: Re: question on memory mapping one page at a time Para: "rohan puri" <rohan.puri15@gmail.com> Cc: "Jeff Haran" <jharan@bytemobile.com>, "kernelnewbies" <kernelnewbies@kernelnewbies.org> Fecha: miércoles, 21 de septiembre de 2011, 15:06 thanks for the replies.
On Tue, Sep 20, 2011 at 11:42 PM, rohan puri <rohan.puri15@gmail.com> wrote:
On Wed, Sep 21, 2011 at 2:24 AM, Jeff Haran <jharan@bytemobile.com>
wrote:
-----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.
Does this means that Gorman's book is still useful? I thought it was too outdated.
participants (4)
-
Ezequiel García -
Jeff Haran -
rohan puri -
Sri Ram Vemulpali