Received: by 10.223.176.5 with SMTP id f5csp3591084wra; Mon, 29 Jan 2018 15:51:09 -0800 (PST) X-Google-Smtp-Source: AH8x224eoBWoGewlbRCWgbuQ/Len2RxqwEpbiFD4Q6CKex5W5tssz1xEp+9i7c0jdgZUdPeD2hW2 X-Received: by 10.99.142.76 with SMTP id k73mr22435963pge.89.1517269869028; Mon, 29 Jan 2018 15:51:09 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1517269868; cv=none; d=google.com; s=arc-20160816; b=TG7yHgrteNfhUj5vtt0dvJ513eLEq0Tpem+/gqW35X230dpG4EpmiHx7FH1zwVDeXK WrTFgA/WtwuO6+j4c5oFE8+/lMShk8ua9ehGnhL/r2BvIjavQ+o3wmi0nY1LzOqu+6QR XWB4xvzlSTb0aSdpFkBrmfmuWstXukiCc8RCeLgZfi7UPfCNT+2QuGIkiL07yAmoJQ36 +Ceo90wvbereafy+AU/JEBV7zz76/zqwrErQ4akYKSsIzOjbTWRx/SUh19g7RmW/W4eY odN/L5fQ6WbKixzE7X4+O1bbusvdmxPdUFenIGVA4egXhf567hIXKEsXLO18/24kFtZE CCAg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:to:from :dkim-signature:arc-authentication-results; bh=o5+iwoJaWzYdyq57yX5/sMfoLODEcWctJM139ZvvcCY=; b=vIR0tNaJAOXE1AAhTLnIWMjS20qFjM+fKxRFh6Pmlvwkf/ShEbBkEdD9t4jdvgVRzr GKGk/2c4mwd7gHS0JDYk392drZoLBbsYtZ4PhXZCW1tFbyfadD7QXJ7ziHY4H/96nPiv JKTo+9fi2E5EnfWkabxzO+Iv4aYyecDPTDJ5Rv1Vp2/LvzlLlwieaW+X5mXyFBPsgNp+ T6oOOohTvBjibFNF46ofiqnOS5mtuBppamVJFLF4B6GSPAFJ5tt1pLSb5QUBBtil8LK9 lsKgVpwWC/31YLR5SRIvm2k24bD/3bY/cEk8hXwGmillmGAXtdqPdpVMRJRkFM+LqsW2 iwlQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@amazon.co.uk header.s=amazon201209 header.b=ismmN2LL; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=amazon.co.uk Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id w13si8142702pgq.199.2018.01.29.15.50.54; Mon, 29 Jan 2018 15:51:08 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@amazon.co.uk header.s=amazon201209 header.b=ismmN2LL; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=amazon.co.uk Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752139AbeA2Xtv (ORCPT + 99 others); Mon, 29 Jan 2018 18:49:51 -0500 Received: from smtp-fw-6002.amazon.com ([52.95.49.90]:45942 "EHLO smtp-fw-6002.amazon.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751542AbeA2Xtt (ORCPT ); Mon, 29 Jan 2018 18:49:49 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amazon.co.uk; i=@amazon.co.uk; q=dns/txt; s=amazon201209; t=1517269789; x=1548805789; h=from:to:subject:date:message-id; bh=o5+iwoJaWzYdyq57yX5/sMfoLODEcWctJM139ZvvcCY=; b=ismmN2LLNne6QMINidUbKq8FbiEvWDdtNQuoUfN6m+uC/hBXmCa3Z61s jqSuSRWSdCOhYTAu/KNHaHsP7JajHUxnzS4q13Vpai1+uI3k9v9iLITEz C8dU9l/gy1+S3jjZxcNVKr3YEgIy7qL6wmKqXiZx63Mx4WLzQGk/euuyh 0=; X-IronPort-AV: E=Sophos;i="5.46,433,1511827200"; d="scan'208";a="329700820" Received: from iad6-co-svc-p1-lb1-vlan3.amazon.com (HELO email-inbound-relay-2b-baacba05.us-west-2.amazon.com) ([10.124.125.6]) by smtp-border-fw-out-6002.iad6.amazon.com with ESMTP/TLS/DHE-RSA-AES256-SHA; 29 Jan 2018 23:49:47 +0000 Received: from uc8d3ff76b9bc5848a9cc.ant.amazon.com (pdx2-ws-svc-lb17-vlan3.amazon.com [10.247.140.70]) by email-inbound-relay-2b-baacba05.us-west-2.amazon.com (8.14.7/8.14.7) with ESMTP id w0TNnfH9090310 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Mon, 29 Jan 2018 23:49:43 GMT Received: from uc8d3ff76b9bc5848a9cc.ant.amazon.com (localhost [127.0.0.1]) by uc8d3ff76b9bc5848a9cc.ant.amazon.com (8.15.2/8.15.2/Debian-3) with ESMTP id w0TNndUH016886; Mon, 29 Jan 2018 23:49:39 GMT Received: (from dwmw@localhost) by uc8d3ff76b9bc5848a9cc.ant.amazon.com (8.15.2/8.15.2/Submit) id w0TNncvB016883; Mon, 29 Jan 2018 23:49:38 GMT From: David Woodhouse To: arjan@linux.intel.com, tglx@linutronix.de, karahmed@amazon.de, x86@kernel.org, linux-kernel@vger.kernel.org, tim.c.chen@linux.intel.com, bp@alien8.de, peterz@infradead.org, pbonzini@redhat.com, ak@linux.intel.com, torvalds@linux-foundation.org, gregkh@linux-foundation.org Subject: [PATCH] x86/cpuid: Fix up "virtual" IBRS/IBPB/STIBP feature bits on Intel Date: Mon, 29 Jan 2018 23:49:33 +0000 Message-Id: <1517269773-16750-1-git-send-email-dwmw@amazon.co.uk> X-Mailer: git-send-email 2.7.4 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Despite the fact that all the other code there seems to be doing it, just using set_cpu_cap() in early_intel_init() doesn't actually work. When the CPU is queried again in identify_boot_cpu(), it all gets overwritten again. Do it in init_scattered_cpuid_features() instead. Turning the bits off for bad microcode can use setup_clear_cpu_cap() to force them off for all CPUs; I was less keen on forcing the feature bits *on* that way. Signed-off-by: David Woodhouse Fixes: 2961298e ("x86/cpufeatures: Clean up Spectre v2 related CPUID flags") --- I feel I must be missing something. Is the rest of early_init_intel() broken too? arch/x86/kernel/cpu/intel.c | 27 ++++++++------------------- arch/x86/kernel/cpu/scattered.c | 13 +++++++++++++ 2 files changed, 21 insertions(+), 19 deletions(-) diff --git a/arch/x86/kernel/cpu/intel.c b/arch/x86/kernel/cpu/intel.c index 0c8b916..4cf4f8c 100644 --- a/arch/x86/kernel/cpu/intel.c +++ b/arch/x86/kernel/cpu/intel.c @@ -175,28 +175,17 @@ static void early_init_intel(struct cpuinfo_x86 *c) if (c->x86 >= 6 && !cpu_has(c, X86_FEATURE_IA64)) c->microcode = intel_get_microcode_revision(); - /* - * The Intel SPEC_CTRL CPUID bit implies IBRS and IBPB support, - * and they also have a different bit for STIBP support. Also, - * a hypervisor might have set the individual AMD bits even on - * Intel CPUs, for finer-grained selection of what's available. - */ - if (cpu_has(c, X86_FEATURE_SPEC_CTRL)) { - set_cpu_cap(c, X86_FEATURE_IBRS); - set_cpu_cap(c, X86_FEATURE_IBPB); - } - if (cpu_has(c, X86_FEATURE_INTEL_STIBP)) - set_cpu_cap(c, X86_FEATURE_STIBP); - /* Now if any of them are set, check the blacklist and clear the lot */ - if ((cpu_has(c, X86_FEATURE_IBRS) || cpu_has(c, X86_FEATURE_IBPB) || + if ((cpu_has(c, X86_FEATURE_SPEC_CTRL) || + cpu_has(c, X86_FEATURE_INTEL_STIBP) || + cpu_has(c, X86_FEATURE_IBRS) || cpu_has(c, X86_FEATURE_IBPB) || cpu_has(c, X86_FEATURE_STIBP)) && bad_spectre_microcode(c)) { pr_warn("Intel Spectre v2 broken microcode detected; disabling Speculation Control\n"); - clear_cpu_cap(c, X86_FEATURE_IBRS); - clear_cpu_cap(c, X86_FEATURE_IBPB); - clear_cpu_cap(c, X86_FEATURE_STIBP); - clear_cpu_cap(c, X86_FEATURE_SPEC_CTRL); - clear_cpu_cap(c, X86_FEATURE_INTEL_STIBP); + setup_clear_cpu_cap(X86_FEATURE_IBRS); + setup_clear_cpu_cap(X86_FEATURE_IBPB); + setup_clear_cpu_cap(X86_FEATURE_STIBP); + setup_clear_cpu_cap(X86_FEATURE_SPEC_CTRL); + setup_clear_cpu_cap(X86_FEATURE_INTEL_STIBP); } /* diff --git a/arch/x86/kernel/cpu/scattered.c b/arch/x86/kernel/cpu/scattered.c index df11f5d..121b91e 100644 --- a/arch/x86/kernel/cpu/scattered.c +++ b/arch/x86/kernel/cpu/scattered.c @@ -53,6 +53,19 @@ void init_scattered_cpuid_features(struct cpuinfo_x86 *c) if (regs[cb->reg] & (1 << cb->bit)) set_cpu_cap(c, cb->feature); } + + /* + * The Intel SPEC_CTRL CPUID bit implies IBRS and IBPB support, + * and they also have a different bit for STIBP support. Also, + * a hypervisor might have set the individual AMD bits even on + * Intel CPUs, for finer-grained selection of what's available. + */ + if (cpu_has(c, X86_FEATURE_SPEC_CTRL)) { + set_cpu_cap(c, X86_FEATURE_IBRS); + set_cpu_cap(c, X86_FEATURE_IBPB); + } + if (cpu_has(c, X86_FEATURE_INTEL_STIBP)) + set_cpu_cap(c, X86_FEATURE_STIBP); } u32 get_scattered_cpuid_leaf(unsigned int level, unsigned int sub_leaf, -- 2.7.4