From: Mike Rapoport <rppt@linux.vnet.ibm.com> To: Mike Kravetz <mike.kravetz@oracle.com> Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, Michal Hocko <mhocko@kernel.org>, Christopher Lameter <cl@linux.com>, Guy Shattah <sguy@mellanox.com>, Anshuman Khandual <khandual@linux.vnet.ibm.com>, Michal Nazarewicz <mina86@mina86.com>, Vlastimil Babka <vbabka@suse.cz>, David Nellans <dnellans@nvidia.com>, Laura Abbott <labbott@redhat.com>, Pavel Machek <pavel@ucw.cz>, Dave Hansen <dave.hansen@intel.com> Subject: Re: [RFC PATCH 1/3] mm: make start_isolate_page_range() fail if already isolated Date: Tue, 13 Feb 2018 11:46:11 +0200 [thread overview] Message-ID: <20180213094610.GA2196@rapoport-lnx> (raw) In-Reply-To: <20180212222056.9735-2-mike.kravetz@oracle.com> On Mon, Feb 12, 2018 at 02:20:54PM -0800, Mike Kravetz wrote: > start_isolate_page_range() is used to set the migrate type of a > page block to MIGRATE_ISOLATE while attempting to start a > migration operation. It is assumed that only one thread is > attempting such an operation, and due to the limited number of > callers this is generally the case. However, there are no > guarantees and it is 'possible' for two threads to operate on > the same range. > > Since start_isolate_page_range() is called at the beginning of > such operations, have it return -EBUSY if MIGRATE_ISOLATE is > already set. > > This will allow start_isolate_page_range to serve as a > synchronization mechanism and will allow for more general use > of callers making use of these interfaces. > > Signed-off-by: Mike Kravetz <mike.kravetz@oracle.com> > --- > mm/page_alloc.c | 8 ++++---- > mm/page_isolation.c | 10 +++++++++- > 2 files changed, 13 insertions(+), 5 deletions(-) > > diff --git a/mm/page_alloc.c b/mm/page_alloc.c > index 76c9688b6a0a..064458f317bf 100644 > --- a/mm/page_alloc.c > +++ b/mm/page_alloc.c > @@ -7605,11 +7605,11 @@ static int __alloc_contig_migrate_range(struct compact_control *cc, > * @gfp_mask: GFP mask to use during compaction > * > * The PFN range does not have to be pageblock or MAX_ORDER_NR_PAGES > - * aligned, however it's the caller's responsibility to guarantee that > - * we are the only thread that changes migrate type of pageblocks the > - * pages fall in. > + * aligned. The PFN range must belong to a single zone. > * > - * The PFN range must belong to a single zone. > + * The first thing this routine does is attempt to MIGRATE_ISOLATE all > + * pageblocks in the range. Once isolated, the pageblocks should not > + * be modified by others. > * > * Returns zero on success or negative error code. On success all > * pages which PFN is in [start, end) are allocated for the caller and > diff --git a/mm/page_isolation.c b/mm/page_isolation.c > index 165ed8117bd1..e815879d525f 100644 > --- a/mm/page_isolation.c > +++ b/mm/page_isolation.c > @@ -28,6 +28,13 @@ static int set_migratetype_isolate(struct page *page, int migratetype, > > spin_lock_irqsave(&zone->lock, flags); > > + /* > + * We assume we are the only ones trying to isolate this block. > + * If MIGRATE_ISOLATE already set, return -EBUSY > + */ > + if (is_migrate_isolate_page(page)) > + goto out; > + > pfn = page_to_pfn(page); > arg.start_pfn = pfn; > arg.nr_pages = pageblock_nr_pages; > @@ -166,7 +173,8 @@ __first_valid_page(unsigned long pfn, unsigned long nr_pages) > * future will not be allocated again. > * > * start_pfn/end_pfn must be aligned to pageblock_order. > - * Returns 0 on success and -EBUSY if any part of range cannot be isolated. > + * Returns 0 on success and -EBUSY if any part of range cannot be isolated Nit: please s/Returns/Return:/ and keep the period in the end > + * or any part of the range is already set to MIGRATE_ISOLATE. > */ > int start_isolate_page_range(unsigned long start_pfn, unsigned long end_pfn, > unsigned migratetype, bool skip_hwpoisoned_pages) > -- > 2.13.6 > > -- > To unsubscribe, send a message with 'unsubscribe linux-mm' in > the body to majordomo@kvack.org. For more info on Linux MM, > see: http://www.linux-mm.org/ . > Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a> > -- Sincerely yours, Mike.
WARNING: multiple messages have this Message-ID (diff)
From: Mike Rapoport <rppt@linux.vnet.ibm.com> To: Mike Kravetz <mike.kravetz@oracle.com> Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, Michal Hocko <mhocko@kernel.org>, Christopher Lameter <cl@linux.com>, Guy Shattah <sguy@mellanox.com>, Anshuman Khandual <khandual@linux.vnet.ibm.com>, Michal Nazarewicz <mina86@mina86.com>, Vlastimil Babka <vbabka@suse.cz>, David Nellans <dnellans@nvidia.com>, Laura Abbott <labbott@redhat.com>, Pavel Machek <pavel@ucw.cz>, Dave Hansen <dave.hansen@intel.com> Subject: Re: [RFC PATCH 1/3] mm: make start_isolate_page_range() fail if already isolated Date: Tue, 13 Feb 2018 11:46:11 +0200 [thread overview] Message-ID: <20180213094610.GA2196@rapoport-lnx> (raw) In-Reply-To: <20180212222056.9735-2-mike.kravetz@oracle.com> On Mon, Feb 12, 2018 at 02:20:54PM -0800, Mike Kravetz wrote: > start_isolate_page_range() is used to set the migrate type of a > page block to MIGRATE_ISOLATE while attempting to start a > migration operation. It is assumed that only one thread is > attempting such an operation, and due to the limited number of > callers this is generally the case. However, there are no > guarantees and it is 'possible' for two threads to operate on > the same range. > > Since start_isolate_page_range() is called at the beginning of > such operations, have it return -EBUSY if MIGRATE_ISOLATE is > already set. > > This will allow start_isolate_page_range to serve as a > synchronization mechanism and will allow for more general use > of callers making use of these interfaces. > > Signed-off-by: Mike Kravetz <mike.kravetz@oracle.com> > --- > mm/page_alloc.c | 8 ++++---- > mm/page_isolation.c | 10 +++++++++- > 2 files changed, 13 insertions(+), 5 deletions(-) > > diff --git a/mm/page_alloc.c b/mm/page_alloc.c > index 76c9688b6a0a..064458f317bf 100644 > --- a/mm/page_alloc.c > +++ b/mm/page_alloc.c > @@ -7605,11 +7605,11 @@ static int __alloc_contig_migrate_range(struct compact_control *cc, > * @gfp_mask: GFP mask to use during compaction > * > * The PFN range does not have to be pageblock or MAX_ORDER_NR_PAGES > - * aligned, however it's the caller's responsibility to guarantee that > - * we are the only thread that changes migrate type of pageblocks the > - * pages fall in. > + * aligned. The PFN range must belong to a single zone. > * > - * The PFN range must belong to a single zone. > + * The first thing this routine does is attempt to MIGRATE_ISOLATE all > + * pageblocks in the range. Once isolated, the pageblocks should not > + * be modified by others. > * > * Returns zero on success or negative error code. On success all > * pages which PFN is in [start, end) are allocated for the caller and > diff --git a/mm/page_isolation.c b/mm/page_isolation.c > index 165ed8117bd1..e815879d525f 100644 > --- a/mm/page_isolation.c > +++ b/mm/page_isolation.c > @@ -28,6 +28,13 @@ static int set_migratetype_isolate(struct page *page, int migratetype, > > spin_lock_irqsave(&zone->lock, flags); > > + /* > + * We assume we are the only ones trying to isolate this block. > + * If MIGRATE_ISOLATE already set, return -EBUSY > + */ > + if (is_migrate_isolate_page(page)) > + goto out; > + > pfn = page_to_pfn(page); > arg.start_pfn = pfn; > arg.nr_pages = pageblock_nr_pages; > @@ -166,7 +173,8 @@ __first_valid_page(unsigned long pfn, unsigned long nr_pages) > * future will not be allocated again. > * > * start_pfn/end_pfn must be aligned to pageblock_order. > - * Returns 0 on success and -EBUSY if any part of range cannot be isolated. > + * Returns 0 on success and -EBUSY if any part of range cannot be isolated Nit: please s/Returns/Return:/ and keep the period in the end > + * or any part of the range is already set to MIGRATE_ISOLATE. > */ > int start_isolate_page_range(unsigned long start_pfn, unsigned long end_pfn, > unsigned migratetype, bool skip_hwpoisoned_pages) > -- > 2.13.6 > > -- > To unsubscribe, send a message with 'unsubscribe linux-mm' in > the body to majordomo@kvack.org. For more info on Linux MM, > see: http://www.linux-mm.org/ . > Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a> > -- Sincerely yours, Mike. -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2018-02-13 9:46 UTC|newest] Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top 2018-02-12 22:20 [RFC PATCH 0/3] Interface for higher order contiguous allocations Mike Kravetz 2018-02-12 22:20 ` Mike Kravetz 2018-02-12 22:20 ` [RFC PATCH 1/3] mm: make start_isolate_page_range() fail if already isolated Mike Kravetz 2018-02-12 22:20 ` Mike Kravetz 2018-02-13 9:46 ` Mike Rapoport [this message] 2018-02-13 9:46 ` Mike Rapoport 2018-02-16 0:40 ` Mike Kravetz 2018-02-16 0:40 ` Mike Kravetz 2018-02-12 22:20 ` [RFC PATCH 2/3] mm: add find_alloc_contig_pages() interface Mike Kravetz 2018-02-12 22:20 ` Mike Kravetz 2018-02-13 9:53 ` Mike Rapoport 2018-02-13 9:53 ` Mike Rapoport 2018-02-12 22:20 ` [RFC PATCH 3/3] mm/hugetlb: use find_alloc_contig_pages() to allocate gigantic pages Mike Kravetz 2018-02-12 22:20 ` Mike Kravetz 2018-02-15 20:22 ` [RFC PATCH 0/3] Interface for higher order contiguous allocations Reinette Chatre 2018-02-15 20:22 ` Reinette Chatre 2018-04-12 20:40 ` Reinette Chatre 2018-04-12 20:58 ` Mike Kravetz 2018-04-16 13:14 ` Michal Hocko
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=20180213094610.GA2196@rapoport-lnx \ --to=rppt@linux.vnet.ibm.com \ --cc=cl@linux.com \ --cc=dave.hansen@intel.com \ --cc=dnellans@nvidia.com \ --cc=khandual@linux.vnet.ibm.com \ --cc=labbott@redhat.com \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-mm@kvack.org \ --cc=mhocko@kernel.org \ --cc=mike.kravetz@oracle.com \ --cc=mina86@mina86.com \ --cc=pavel@ucw.cz \ --cc=sguy@mellanox.com \ --cc=vbabka@suse.cz \ /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: linkBe 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.