[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <859142.1674569510@warthog.procyon.org.uk>
Date: Tue, 24 Jan 2023 14:11:50 +0000
From: David Howells <dhowells@...hat.com>
To: Jason Gunthorpe <jgg@...dia.com>
Cc: dhowells@...hat.com, John Hubbard <jhubbard@...dia.com>,
Al Viro <viro@...iv.linux.org.uk>,
Christoph Hellwig <hch@...radead.org>,
Matthew Wilcox <willy@...radead.org>,
Jens Axboe <axboe@...nel.dk>, Jan Kara <jack@...e.cz>,
Jeff Layton <jlayton@...nel.org>,
Logan Gunthorpe <logang@...tatee.com>,
linux-fsdevel@...r.kernel.org, linux-block@...r.kernel.org,
linux-kernel@...r.kernel.org, Christoph Hellwig <hch@....de>,
linux-mm@...ck.org
Subject: Re: [PATCH v8 10/10] mm: Renumber FOLL_PIN and FOLL_GET down
Jason Gunthorpe <jgg@...dia.com> wrote:
> if (cleanup_flags & PAGE_CLEANUP_UNPIN)
> gup_put_folio(folio, 1, true);
> else if (cleanup_flags & PAGE_CLEANUP_PUT)
> gup_put_folio(folio, 1, false);
gup_put_folio() doesn't take a bool - it takes FOLL_PIN and FOLL_GET:
static void gup_put_folio(struct folio *folio, int refs, unsigned int flags)
though I could do:
if (cleanup_flags & PAGE_CLEANUP_UNPIN)
gup_put_folio(folio, 1, FOLL_PIN);
else if (cleanup_flags & PAGE_CLEANUP_PUT)
gup_put_folio(folio, 1, FOLL_GET);
But the reason I wrote it like this:
gup_flags |= cleanup_flags & PAGE_CLEANUP_UNPIN ? FOLL_PIN : 0;
gup_flags |= cleanup_flags & PAGE_CLEANUP_PUT ? FOLL_GET : 0;
is that if PAGE_CLEANUP_UNPIN == FOLL_PIN and PAGE_CLEANUP_PUT == FOLL_GET,
the C compiler optimiser should be able to turn all of that into a single AND
instruction.
David
Powered by blists - more mailing lists