Message ID | 20240202-provide-cc_vendor-without-arch_has_cc_platform-v1-1-09ad5f2a3099@kernel.org |
---|---|
State | New |
Headers |
Return-Path: <linux-kernel+bounces-50731-ouuuleilei=gmail.com@vger.kernel.org> Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:9bc1:b0:106:209c:c626 with SMTP id op1csp762647dyc; Fri, 2 Feb 2024 15:53:51 -0800 (PST) X-Google-Smtp-Source: AGHT+IHpw1yeeu6pK511l3zF9701ZSSLY5DmTr6XpLnxHVwOULJAQ8BgCUitLGkkV/2dhOyshjjr X-Received: by 2002:a17:90a:6c65:b0:294:9bfc:a487 with SMTP id x92-20020a17090a6c6500b002949bfca487mr9988938pjj.17.1706918031740; Fri, 02 Feb 2024 15:53:51 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1706918031; cv=pass; d=google.com; s=arc-20160816; b=zxmfcrht/mFEnmoMPlMqgnXNfC/OpHeGZF08oqkTSteLGXYA0QxGRfcCtFcOMyjwIm pXaPQcfKNzJxgLHEPH4pywDEtf+6AQbnFkLbfoslSXItsjVCHh3GeZW8IvYZe9/qK4PB 7RWMUN65KoS9O7rRzkYmB58U6N9cg6M1r0de049ylWsHLtMQyQPT7Tzi1LB2fu2QWGU8 VjDhTKTdmRDQjpe8AlQJ577m0m6gd1fvCE7Tb+II8JTG2UWwabp0+hIS4doGY6J/SUro hPPpoanorSkMy8gHjjP3gMuJJZ8zxPALniourRTO68TPIMAYjAB46BEvPndFPtn6AbRC x9WQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=cc:to:message-id:content-transfer-encoding:mime-version :list-unsubscribe:list-subscribe:list-id:precedence:subject:date :from:dkim-signature; bh=KGVh+prxcjscYhBVgA5K88LU7KiWG7xDBBpIK1QwCL4=; fh=kN80tmIV1TKFeNcxOSeVMY+73rKIWveWcZzWk2MvvHs=; b=abhXRvywKf7GvtZQ4bpXxH/WqTY16QoCZdgy7JLk/85Sj1nrCq75kyUt7nf3t8Kb4P lZZT+Yp7a+bC8A5uXSgUFradocu/ZZWkSPBMSF4qpgYXSx1EDN8HVLQessw1aY8+hDB6 xJ9PPpdYF4LHIZvd3MH61wtKXJfFGA7Vm3+eSjES56YLwu87ij5pfNudP7x2ltyvY0qF w6nu+LqgBbynM2IkSVlkzOMXJl1SPctL6WgpGGnmrtPK9u1rl5XwSxt6o8ZHse36HymT 4T+sfEptfGS+bh8bq6ClZFrEM2l4D0OB22q5dgSMf/Kh/ygXVow6OLCKvmf6RvLQEBhr KLsA==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=Clu3thbS; arc=pass (i=1 dkim=pass dkdomain=kernel.org); spf=pass (google.com: domain of linux-kernel+bounces-50731-ouuuleilei=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-50731-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org X-Forwarded-Encrypted: i=1; AJvYcCVSjGIeVBHteeZmzb/y2LS3inAptrKylyQr2tbBEnyfXG0q/B79I8vbWe65A1k8n64P8IcrhtWnQymYXNFWzzgQxQNEGA== Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [139.178.88.99]) by mx.google.com with ESMTPS id gm13-20020a17090b100d00b00295c8607241si652315pjb.132.2024.02.02.15.53.51 for <ouuuleilei@gmail.com> (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 02 Feb 2024 15:53:51 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-50731-ouuuleilei=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) client-ip=139.178.88.99; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=Clu3thbS; arc=pass (i=1 dkim=pass dkdomain=kernel.org); spf=pass (google.com: domain of linux-kernel+bounces-50731-ouuuleilei=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-50731-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id 83681289A94 for <ouuuleilei@gmail.com>; Fri, 2 Feb 2024 23:53:51 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id CABA612D75C; Fri, 2 Feb 2024 23:53:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Clu3thbS" Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 15B8585946; Fri, 2 Feb 2024 23:53:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706918018; cv=none; b=YuTnGWmMw0Gq9xIs5SKjLO0zmYYeVH0SvGEfZc6QHSVOkJxx+29uABEwdEjmk5T8wx9JC+m3alA/JRpvzjTYjuLTI9eb3q7X2W1k5hP/EGyO7bWnx/h5Hr2+Uu2PfunixFAWa5rdAByswXoOf8mFVGAZq0qZnyaO2bglv8aJ63o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706918018; c=relaxed/simple; bh=ToVjAvQmv/dtNRn5p4/8OjGcotgzRI0qmd7n0/i3AJA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:To:Cc; b=sVfPvS2/xStBFpUsWuVpkNqyUerEyg1KmvIzEhI7WfghfXqrGAX6LnpMsfQXCL9iOJd1g+FsaQ3mhwonkzEzpwxPNT2//2jfj4bd4V4rO2GQXdhsmhI+K3ntWhNgvKFndPRB7T+BBDdTTQhWXigpDHNqPy7v9MNpl9AmNCONHJo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Clu3thbS; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id AEC73C433C7; Fri, 2 Feb 2024 23:53:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1706918017; bh=ToVjAvQmv/dtNRn5p4/8OjGcotgzRI0qmd7n0/i3AJA=; h=From:Date:Subject:To:Cc:From; b=Clu3thbSoR8/bxiVDj/+7YLjpR9VmIrYwYhNJwQlNPbwg7l83CnutrlFfMFD907Sg B447oCeU97r/zGad3HHVC0pzuDGf5Qb6KXpsqcWkoRaPcpNXkSZ2a2sxQf8THivYaN +WpZkHcoOVWHSBjpzhgy7jCgdKXp0WE8U88W30qe9Ho2IZrii68KRQTMeqkaQXrpdl JUM6kM26LOqoclr7wmUwZpL/0q1imPWBbCs+1jySwU+iEXFhYG6aYwF7vFlF/J6ts+ KJaoT/rNZqL6+RpLibWGxsAWP7qPYv5bER7dGSqWoGPatiyJeYmtcJXdddSWGiuDbG HyuW/Czm23xRg== From: Nathan Chancellor <nathan@kernel.org> Date: Fri, 02 Feb 2024 16:53:21 -0700 Subject: [PATCH] x86/coco: Define cc_vendor without CONFIG_ARCH_HAS_CC_PLATFORM Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: <linux-kernel.vger.kernel.org> List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org> List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20240202-provide-cc_vendor-without-arch_has_cc_platform-v1-1-09ad5f2a3099@kernel.org> X-B4-Tracking: v=1; b=H4sIAHCAvWUC/x2N0QoCIRBFf2XxuQFzE6JfiZBBxxwoldG1YNl/T 3o5cDhw764aCVNTt2VXQoMblzzlfFqUT5ifBBymK6PNRU9AlTI4EHjvBuVQBD7cU9k6oPjkEjY 3U31hj0XesBqLa0S6WqvVHK1Ckb//w/vjOH7efz0/gAAAAA== To: pbonzini@redhat.com, tglx@linutronix.de, mingo@redhat.com, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org Cc: kirill.shutemov@linux.intel.com, ndesaulniers@google.com, morbo@google.com, justinstitt@google.com, linux-kernel@vger.kernel.org, llvm@lists.linux.dev, patches@lists.linux.dev, Nathan Chancellor <nathan@kernel.org> X-Mailer: b4 0.13-dev X-Developer-Signature: v=1; a=openpgp-sha256; l=2621; i=nathan@kernel.org; h=from:subject:message-id; bh=ToVjAvQmv/dtNRn5p4/8OjGcotgzRI0qmd7n0/i3AJA=; b=owGbwMvMwCUmm602sfCA1DTG02pJDKl7GxpezDlQ0XH0+nVGxhge+Z4nixuUWrfvOzjvZqtVo uH26bn3O0pZGMS4GGTFFFmqH6seNzScc5bxxqlJMHNYmUCGMHBxCsBEKroY/qfcFXhU3mi2N2Lv 1Ot+635tz2TleKKdwvjCa9KTKQv2rp7H8FecZ/HrC1PyTL9dP/ak1bnIJv+phFfytEP5/ae8JZb wpzIDAA== X-Developer-Key: i=nathan@kernel.org; a=openpgp; fpr=2437CB76E544CB6AB3D9DFD399739260CB6CB716 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1789833282165260475 X-GMAIL-MSGID: 1789833282165260475 |
Series |
x86/coco: Define cc_vendor without CONFIG_ARCH_HAS_CC_PLATFORM
|
|
Commit Message
Nathan Chancellor
Feb. 2, 2024, 11:53 p.m. UTC
After commit a9ef277488cf ("x86/kvm: Fix SEV check in sev_map_percpu_data()"), there is a build error when building x86_64_defconfig with GCOV using LLVM: ld.lld: error: undefined symbol: cc_vendor >>> referenced by kvm.c >>> arch/x86/kernel/kvm.o:(kvm_smp_prepare_boot_cpu) in archive vmlinux.a which corresponds to if (cc_vendor != CC_VENDOR_AMD || !cc_platform_has(CC_ATTR_GUEST_MEM_ENCRYPT)) return; Without GCOV, clang is able to eliminate the use of cc_vendor because cc_platform_has() evaluates to false when CONFIG_ARCH_HAS_CC_PLATFORM is not set, meaning that if statement will be true no matter what value cc_vendor has. With GCOV, the instrumentation keeps the use of cc_vendor around for code coverage purposes but cc_vendor is only declared, not defined, without CONFIG_ARCH_HAS_CC_PLATFORM, leading to the build error above. Provide a macro definition of cc_vendor when CONFIG_ARCH_HAS_CC_PLATFORM is not set with a value of CC_VENDOR_NONE, so that the first condition can always be evaluated/eliminated at compile time, avoiding the build error altogether. This is very similar to the situation prior to commit da86eb961184 ("x86/coco: Get rid of accessor functions"). Signed-off-by: Nathan Chancellor <nathan@kernel.org> --- Commit a9ef277488cf ("x86/kvm: Fix SEV check in sev_map_percpu_data()") exposes this build error but I think it is really a problem with commit da86eb961184 ("x86/coco: Get rid of accessor functions"), although I am not positive so I left out the fixes tag. It would be nice if this could go along with KVM tree that has that change but it is obviously well within -tip's territory so I will just aim it at both parties and let them figure it out :) --- arch/x86/include/asm/coco.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) --- base-commit: a9ef277488cfc1b7da88235dc11c338a14f34835 change-id: 20240202-provide-cc_vendor-without-arch_has_cc_platform-325a3fae8550 Best regards,
Comments
On Fri, Feb 02, 2024 at 04:53:21PM -0700, Nathan Chancellor wrote: > Commit a9ef277488cf ("x86/kvm: Fix SEV check in sev_map_percpu_data()") > exposes this build error but I think it is really a problem with commit > da86eb961184 ("x86/coco: Get rid of accessor functions"), although I am > not positive so I left out the fixes tag. Well, which is it? If you're running those GCOV LLVM tests regularly and you haven't seen it after da86eb961184, then it cannot be that one, can it? In any case, you can simply revert a9ef277488cf and see if it fires. > It would be nice if this could go along with KVM tree that has that > change but it is obviously well within -tip's territory so I will just > aim it at both parties and let them figure it out :) The answer to the above question would determine the proper Fixes tag and who picks it up. Thx.
On Sat, Feb 03, 2024 at 11:29:25AM +0100, Borislav Petkov wrote: > On Fri, Feb 02, 2024 at 04:53:21PM -0700, Nathan Chancellor wrote: > > Commit a9ef277488cf ("x86/kvm: Fix SEV check in sev_map_percpu_data()") > > exposes this build error but I think it is really a problem with commit > > da86eb961184 ("x86/coco: Get rid of accessor functions"), although I am > > not positive so I left out the fixes tag. > > Well, which is it? Perhaps I should have expanded more on this in the commit message or trailer. > If you're running those GCOV LLVM tests regularly and you haven't seen > it after da86eb961184, then it cannot be that one, can it? Well the issue is that at da86eb961184, all uses of cc_vendor is in code that is guarded by either CONFIG_AMD_MEM_ENCRYPT or CONFIG_INTEL_TDX_GUEST, which both select CONFIG_ARCH_HAS_CC_PLATFORM, so this build error cannot happen at that revision. $ git grep cc_vendor da86eb961184 da86eb961184:arch/x86/coco/core.c:enum cc_vendor cc_vendor __ro_after_init = CC_VENDOR_NONE; da86eb961184:arch/x86/coco/core.c: switch (cc_vendor) { da86eb961184:arch/x86/coco/core.c: switch (cc_vendor) { da86eb961184:arch/x86/coco/core.c: switch (cc_vendor) { da86eb961184:arch/x86/coco/tdx/tdx.c: cc_vendor = CC_VENDOR_INTEL; da86eb961184:arch/x86/hyperv/ivm.c: cc_vendor = CC_VENDOR_AMD; da86eb961184:arch/x86/include/asm/coco.h:enum cc_vendor { da86eb961184:arch/x86/include/asm/coco.h:extern enum cc_vendor cc_vendor; da86eb961184:arch/x86/include/asm/sev.h: if (cc_vendor == CC_VENDOR_AMD && da86eb961184:arch/x86/include/asm/sev.h: if (cc_vendor == CC_VENDOR_AMD && da86eb961184:arch/x86/include/asm/sev.h: if (cc_vendor == CC_VENDOR_AMD && da86eb961184:arch/x86/mm/mem_encrypt_identity.c: cc_vendor = CC_VENDOR_AMD; However, is it really a9ef277488cf's fault that it happened to use cc_vendor in generic code where those same conditions may or may not satisfied? If it had used cc_get_vendor() instead if da86eb961184 had not existed, this issue would not have happened. I have no issues with blaming a9ef277488cf but I think da86eb961184 is equally blamable for removing the option to use cc_vendor in generic x86 code where CONFIG_ARCH_HAS_CC_PLATFORM may not be set. Hopefully that at least carifies the "which is it?" question, I'll do whatever you think is best. Cheers, Nathan
On Sat, Feb 03, 2024 at 09:08:06AM -0700, Nathan Chancellor wrote: > I have no issues with blaming a9ef277488cf but I think da86eb961184 is > equally blamable for removing the option to use cc_vendor in generic x86 > code where CONFIG_ARCH_HAS_CC_PLATFORM may not be set. Hopefully that at > least carifies the "which is it?" question, I'll do whatever you think > is best. I guess I wasn't clear enough, sorry about that. Of the two, that one should be in Fixes which is the first one which causes the build issue so that the fix can be backported to the respective kernels. IOW, if you can't trigger with da86eb961184, then a9ef277488cf should be in Fixes and your fix should go through the KVM tree, along with a9ef277488cf. How does that sound? Thx.
On Sat, Feb 03, 2024 at 08:07:29PM +0100, Borislav Petkov wrote: > On Sat, Feb 03, 2024 at 09:08:06AM -0700, Nathan Chancellor wrote: > > I have no issues with blaming a9ef277488cf but I think da86eb961184 is > > equally blamable for removing the option to use cc_vendor in generic x86 > > code where CONFIG_ARCH_HAS_CC_PLATFORM may not be set. Hopefully that at > > least carifies the "which is it?" question, I'll do whatever you think > > is best. > > I guess I wasn't clear enough, sorry about that. Of the two, that one Guess that makes both of us :) > should be in Fixes which is the first one which causes the build issue > so that the fix can be backported to the respective kernels. > > IOW, if you can't trigger with da86eb961184, then a9ef277488cf should be > in Fixes and your fix should go through the KVM tree, along with > a9ef277488cf. > > How does that sound? Yeah, that seems like a fair plan to me. I was a little concerned about a future change that would require backporting to kernels that have da86eb961184 (i.e., 6.6) that do not have a9ef277488cf and miss this fix but that is a bridge that can be crossed if it ever appears, no point in thinking too hard about it at this point. I can send a v2 on Monday, unless Paolo wants to just add Fixes: a9ef277488cf ("x86/kvm: Fix SEV check in sev_map_percpu_data()") directly during application. I think the rest of the patch is fine but if there are any other changes that should be made, I am more than happy do to so. Cheers, Nathan
On Sat, Feb 03, 2024 at 12:35:52PM -0700, Nathan Chancellor wrote: > Yeah, that seems like a fair plan to me. I was a little concerned about > a future change that would require backporting to kernels that have > da86eb961184 (i.e., 6.6) that do not have a9ef277488cf and miss this fix > but that is a bridge that can be crossed if it ever appears, no point in > thinking too hard about it at this point. Yep. > I can send a v2 on Monday, unless Paolo wants to just add > > Fixes: a9ef277488cf ("x86/kvm: Fix SEV check in sev_map_percpu_data()") > > directly during application. I think the rest of the patch is fine but > if there are any other changes that should be made, I am more than happy > do to so. Nah, LGTM. Acked-by: Borislav Petkov (AMD) <bp@alien8.de> Thx.
diff --git a/arch/x86/include/asm/coco.h b/arch/x86/include/asm/coco.h index 6ae2d16a7613..76c310b19b11 100644 --- a/arch/x86/include/asm/coco.h +++ b/arch/x86/include/asm/coco.h @@ -10,13 +10,14 @@ enum cc_vendor { CC_VENDOR_INTEL, }; -extern enum cc_vendor cc_vendor; - #ifdef CONFIG_ARCH_HAS_CC_PLATFORM +extern enum cc_vendor cc_vendor; void cc_set_mask(u64 mask); u64 cc_mkenc(u64 val); u64 cc_mkdec(u64 val); #else +#define cc_vendor (CC_VENDOR_NONE) + static inline u64 cc_mkenc(u64 val) { return val;