From: "Kirill A. Shutemov" <kirill@shutemov.name>
To: Dave Hansen <dave.hansen@intel.com>
Cc: "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>,
Borislav Petkov <bp@alien8.de>, Andy Lutomirski <luto@kernel.org>,
Sean Christopherson <seanjc@google.com>,
Andrew Morton <akpm@linux-foundation.org>,
Joerg Roedel <jroedel@suse.de>, Ard Biesheuvel <ardb@kernel.org>,
Andi Kleen <ak@linux.intel.com>,
Kuppuswamy Sathyanarayanan
<sathyanarayanan.kuppuswamy@linux.intel.com>,
David Rientjes <rientjes@google.com>,
Vlastimil Babka <vbabka@suse.cz>,
Tom Lendacky <thomas.lendacky@amd.com>,
Thomas Gleixner <tglx@linutronix.de>,
Peter Zijlstra <peterz@infradead.org>,
Paolo Bonzini <pbonzini@redhat.com>,
Ingo Molnar <mingo@redhat.com>,
Varad Gautam <varad.gautam@suse.com>,
Dario Faggioli <dfaggioli@suse.com>,
Brijesh Singh <brijesh.singh@amd.com>,
Mike Rapoport <rppt@kernel.org>,
David Hildenbrand <david@redhat.com>,
x86@kernel.org, linux-mm@kvack.org, linux-coco@lists.linux.dev,
linux-efi@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCHv4 3/8] efi/x86: Implement support for unaccepted memory
Date: Sat, 9 Apr 2022 22:41:37 +0300 [thread overview]
Message-ID: <20220409194137.yui73qnno5bd45xn@box.shutemov.name> (raw)
In-Reply-To: <c4b987d5-00d3-40ea-4c20-bf82b7512dec@intel.com>
On Fri, Apr 08, 2022 at 10:26:14AM -0700, Dave Hansen wrote:
> On 4/5/22 16:43, Kirill A. Shutemov wrote:
> > +void mark_unaccepted(struct boot_params *params, u64 start, u64 end)
> > +{
> > + /*
> > + * The accepted memory bitmap only works at PMD_SIZE granularity.
> > + * If a request comes in to mark memory as unaccepted which is not
> > + * PMD_SIZE-aligned, simply accept the memory now since it can not be
> > + * *marked* as unaccepted.
> > + */
> > +
> > + /*
> > + * Accept small regions that might not be able to be represented
> > + * in the bitmap:
> > + */
> > + if (end - start < 2 * PMD_SIZE) {
> > + __accept_memory(start, end);
> > + return;
> > + }
>
> This is not my first time looking at this code and I still had to think
> about this a bit. That's not good. That pathological case here is
> actually something like this:
>
> | 4k | 2044k + 2044k | 4k |
> ^ 0x0 ^ 2MB ^ 4MB
>
> Where we have a 2MB-aligned 4k accepted area, a 4088k unaccepted area,
> then another 4k accepted area. That will not result in any bits being
> set in the accepted memory bitmap because no 2MB region is fully accepted.
>
> The one oddball case is this:
>
> | 4k | 2044k | 2048k |
> ^ 0x0 ^ 2MB ^ 4MB
>
> Which would fall into the if() above, but *can* have part of its range
> marked in the bitmap.
>
> Maybe we need something more like this:
>
> /*
> * Accept small regions that might not be able to be represented
> * in the bitmap. This is a bit imprecise and may accept some
> * areas that could have been represented in the bitmap instead.
> * But, the imprecision makes the code simpler by ensuring that
> * at least one bit will be set int the bitmap below.
> */
Okay, will change.
> > diff --git a/drivers/firmware/efi/Kconfig b/drivers/firmware/efi/Kconfig
> > index 2c3dac5ecb36..b17ceec757d0 100644
> > --- a/drivers/firmware/efi/Kconfig
> > +++ b/drivers/firmware/efi/Kconfig
> > @@ -243,6 +243,21 @@ config EFI_DISABLE_PCI_DMA
> > options "efi=disable_early_pci_dma" or "efi=no_disable_early_pci_dma"
> > may be used to override this option.
> >
> > +config UNACCEPTED_MEMORY
> > + bool
> > + depends on EFI_STUB
> > + depends on !KEXEC_CORE
>
> The changelog should probably say something about how the kexec()
> incompatibility is going to be rectified in the future.
Okay.
> > + help
> > + Some Virtual Machine platforms, such as Intel TDX, require
> > + some memory to be "accepted" by the guest before it can be used.
> > + This mechanism helps prevent malicious hosts from making changes
> > + to guest memory.
> > +
> > + UEFI specification v2.9 introduced EFI_UNACCEPTED_MEMORY memory type.
> > +
> > + This option adds support for unaccepted memory and makes such memory
> > + usable by kernel.
> > +
> > endmenu
>
> BTW, what happens if this is compiled out? Do TDX guests just lose all
> the unaccepted memory?
No. It will not have access to unaccepted memory and will only use memory
accepted by BIOS.
> Should TDX be selecting this or something?
Yes, it should and we do this.
> > @@ -504,6 +506,13 @@ setup_e820(struct boot_params *params, struct setup_data *e820ext, u32 e820ext_s
> > e820_type = E820_TYPE_PMEM;
> > break;
> >
> > + case EFI_UNACCEPTED_MEMORY:
> > + if (!IS_ENABLED(CONFIG_UNACCEPTED_MEMORY))
> > + continue;
>
> This seems worthy of a pr_info(). We're effectively throwing away
> memory with this "continue", right?
Yes. In this case we threat unaccepted as reserved and inaccessible to
kernel.
Maybe pr_warn() is more appropriate.
--
Kirill A. Shutemov
next prev parent reply other threads:[~2022-04-09 19:40 UTC|newest]
Thread overview: 67+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-04-05 23:43 [PATCHv4 0/8] mm, x86/cc: Implement support for unaccepted memory Kirill A. Shutemov
2022-04-05 23:43 ` [PATCHv4 1/8] mm: Add " Kirill A. Shutemov
2022-04-08 18:55 ` Dave Hansen
2022-04-09 15:54 ` Kirill A. Shutemov
2022-04-11 6:38 ` Dave Hansen
2022-04-11 10:07 ` Mike Rapoport
2022-04-13 11:40 ` Kirill A. Shutemov
2022-04-13 14:48 ` Mike Rapoport
2022-04-13 15:15 ` Kirill A. Shutemov
2022-04-13 20:06 ` Mike Rapoport
2022-04-11 8:47 ` David Hildenbrand
2022-04-08 19:04 ` David Hildenbrand
2022-04-08 19:11 ` Dave Hansen
2022-04-09 17:52 ` Kirill A. Shutemov
2022-04-11 6:41 ` Dave Hansen
2022-04-11 15:55 ` Borislav Petkov
2022-04-11 16:27 ` Dave Hansen
2022-04-11 18:55 ` Tom Lendacky
2022-04-12 8:15 ` David Hildenbrand
2022-04-12 16:08 ` Dave Hansen
2022-04-13 10:36 ` David Hildenbrand
2022-04-13 11:30 ` Kirill A. Shutemov
2022-04-13 11:32 ` David Hildenbrand
2022-04-13 15:36 ` Dave Hansen
2022-04-13 16:07 ` David Hildenbrand
2022-04-13 16:13 ` Dave Hansen
2022-04-13 16:24 ` Kirill A. Shutemov
2022-04-13 14:39 ` Mike Rapoport
2022-04-05 23:43 ` [PATCHv4 2/8] efi/x86: Get full memory map in allocate_e820() Kirill A. Shutemov
2022-04-13 9:59 ` Borislav Petkov
2022-04-13 11:45 ` Kirill A. Shutemov
2022-04-05 23:43 ` [PATCHv4 3/8] efi/x86: Implement support for unaccepted memory Kirill A. Shutemov
2022-04-08 17:26 ` Dave Hansen
2022-04-09 19:41 ` Kirill A. Shutemov [this message]
2022-04-14 15:55 ` Borislav Petkov
2022-04-15 22:24 ` Borislav Petkov
2022-04-18 15:55 ` Kirill A. Shutemov
2022-04-18 16:38 ` Borislav Petkov
2022-04-18 20:24 ` Kirill A. Shutemov
2022-04-18 21:01 ` Borislav Petkov
2022-04-18 23:50 ` Kirill A. Shutemov
2022-04-19 7:39 ` Borislav Petkov
2022-04-19 15:30 ` Kirill A. Shutemov
2022-04-19 16:38 ` Dave Hansen
2022-04-19 19:23 ` Borislav Petkov
2022-04-21 12:26 ` Borislav Petkov
2022-04-22 0:21 ` Kirill A. Shutemov
2022-04-22 9:30 ` Borislav Petkov
2022-04-22 13:26 ` Kirill A. Shutemov
2022-04-05 23:43 ` [PATCHv4 4/8] x86/boot/compressed: Handle " Kirill A. Shutemov
2022-04-08 17:57 ` Dave Hansen
2022-04-09 20:20 ` Kirill A. Shutemov
2022-04-11 6:49 ` Dave Hansen
2022-04-05 23:43 ` [PATCHv4 5/8] x86/mm: Reserve unaccepted memory bitmap Kirill A. Shutemov
2022-04-08 18:08 ` Dave Hansen
2022-04-09 20:43 ` Kirill A. Shutemov
2022-04-05 23:43 ` [PATCHv4 6/8] x86/mm: Provide helpers for unaccepted memory Kirill A. Shutemov
2022-04-08 18:15 ` Dave Hansen
2022-04-08 19:21 ` Dave Hansen
2022-04-13 16:08 ` Kirill A. Shutemov
2022-04-05 23:43 ` [PATCHv4 7/8] x86/tdx: Unaccepted memory support Kirill A. Shutemov
2022-04-08 18:28 ` Dave Hansen
2022-04-05 23:43 ` [PATCHv4 8/8] mm/vmstat: Add counter for memory accepting Kirill A. Shutemov
2022-04-12 8:18 ` David Hildenbrand
2022-04-08 17:02 ` [PATCHv4 0/8] mm, x86/cc: Implement support for unaccepted memory Dave Hansen
2022-04-09 23:44 ` Kirill A. Shutemov
2022-04-21 12:29 ` Borislav Petkov
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=20220409194137.yui73qnno5bd45xn@box.shutemov.name \
--to=kirill@shutemov.name \
--cc=ak@linux.intel.com \
--cc=akpm@linux-foundation.org \
--cc=ardb@kernel.org \
--cc=bp@alien8.de \
--cc=brijesh.singh@amd.com \
--cc=dave.hansen@intel.com \
--cc=david@redhat.com \
--cc=dfaggioli@suse.com \
--cc=jroedel@suse.de \
--cc=kirill.shutemov@linux.intel.com \
--cc=linux-coco@lists.linux.dev \
--cc=linux-efi@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=luto@kernel.org \
--cc=mingo@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peterz@infradead.org \
--cc=rientjes@google.com \
--cc=rppt@kernel.org \
--cc=sathyanarayanan.kuppuswamy@linux.intel.com \
--cc=seanjc@google.com \
--cc=tglx@linutronix.de \
--cc=thomas.lendacky@amd.com \
--cc=varad.gautam@suse.com \
--cc=vbabka@suse.cz \
--cc=x86@kernel.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;
as well as URLs for NNTP newsgroup(s).