Received: by 2002:a05:6a10:1287:0:0:0:0 with SMTP id d7csp1516126pxv; Fri, 16 Jul 2021 11:01:38 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxqKqJCpQuI68KLjOCGQVguF7sohXAkCMUPIEZmrLQraTbwrlnaUCw/JPzUpGXARtOr5WBq X-Received: by 2002:a6b:f704:: with SMTP id k4mr8351514iog.191.1626458497829; Fri, 16 Jul 2021 11:01:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1626458497; cv=none; d=google.com; s=arc-20160816; b=F6n9IqFfBqGhfGlOsCGB7SvekdkP+MhYNQvhehNQnNl0Q8R5prhS3dWf7wCa14olcn FU323dRqfrCZBsZrUIiYJOmly8BeYE+3ZDlUC2GRwg4/B9Pvea3WXY7/qtN9NbD3On8D UZ6vK8CY6GaRUt5Y3Gt2R9SxhksdppqIs3VLCMrmBnl9vPpiZMhAQZ0KiGIg3qAjG1N9 /CFC84dUHOr4WwwoK4z4JdH6obGvCBLDpZQmqlHxvCNSaApsojZdpJPkn5ExmpNEVhCr 6xCEyniRNmxt5MuUV3hzr+xhWynpP4ylm5NOMLGMdIqLh/8WhywIcFxxzhqtR5i3hv7d W2TQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-disposition:mime-version :references:message-id:subject:cc:to:from:date:dkim-signature; bh=JJT3j10iJIIOsPHEEnbNQuVLTw5JnzSQ/acvTlgZAJ8=; b=MhS6zX7tGyLFbkgJwdPxOliMJfLWWGH45ed7rkKmXzbUdILTpjsYP6Jq8ntY51EYaM z6ie5f3i96KL9pZYIQnYXazK1rxlwFcyHPK9Y+4Mj2SfT1I2zOqqjSmoAU9M46zz89pp i9Gp++IP4ajiDDtQ6eoAt+sQ8HM/G1pZ3cmS/tCsSgtYgEWWJjINEaZq1XYf0wVNXKHu ZArsCL+PhCmsw6wbqZFZ4yVKzzhj8N44OgEnwDKwrqOBXeUMwgi0PJCMu3UJTuSc+22W A03MyCwdY7wjdS4w/cOq/2/Gw2vzmhb3j+tXuhAW8W8P//jBGBGpd96CRDtaUqeJvZV9 Iseg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=GwzdfStO; spf=pass (google.com: domain of linux-crypto-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-crypto-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id x17si316993jat.44.2021.07.16.11.01.00; Fri, 16 Jul 2021 11:01:37 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-crypto-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=GwzdfStO; spf=pass (google.com: domain of linux-crypto-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-crypto-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231535AbhGPSD2 (ORCPT + 99 others); Fri, 16 Jul 2021 14:03:28 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33842 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231700AbhGPSD0 (ORCPT ); Fri, 16 Jul 2021 14:03:26 -0400 Received: from mail-pg1-x52d.google.com (mail-pg1-x52d.google.com [IPv6:2607:f8b0:4864:20::52d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9AB08C061766 for ; Fri, 16 Jul 2021 11:00:31 -0700 (PDT) Received: by mail-pg1-x52d.google.com with SMTP id 62so10725756pgf.1 for ; Fri, 16 Jul 2021 11:00:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to; bh=JJT3j10iJIIOsPHEEnbNQuVLTw5JnzSQ/acvTlgZAJ8=; b=GwzdfStOFnu5bUYpHJmW5qaywa/s2A2QUEultL+m1JqZOp4yK+grRGfNrwTW9gYDni UqvwTqYFLACzmBr+3+oAJUIEDDk0SfGX3M+dkfZq23+XWfGrzkVviYu0lCuiXM9PkmfN VnO3DYxEBTHGP7EBr9YSyyvciKgdSDS/ekdvhUo9MHlz9j6dStUSGQcBD0oB8sHJKH3U gWA5LIEuf9cVeVGn0fTk3/vs6U082z3MZAKK3zm+d4QRce0q2sMrV2JKMM+i6LkRQuyQ 6PU1WFaWteTtKwq+nAD46Kkt1uKcDZ7ZIHdLOQiNxLErn0Ufz5tdxfui9LCKHwLL6ctE vBnA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to; bh=JJT3j10iJIIOsPHEEnbNQuVLTw5JnzSQ/acvTlgZAJ8=; b=NUrkQI10lHTP3Vo0b7z1EgzIL8IfY5Zf6Ilubpqf15EVMVMCuxZ3WSfw+9amB/zQqQ X1Sm5VhvCKCos6S+rD4OdWGf/g/BD6qBsaG+wG9WD2tkfHAJ+AvjcDBaSZcJV3rOp/0+ M4iSPPR7k18TaTFSHapjrIGmy6dEGsqL2TDwGXo+lR9NC7BSCk0ZEFgTSVGvGstTDUZ1 emyfD+jVKic5uccMLv39QKMqe+LTfsyEpRcpOfzYf7LLwT9mOr7vT/dg05FenfOx6ohV 6fqZtqeqyg8vYjAaEBnvgYvK7bJSsIkG035Vtu1zpn44NcsqGDybQAN/G9hOpt4Uks0J iODQ== X-Gm-Message-State: AOAM531tdN9/Zv3fnv+gi0DlwO/HgJpj5IeTUgAnM7zJEao85X9RxPWc nAIj6jJfg4R02sFTIfgx3kxrPw== X-Received: by 2002:a65:6118:: with SMTP id z24mr11085274pgu.325.1626458430711; Fri, 16 Jul 2021 11:00:30 -0700 (PDT) Received: from google.com (157.214.185.35.bc.googleusercontent.com. [35.185.214.157]) by smtp.gmail.com with ESMTPSA id cx4sm12694608pjb.53.2021.07.16.11.00.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 16 Jul 2021 11:00:30 -0700 (PDT) Date: Fri, 16 Jul 2021 18:00:26 +0000 From: Sean Christopherson To: Brijesh Singh Cc: x86@kernel.org, linux-kernel@vger.kernel.org, kvm@vger.kernel.org, linux-efi@vger.kernel.org, platform-driver-x86@vger.kernel.org, linux-coco@lists.linux.dev, linux-mm@kvack.org, linux-crypto@vger.kernel.org, Thomas Gleixner , Ingo Molnar , Joerg Roedel , Tom Lendacky , "H. Peter Anvin" , Ard Biesheuvel , Paolo Bonzini , Vitaly Kuznetsov , Wanpeng Li , Jim Mattson , Andy Lutomirski , Dave Hansen , Sergio Lopez , Peter Gonda , Peter Zijlstra , Srinivas Pandruvada , David Rientjes , Dov Murik , Tobin Feldman-Fitzthum , Borislav Petkov , Michael Roth , Vlastimil Babka , tony.luck@intel.com, npmccallum@redhat.com, brijesh.ksingh@gmail.com Subject: Re: [PATCH Part2 RFC v4 21/40] KVM: SVM: Add initial SEV-SNP support Message-ID: References: <20210707183616.5620-1-brijesh.singh@amd.com> <20210707183616.5620-22-brijesh.singh@amd.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20210707183616.5620-22-brijesh.singh@amd.com> Precedence: bulk List-ID: X-Mailing-List: linux-crypto@vger.kernel.org On Wed, Jul 07, 2021, Brijesh Singh wrote: > diff --git a/arch/x86/kvm/svm/sev.c b/arch/x86/kvm/svm/sev.c > index 411ed72f63af..abca2b9dee83 100644 > --- a/arch/x86/kvm/svm/sev.c > +++ b/arch/x86/kvm/svm/sev.c > @@ -52,9 +52,14 @@ module_param_named(sev, sev_enabled, bool, 0444); > /* enable/disable SEV-ES support */ > static bool sev_es_enabled = true; > module_param_named(sev_es, sev_es_enabled, bool, 0444); > + > +/* enable/disable SEV-SNP support */ > +static bool sev_snp_enabled = true; Is it safe to incrementally introduce SNP support? Or should the module param be hidden until all support is in place? E.g. what will happen when KVM allows userspace to create SNP guests but doesn't yet have the RMP management added? > +module_param_named(sev_snp, sev_snp_enabled, bool, 0444); > #else > #define sev_enabled false > #define sev_es_enabled false > +#define sev_snp_enabled false > #endif /* CONFIG_KVM_AMD_SEV */ > > #define AP_RESET_HOLD_NONE 0 > @@ -1825,6 +1830,7 @@ void __init sev_hardware_setup(void) > { > #ifdef CONFIG_KVM_AMD_SEV > unsigned int eax, ebx, ecx, edx, sev_asid_count, sev_es_asid_count; > + bool sev_snp_supported = false; > bool sev_es_supported = false; > bool sev_supported = false; > > @@ -1888,9 +1894,21 @@ void __init sev_hardware_setup(void) > pr_info("SEV-ES supported: %u ASIDs\n", sev_es_asid_count); > sev_es_supported = true; > > + /* SEV-SNP support requested? */ > + if (!sev_snp_enabled) > + goto out; > + > + /* Is SEV-SNP enabled? */ > + if (!cpu_feature_enabled(X86_FEATURE_SEV_SNP)) Random question, why use cpu_feature_enabled? Did something change in cpufeatures that prevents using boot_cpu_has() here? > + goto out; > + > + pr_info("SEV-SNP supported: %u ASIDs\n", min_sev_asid - 1); Use sev_es_asid_count instead of manually recomputing the same; the latter obfuscates the fact that ES and SNP share the same ASID pool. Even better would be to report ES+SNP together, otherwise the user could easily interpret ES and SNP having separate ASID pools. And IMO the gotos for SNP are overkill, e.g. sev_es_supported = true; sev_snp_supported = sev_snp_enabled && cpu_feature_enabled(X86_FEATURE_SEV_SNP); pr_info("SEV-ES %ssupported: %u ASIDs\n", sev_snp_supported ? "and SEV-SNP " : "", sev_es_asid_count); > + sev_snp_supported = true; > + > out: > sev_enabled = sev_supported; > sev_es_enabled = sev_es_supported; > + sev_snp_enabled = sev_snp_supported; > #endif > } > > diff --git a/arch/x86/kvm/svm/svm.h b/arch/x86/kvm/svm/svm.h > index 1175edb02d33..b9ea99f8579e 100644 > --- a/arch/x86/kvm/svm/svm.h > +++ b/arch/x86/kvm/svm/svm.h > @@ -58,6 +58,7 @@ enum { > struct kvm_sev_info { > bool active; /* SEV enabled guest */ > bool es_active; /* SEV-ES enabled guest */ > + bool snp_active; /* SEV-SNP enabled guest */ > unsigned int asid; /* ASID used for this guest */ > unsigned int handle; /* SEV firmware handle */ > int fd; /* SEV device fd */ > @@ -232,6 +233,17 @@ static inline bool sev_es_guest(struct kvm *kvm) > #endif > } > > +static inline bool sev_snp_guest(struct kvm *kvm) > +{ > +#ifdef CONFIG_KVM_AMD_SEV > + struct kvm_sev_info *sev = &to_kvm_svm(kvm)->sev_info; > + > + return sev_es_guest(kvm) && sev->snp_active; Can't this be reduced to: return to_kvm_svm(kvm)->sev_info.snp_active; KVM should never set snp_active without also setting es_active. Side topic, I think it would also be worthwhile to add to_sev (or maybe to_kvm_sev) given the frequency of the "&to_kvm_svm(kvm)->sev_info" pattern. > +#else > + return false; > +#endif > +} > + > static inline void vmcb_mark_all_dirty(struct vmcb *vmcb) > { > vmcb->control.clean = 0; > -- > 2.17.1 >