[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20180306083425.gwt7j5cxtd6vrd3r@node.shutemov.name>
Date: Tue, 6 Mar 2018 11:34:25 +0300
From: "Kirill A. Shutemov" <kirill@...temov.name>
To: Dave Hansen <dave.hansen@...el.com>
Cc: "Kirill A. Shutemov" <kirill.shutemov@...ux.intel.com>,
Ingo Molnar <mingo@...hat.com>, x86@...nel.org,
Thomas Gleixner <tglx@...utronix.de>,
"H. Peter Anvin" <hpa@...or.com>,
Tom Lendacky <thomas.lendacky@....com>,
Kai Huang <kai.huang@...ux.intel.com>,
linux-kernel@...r.kernel.org, linux-mm@...ck.org
Subject: Re: [RFC, PATCH 18/22] x86/mm: Handle allocation of encrypted pages
On Mon, Mar 05, 2018 at 11:03:55AM -0800, Dave Hansen wrote:
> On 03/05/2018 08:26 AM, Kirill A. Shutemov wrote:
> > -#define __alloc_zeroed_user_highpage(movableflags, vma, vaddr) \
> > - alloc_page_vma(GFP_HIGHUSER | __GFP_ZERO | movableflags, vma, vaddr)
> > #define __HAVE_ARCH_ALLOC_ZEROED_USER_HIGHPAGE
> > +#define __alloc_zeroed_user_highpage(movableflags, vma, vaddr) \
> > +({ \
> > + struct page *page; \
> > + gfp_t gfp = movableflags | GFP_HIGHUSER; \
> > + if (vma_is_encrypted(vma)) \
> > + page = __alloc_zeroed_encrypted_user_highpage(gfp, vma, vaddr); \
> > + else \
> > + page = alloc_page_vma(gfp | __GFP_ZERO, vma, vaddr); \
> > + page; \
> > +})
>
> This is pretty darn ugly and also adds a big old branch into the hottest
> path in the page allocator.
>
> It's also really odd that you strip __GFP_ZERO and then go ahead and
> zero the encrypted page unconditionally. It really makes me wonder if
> this is the right spot to be doing this.
>
> Can we not, for instance do it inside alloc_page_vma()?
Yes we can.
It would require substantial change into page allocation path for
CONFIG_NUMA=n as we don't path down vma at the moment. And without vma we
don't have a way to know which KeyID to use.
I will explore how it would fit together.
--
Kirill A. Shutemov
Powered by blists - more mailing lists