From mboxrd@z Thu Jan 1 00:00:00 1970 From: Brijesh Singh Subject: Re: [PATCH v5 5/5] x86/kvm: Avoid dynamic allocation of pvclock data when SEV is active Date: Thu, 6 Sep 2018 12:50:05 -0500 Message-ID: <5171cf03-4df7-2bd1-712e-c89717fa1ebc@amd.com> References: <1536234182-2809-1-git-send-email-brijesh.singh@amd.com> <1536234182-2809-6-git-send-email-brijesh.singh@amd.com> <20180906122423.GA11144@zn.tnic> <20180906135041.GB32336@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Cc: brijesh.singh@amd.com, x86@kernel.org, linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Tom Lendacky , Thomas Gleixner , "H. Peter Anvin" , Paolo Bonzini , =?UTF-8?B?UmFkaW0gS3LEjW3DocWZ?= To: Sean Christopherson , Borislav Petkov Return-path: In-Reply-To: <20180906135041.GB32336@linux.intel.com> Content-Language: en-US Sender: linux-kernel-owner@vger.kernel.org List-Id: kvm.vger.kernel.org On 09/06/2018 08:50 AM, Sean Christopherson wrote: ... >> >> So are we going to be defining a decrypted section for every piece of >> machinery now? >> >> That's a bit too much in my book. >> >> Why can't you simply free everything in .data..decrypted on !SVE guests? > > That would prevent adding __decrypted to existing declarations, e.g. > hv_clock_boot, which would be ugly in its own right. A more generic > solution would be to add something like __decrypted_exclusive to mark > data that is used if and only if SEV is active, and then free the > SEV-only data when SEV is disabled. > > Originally, my thought was that this would be a one-off case and the > array could be freed directly in kvmclock_init(), e.g.: > Please note that kvmclock_init() is called very early during the boot process. We will not be able to use free_init_pages(...) so early. Additionally, we also need to consider the bare-metal case -- which will never call the kvmclock_init(). > static struct pvclock_vsyscall_time_info > hv_clock_aux[HVC_AUX_ARRAY_SIZE] __decrypted __aligned(PAGE_SIZE); > > ... > > void __init kvmclock_init(void) > { > u8 flags; > > if (!sev_active()) > free_init_pages("unused decrypted", > (unsigned long)hv_clock_aux, > (unsigned long)hv_clock_aux + sizeof(hv_clock_aux)); > >>