public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Mike Kravetz <mike.kravetz@oracle.com>
To: Matthew Wilcox <willy@infradead.org>
Cc: Tarun Sahu <tsahu@linux.ibm.com>,
	linux-mm@kvack.org, akpm@linux-foundation.org,
	muchun.song@linux.dev, aneesh.kumar@linux.ibm.com,
	sidhartha.kumar@oracle.com, gerald.schaefer@linux.ibm.com,
	linux-kernel@vger.kernel.org, jaypatel@linux.ibm.com
Subject: Re: [PATCH v2] mm/folio: Avoid special handling for order value 0 in folio_set_order
Date: Fri, 2 Jun 2023 17:08:08 -0700	[thread overview]
Message-ID: <20230603000808.GA29961@monkey> (raw)
In-Reply-To: <20230515174513.GB3848@monkey>

On 05/15/23 10:45, Mike Kravetz wrote:
> On 05/15/23 18:16, Matthew Wilcox wrote:
> > On Mon, May 15, 2023 at 10:38:09PM +0530, Tarun Sahu wrote:
> > > @@ -1951,9 +1950,6 @@ static bool __prep_compound_gigantic_folio(struct folio *folio,
> > >  	struct page *p;
> > >  
> > >  	__folio_clear_reserved(folio);
> > > -	__folio_set_head(folio);
> > > -	/* we rely on prep_new_hugetlb_folio to set the destructor */
> > > -	folio_set_order(folio, order);
> > >  	for (i = 0; i < nr_pages; i++) {
> > >  		p = folio_page(folio, i);
> > >  
> > > @@ -1999,6 +1995,9 @@ static bool __prep_compound_gigantic_folio(struct folio *folio,
> > >  		if (i != 0)
> > >  			set_compound_head(p, &folio->page);
> > >  	}
> > > +	__folio_set_head(folio);
> > > +	/* we rely on prep_new_hugetlb_folio to set the destructor */
> > > +	folio_set_order(folio, order);
> > 
> > This makes me nervous, as I said before.  This means that
> > compound_head(tail) can temporarily point to a page which is not marked
> > as a head page.  That's different from prep_compound_page().  You need to
> > come up with some good argumentation for why this is safe, and no amount
> > of testing you do can replace it -- any race in this area will be subtle.

We could continue to set up the head page first as in the current code,
but we need to move the freezing of that page outside the loop.  That is
better then the existing code, however I am not sure if it is any better
than what is proposed here.  I still believe my reasoning below as to
why this proposal is better then the existing code is correct.

Also, that 'folio_set_order(folio, 0)' only exists in the error path of
the current code.  I am not sure if it is actually needed.  Why?  Right
after returning an error, the pages associated with the gigantic page
will be freed.  This is similar to the reason why it can be removed in
__destroy_compound_gigantic_folio.

> I added comments supporting this approach in the first version of the patch.
> My argument was that this is actually safer than the existing code.  That is
> because we freeze the page (ref count 0) before setting compound_head(tail).
> So, nobody should be taking any speculative refs on those tail pages.
> 
> In the existing code, we set the compound page order in the head before
> freezing the head or any tail pages.  Therefore, speculative refs can be
> taken on any of the pages while in this state.
> 
> If we want prep_compound_gigantic_folio to work like prep_compound_page
> we would need to take two passes through the pages.  In the first pass,
> freeze all the pages and in the second set up the compound page.

-- 
Mike Kravetz

  reply	other threads:[~2023-06-03  0:08 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-05-15 17:08 [PATCH v2] mm/folio: Avoid special handling for order value 0 in folio_set_order Tarun Sahu
2023-05-15 17:15 ` Tarun Sahu
2023-05-15 17:16 ` Matthew Wilcox
2023-05-15 17:45   ` Mike Kravetz
2023-06-03  0:08     ` Mike Kravetz [this message]
2023-05-16 13:09   ` Tarun Sahu
2023-05-22  5:49 ` Tarun Sahu
2023-06-06 15:58 ` Mike Kravetz
2023-06-08 10:03   ` Tarun Sahu
2023-06-08 23:52     ` Mike Kravetz

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=20230603000808.GA29961@monkey \
    --to=mike.kravetz@oracle.com \
    --cc=akpm@linux-foundation.org \
    --cc=aneesh.kumar@linux.ibm.com \
    --cc=gerald.schaefer@linux.ibm.com \
    --cc=jaypatel@linux.ibm.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=muchun.song@linux.dev \
    --cc=sidhartha.kumar@oracle.com \
    --cc=tsahu@linux.ibm.com \
    --cc=willy@infradead.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox