lkml.org 
[lkml]   [2008]   [Jun]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: Linux 2.6.26-rc7
    On Mon, Jun 23, 2008 at 1:26 AM, Linus Torvalds
    <torvalds@linux-foundation.org> wrote:
    > So assuming it's not the XIP fix, you could try this patch instead. It
    > replaces the (insane) use of VM_LOCKED with VM_SHARED (which is a lot more
    > meaningful for the case of ZERO_PAGE, but strictly speaking probably
    > doesn't matter either), and it teaches it about the fact that
    > non-anonymous pages can be populated not just with the "->fault" handler,
    > but with "->nopfn" too.
    >
    > I really don't think it's due to this (nobody sane really uses '->nopfn'),
    > but if the XIP disabling patch doesn't make a difference, give it a try.

    Linus,

    This one fixes the problem! So, it's something strange that VMware is
    doing, but anyway, glad you fix it!!!

    Thanks for the patch.

    Jeff.



    > (Most of the patch is obviously the fact that I moved the conditionals
    > into a helper inline function to make the dang thing more readable). The
    > actual change is trivial.
    >
    > Linus
    >
    > ---
    > mm/memory.c | 12 ++++++++++--
    > 1 files changed, 10 insertions(+), 2 deletions(-)
    >
    > diff --git a/mm/memory.c b/mm/memory.c
    > index 9aefaae..8c5675f 100644
    > --- a/mm/memory.c
    > +++ b/mm/memory.c
    > @@ -1045,6 +1045,15 @@ no_page_table:
    > return page;
    > }
    >
    > +/* Can we do the FOLL_ANON optimization? */
    > +static inline int use_zero_page(struct vm_area_struct *vma)
    > +{
    > + if (vma->vm_flags & VM_SHARED)
    > + return 0;
    > + return !vma->vm_ops ||
    > + (!vma->vm_ops->fault && !vma->vm_ops->nopfn);
    > +}
    > +
    > int get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
    > unsigned long start, int len, int write, int force,
    > struct page **pages, struct vm_area_struct **vmas)
    > @@ -1119,8 +1128,7 @@ int get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
    > foll_flags = FOLL_TOUCH;
    > if (pages)
    > foll_flags |= FOLL_GET;
    > - if (!write && !(vma->vm_flags & VM_LOCKED) &&
    > - (!vma->vm_ops || !vma->vm_ops->fault))
    > + if (!write && use_zero_page(vma))
    > foll_flags |= FOLL_ANON;
    >
    > do {
    >


    \
     
     \ /
      Last update: 2008-06-23 17:23    [W:0.049 / U:32.204 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site