Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1A96BC636D3 for ; Mon, 30 Jan 2023 21:40:32 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231441AbjA3Vka (ORCPT ); Mon, 30 Jan 2023 16:40:30 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57108 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231300AbjA3VkR (ORCPT ); Mon, 30 Jan 2023 16:40:17 -0500 Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EA3616A61 for ; Mon, 30 Jan 2023 13:40:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1675114815; x=1706650815; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=1ribreiqlw4yvFYe7h9+NZncTm/1TctmT/8aknEK0LI=; b=OzKVkUvVnKeg3UpOE7lkzX6YYuk9bYTzvOPhiI62JK7ADrPzk5AAscOG tDeNwm1Y1SyBjGxiLswsMvFjlXIokpN84w9UQAB4WUaiSDOL+SA2wrVLj 2gvJDu+G1MY0z38YOqeupWKzizGdJ1WJcN2GxkJYvjJcgcS0pykFUTTQj 44xV6MPI8ZHcExcvGdj4JcohvJnj3sez+iMgbD56Y+/idHB7L+RUkJU8Z pMt1X2jYi6ET1dgm47ityTx043TE64Lg+wkDugmUt23DAEMO/D8OFz3JC XvF+fUI+d7N5ZWcNI9BfA7NYc9AtfKi1EraX7bR0i9ydOoofHjTCAZFqB g==; X-IronPort-AV: E=McAfee;i="6500,9779,10606"; a="328955504" X-IronPort-AV: E=Sophos;i="5.97,259,1669104000"; d="scan'208";a="328955504" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 30 Jan 2023 13:40:13 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10606"; a="696571863" X-IronPort-AV: E=Sophos;i="5.97,259,1669104000"; d="scan'208";a="696571863" Received: from araj-ucode.jf.intel.com ([10.23.0.19]) by orsmga001-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 30 Jan 2023 13:40:12 -0800 From: Ashok Raj To: Borislav Petkov , Thomas Gleixner Cc: Ashok Raj , LKML , x86 , Ingo Molnar , Tony Luck , Dave Hansen , Alison Schofield , Reinette Chatre , Tom Lendacky , Stefan Talpalaru , David Woodhouse , Benjamin Herrenschmidt , Jonathan Corbet , "Rafael J . Wysocki" , Peter Zilstra , Andy Lutomirski , Andrew Cooper , Boris Ostrovsky , Martin Pohlack Subject: [Patch v3 Part2 3/9] x86/microcode/intel: Fix collect_cpu_info() to reflect current microcode Date: Mon, 30 Jan 2023 13:39:49 -0800 Message-Id: <20230130213955.6046-4-ashok.raj@intel.com> X-Mailer: git-send-email 2.37.2 In-Reply-To: <20230130213955.6046-1-ashok.raj@intel.com> References: <20230130213955.6046-1-ashok.raj@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Currently collect_cpu_info() is only returning what was cached earlier instead of reading the current revision from the proper MSR. Collect the current revision and report that value instead of reflecting what was cached in the past. [TBD: Need to change microcode/amd.c. I didn't quite follow the logic since it reports the revision from the patch file, instead of reporting the real PATCH_LEVEL MSR. Untested on AMD. ] Signed-off-by: Ashok Raj Cc: LKML Cc: x86 Cc: Ingo Molnar Cc: Tony Luck Cc: Dave Hansen Cc: Alison Schofield Cc: Reinette Chatre Cc: Thomas Gleixner (Intel) Cc: Tom Lendacky Cc: Stefan Talpalaru Cc: David Woodhouse Cc: Benjamin Herrenschmidt Cc: Jonathan Corbet Cc: Rafael J. Wysocki Cc: Peter Zilstra (Intel) Cc: Andy Lutomirski Cc: Andrew Cooper Cc: Boris Ostrovsky Cc: Martin Pohlack --- arch/x86/kernel/cpu/microcode/intel.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/arch/x86/kernel/cpu/microcode/intel.c b/arch/x86/kernel/cpu/microcode/intel.c index 467cf37ea90a..de8e591c42cd 100644 --- a/arch/x86/kernel/cpu/microcode/intel.c +++ b/arch/x86/kernel/cpu/microcode/intel.c @@ -542,6 +542,13 @@ static int collect_cpu_info(int cpu_num, struct cpu_signature *csig) { struct cpuinfo_x86 *c = &cpu_data(cpu_num); unsigned int val[2]; + int rev; + + /* + * intel_get_microcode_revision() reads a per-core MSR + * to read the revision (MSR_IA32_UCODE_REV). + */ + WARN_ON_ONCE(cpu_num != smp_processor_id()); memset(csig, 0, sizeof(*csig)); @@ -553,7 +560,9 @@ static int collect_cpu_info(int cpu_num, struct cpu_signature *csig) csig->pf = 1 << ((val[1] >> 18) & 7); } - csig->rev = c->microcode; + rev = intel_get_microcode_revision(); + c->microcode = rev; + csig->rev = rev; return 0; } -- 2.37.2