From: Andrea Arcangeli <aarcange@redhat.com>
To: Zi Yan <zi.yan@cs.rutgers.edu>
Cc: jglisse@redhat.com, linux-mm@kvack.org,
Andrew Morton <akpm@linux-foundation.org>,
linux-kernel@vger.kernel.org,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
"Kirill A . Shutemov" <kirill.shutemov@linux.intel.com>,
"H. Peter Anvin" <hpa@zytor.com>,
Anshuman Khandual <khandual@linux.vnet.ibm.com>,
Dave Hansen <dave.hansen@intel.com>,
David Nellans <dnellans@nvidia.com>, Ingo Molnar <mingo@elte.hu>,
Mel Gorman <mgorman@techsingularity.net>,
Minchan Kim <minchan@kernel.org>,
Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>,
Thomas Gleixner <tglx@linutronix.de>,
Vlastimil Babka <vbabka@suse.cz>,
Michal Hocko <mhocko@kernel.org>
Subject: Re: [PATCH] mm/thp: fix call to mmu_notifier in set_pmd_migration_entry()
Date: Fri, 12 Oct 2018 13:24:22 -0400 [thread overview]
Message-ID: <20181012172422.GA7395@redhat.com> (raw)
In-Reply-To: <DB07F115-B404-4AB0-9D54-BC20C3A3F2B0@cs.rutgers.edu>
Hello,
On Fri, Oct 12, 2018 at 12:20:54PM -0400, Zi Yan wrote:
> On 12 Oct 2018, at 12:09, jglisse@redhat.com wrote:
>
> > From: Jerome Glisse <jglisse@redhat.com>
> >
> > Inside set_pmd_migration_entry() we are holding page table locks and
> > thus we can not sleep so we can not call invalidate_range_start/end()
> >
> > So remove call to mmu_notifier_invalidate_range_start/end() and add
> > call to mmu_notifier_invalidate_range(). Note that we are already
Why the call to mmu_notifier_invalidate_range if we're under
range_start and followed by range_end? (it's not _range_only_end, if
it was _range_only_end the above would be needed)
> > calling mmu_notifier_invalidate_range_start/end() inside the function
> > calling set_pmd_migration_entry() (see try_to_unmap_one()).
> >
> > Signed-off-by: Jerome Glisse <jglisse@redhat.com>
> > Reported-by: Andrea Arcangeli <aarcange@redhat.com>
> > Cc: Andrew Morton <akpm@linux-foundation.org>
> > Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> > Cc: Zi Yan <zi.yan@cs.rutgers.edu>
> > Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
> > Cc: "H. Peter Anvin" <hpa@zytor.com>
> > Cc: Anshuman Khandual <khandual@linux.vnet.ibm.com>
> > Cc: Dave Hansen <dave.hansen@intel.com>
> > Cc: David Nellans <dnellans@nvidia.com>
> > Cc: Ingo Molnar <mingo@elte.hu>
> > Cc: Mel Gorman <mgorman@techsingularity.net>
> > Cc: Minchan Kim <minchan@kernel.org>
> > Cc: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>
> > Cc: Thomas Gleixner <tglx@linutronix.de>
> > Cc: Vlastimil Babka <vbabka@suse.cz>
> > Cc: Michal Hocko <mhocko@kernel.org>
> > Cc: Andrea Arcangeli <aarcange@redhat.com>
> > ---
> > mm/huge_memory.c | 7 +------
> > 1 file changed, 1 insertion(+), 6 deletions(-)
> >
> > diff --git a/mm/huge_memory.c b/mm/huge_memory.c
> > index 533f9b00147d..93cb80fe12cb 100644
> > --- a/mm/huge_memory.c
> > +++ b/mm/huge_memory.c
> > @@ -2885,9 +2885,6 @@ void set_pmd_migration_entry(struct page_vma_mapped_walk *pvmw,
> > if (!(pvmw->pmd && !pvmw->pte))
> > return;
> >
> > - mmu_notifier_invalidate_range_start(mm, address,
> > - address + HPAGE_PMD_SIZE);
> > -
> > flush_cache_range(vma, address, address + HPAGE_PMD_SIZE);
> > pmdval = *pvmw->pmd;
> > pmdp_invalidate(vma, address, pvmw->pmd);
> > @@ -2898,11 +2895,9 @@ void set_pmd_migration_entry(struct page_vma_mapped_walk *pvmw,
> > if (pmd_soft_dirty(pmdval))
> > pmdswp = pmd_swp_mksoft_dirty(pmdswp);
> > set_pmd_at(mm, address, pvmw->pmd, pmdswp);
> > + mmu_notifier_invalidate_range(mm, address, address + HPAGE_PMD_SIZE);
It's not obvious why it's needed, if it's needed maybe a comment can
be added.
> > page_remove_rmap(page, true);
> > put_page(page);
> > -
> > - mmu_notifier_invalidate_range_end(mm, address,
> > - address + HPAGE_PMD_SIZE);
> > }
> >
> > void remove_migration_pmd(struct page_vma_mapped_walk *pvmw, struct page *new)
> > --
> > 2.17.2
>
> Yes, these are the redundant calls to mmu_notifier_invalidate_range_start/end()
> in set_pmd_migration_entry(). Thanks for the patch.
They're not just redundant, it's called in non blockable path with
__mmu_notifier_invalidate_range_start(blockable=true).
Furthermore mmu notifier API doesn't support nesting.
KVM is actually robust against the nesting:
kvm->mmu_notifier_count++;
kvm->mmu_notifier_count--;
and KVM is always fine with non blockable calls, but that's not
universally true for all mmu notifier users.
Thanks,
Andrea
WARNING: multiple messages have this Message-ID (diff)
From: Andrea Arcangeli <aarcange@redhat.com>
To: Zi Yan <zi.yan@cs.rutgers.edu>
Cc: jglisse@redhat.com, linux-mm@kvack.org,
Andrew Morton <akpm@linux-foundation.org>,
linux-kernel@vger.kernel.org,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
"Kirill A . Shutemov" <kirill.shutemov@linux.intel.com>,
"H. Peter Anvin" <hpa@zytor.com>,
Anshuman Khandual <khandual@linux.vnet.ibm.com>,
Dave Hansen <dave.hansen@intel.com>,
David Nellans <dnellans@nvidia.com>, Ingo Molnar <mingo@elte.hu>,
Mel Gorman <mgorman@techsingularity.net>,
Minchan Kim <minchan@kernel.org>,
Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>,
Thomas Gleixner <tglx@linutronix.de>,
Vlastimil Babka <vbabka@suse.cz>,
Michal Hocko <mhocko@kernel.org>
Subject: Re: [PATCH] mm/thp: fix call to mmu_notifier in set_pmd_migration_entry()
Date: Fri, 12 Oct 2018 13:24:22 -0400 [thread overview]
Message-ID: <20181012172422.GA7395@redhat.com> (raw)
In-Reply-To: <DB07F115-B404-4AB0-9D54-BC20C3A3F2B0@cs.rutgers.edu>
Hello,
On Fri, Oct 12, 2018 at 12:20:54PM -0400, Zi Yan wrote:
> On 12 Oct 2018, at 12:09, jglisse@redhat.com wrote:
>
> > From: Jérôme Glisse <jglisse@redhat.com>
> >
> > Inside set_pmd_migration_entry() we are holding page table locks and
> > thus we can not sleep so we can not call invalidate_range_start/end()
> >
> > So remove call to mmu_notifier_invalidate_range_start/end() and add
> > call to mmu_notifier_invalidate_range(). Note that we are already
Why the call to mmu_notifier_invalidate_range if we're under
range_start and followed by range_end? (it's not _range_only_end, if
it was _range_only_end the above would be needed)
> > calling mmu_notifier_invalidate_range_start/end() inside the function
> > calling set_pmd_migration_entry() (see try_to_unmap_one()).
> >
> > Signed-off-by: Jérôme Glisse <jglisse@redhat.com>
> > Reported-by: Andrea Arcangeli <aarcange@redhat.com>
> > Cc: Andrew Morton <akpm@linux-foundation.org>
> > Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> > Cc: Zi Yan <zi.yan@cs.rutgers.edu>
> > Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
> > Cc: "H. Peter Anvin" <hpa@zytor.com>
> > Cc: Anshuman Khandual <khandual@linux.vnet.ibm.com>
> > Cc: Dave Hansen <dave.hansen@intel.com>
> > Cc: David Nellans <dnellans@nvidia.com>
> > Cc: Ingo Molnar <mingo@elte.hu>
> > Cc: Mel Gorman <mgorman@techsingularity.net>
> > Cc: Minchan Kim <minchan@kernel.org>
> > Cc: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>
> > Cc: Thomas Gleixner <tglx@linutronix.de>
> > Cc: Vlastimil Babka <vbabka@suse.cz>
> > Cc: Michal Hocko <mhocko@kernel.org>
> > Cc: Andrea Arcangeli <aarcange@redhat.com>
> > ---
> > mm/huge_memory.c | 7 +------
> > 1 file changed, 1 insertion(+), 6 deletions(-)
> >
> > diff --git a/mm/huge_memory.c b/mm/huge_memory.c
> > index 533f9b00147d..93cb80fe12cb 100644
> > --- a/mm/huge_memory.c
> > +++ b/mm/huge_memory.c
> > @@ -2885,9 +2885,6 @@ void set_pmd_migration_entry(struct page_vma_mapped_walk *pvmw,
> > if (!(pvmw->pmd && !pvmw->pte))
> > return;
> >
> > - mmu_notifier_invalidate_range_start(mm, address,
> > - address + HPAGE_PMD_SIZE);
> > -
> > flush_cache_range(vma, address, address + HPAGE_PMD_SIZE);
> > pmdval = *pvmw->pmd;
> > pmdp_invalidate(vma, address, pvmw->pmd);
> > @@ -2898,11 +2895,9 @@ void set_pmd_migration_entry(struct page_vma_mapped_walk *pvmw,
> > if (pmd_soft_dirty(pmdval))
> > pmdswp = pmd_swp_mksoft_dirty(pmdswp);
> > set_pmd_at(mm, address, pvmw->pmd, pmdswp);
> > + mmu_notifier_invalidate_range(mm, address, address + HPAGE_PMD_SIZE);
It's not obvious why it's needed, if it's needed maybe a comment can
be added.
> > page_remove_rmap(page, true);
> > put_page(page);
> > -
> > - mmu_notifier_invalidate_range_end(mm, address,
> > - address + HPAGE_PMD_SIZE);
> > }
> >
> > void remove_migration_pmd(struct page_vma_mapped_walk *pvmw, struct page *new)
> > --
> > 2.17.2
>
> Yes, these are the redundant calls to mmu_notifier_invalidate_range_start/end()
> in set_pmd_migration_entry(). Thanks for the patch.
They're not just redundant, it's called in non blockable path with
__mmu_notifier_invalidate_range_start(blockable=true).
Furthermore mmu notifier API doesn't support nesting.
KVM is actually robust against the nesting:
kvm->mmu_notifier_count++;
kvm->mmu_notifier_count--;
and KVM is always fine with non blockable calls, but that's not
universally true for all mmu notifier users.
Thanks,
Andrea
next prev parent reply other threads:[~2018-10-12 17:24 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-10-12 16:09 [PATCH] mm/thp: fix call to mmu_notifier in set_pmd_migration_entry() jglisse
2018-10-12 16:09 ` jglisse
2018-10-12 16:20 ` Zi Yan
2018-10-12 17:24 ` Andrea Arcangeli [this message]
2018-10-12 17:24 ` Andrea Arcangeli
2018-10-12 17:35 ` Jerome Glisse
2018-10-12 17:35 ` Jerome Glisse
2018-10-12 17:58 ` Andrea Arcangeli
2018-10-12 17:58 ` Andrea Arcangeli
2018-10-12 16:55 ` Michal Hocko
2018-10-12 16:55 ` Michal Hocko
2018-10-12 17:05 ` Jerome Glisse
2018-10-12 17:05 ` Jerome Glisse
2018-10-12 17:05 ` Jerome Glisse
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20181012172422.GA7395@redhat.com \
--to=aarcange@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=dave.hansen@intel.com \
--cc=dnellans@nvidia.com \
--cc=gregkh@linuxfoundation.org \
--cc=hpa@zytor.com \
--cc=jglisse@redhat.com \
--cc=khandual@linux.vnet.ibm.com \
--cc=kirill.shutemov@linux.intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mgorman@techsingularity.net \
--cc=mhocko@kernel.org \
--cc=minchan@kernel.org \
--cc=mingo@elte.hu \
--cc=n-horiguchi@ah.jp.nec.com \
--cc=tglx@linutronix.de \
--cc=vbabka@suse.cz \
--cc=zi.yan@cs.rutgers.edu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.