[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20200922145323.GG32101@casper.infradead.org>
Date: Tue, 22 Sep 2020 15:53:23 +0100
From: Matthew Wilcox <willy@...radead.org>
To: Christoph Hellwig <hch@....de>
Cc: Andrew Morton <akpm@...ux-foundation.org>,
Peter Zijlstra <peterz@...radead.org>,
Boris Ostrovsky <boris.ostrovsky@...cle.com>,
Juergen Gross <jgross@...e.com>,
Stefano Stabellini <sstabellini@...nel.org>,
Jani Nikula <jani.nikula@...ux.intel.com>,
Joonas Lahtinen <joonas.lahtinen@...ux.intel.com>,
Rodrigo Vivi <rodrigo.vivi@...el.com>,
Minchan Kim <minchan@...nel.org>,
Nitin Gupta <ngupta@...are.org>, x86@...nel.org,
xen-devel@...ts.xenproject.org, linux-kernel@...r.kernel.org,
intel-gfx@...ts.freedesktop.org, dri-devel@...ts.freedesktop.org,
linux-mm@...ck.org
Subject: Re: [PATCH 3/6] drm/i915: use vmap in shmem_pin_map
On Tue, Sep 22, 2020 at 04:39:06PM +0200, Christoph Hellwig wrote:
> On Tue, Sep 22, 2020 at 12:21:44PM +0100, Matthew Wilcox wrote:
> > Actually, vfree() will work today; I cc'd you on a documentation update
> > to make it clear that this is permitted.
>
> vfree calls __free_pages, the i915 and a lot of other code calls
> put_page. They are mostly the same, but not quite and everytime I
> look into that mess I'm more confused than before.
>
> Can someone in the know write sensible documentation on when to use
> __free_page(s) vs put_page?
I started on that, and then I found a bug that's been lurking for 12
years, so that delayed the documentation somewhat. The short answer is
that __free_pages() lets you free non-compound high-order pages while
put_page() can only free order-0 and compound pages.
I would really like to overhaul our memory allocation APIs:
current new
__get_free_page(s) alloc_page(s)
free_page(s) free_page(s)
alloc_page(s) get_free_page(s)
__free_pages put_page_order
Then put_page() and put_page_order() are more obviously friends.
But I cannot imagine a world in which Linus says yes to that upheaval.
He's previous expressed dislike of the get_free_page() family of APIs,
and thinks all those callers should just use kmalloc(). Maybe we can
make that transition happen, now that kmalloc() aligns larger allocations.
Powered by blists - more mailing lists