Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp2978246imu; Sun, 9 Dec 2018 14:09:05 -0800 (PST) X-Google-Smtp-Source: AFSGD/U9tsoyLqEXkx0mT6nLyd6cpc2WhQpLDkzmo3laRLSv0fRD1mAekvgsZkOqO94iYGIPq9If X-Received: by 2002:a17:902:aa0a:: with SMTP id be10mr9712336plb.266.1544393345799; Sun, 09 Dec 2018 14:09:05 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1544393345; cv=none; d=google.com; s=arc-20160816; b=rLm96UtyiprDVmz6SmAxCZw1Un7YfM8p0ypChWW7TvT4PSIvpmI3SDhSLfProA+kB6 96M/CsxKSJVeJhR6INX8w/98WfJaNHudZXZvkpeUlglXAfXAVwET8JlJ7JNMXFcO8fl/ NNMsyFT+ZNR0lr2qCBiQ0aFfwlDGUnHeCuGkVJxBLccJaMhlMlr7ppiUEfLdSXjtCVH2 N4LgtRgUwDx8Yy90jHpGzoUg4o+rtfM8ecw7AKf2THXCXDYHvzKXbQrqRLm1pbsgJkiR OxqY1IKQ3s7qhrmySX5UylDdhhGVFu4rEE8S/osyXVSKkRo2IWAvDm3/EKzfkwKMKeat m89g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:in-reply-to:subject:message-id:date:cc:to :from:mime-version:content-transfer-encoding:content-disposition; bh=58VnnDY66PSdqymiOvvp+oqKagLPt/iPQuC2vzfpKHw=; b=MBMTghjfMBG5UYTLC2moZHa0BucVMi8Tt5UowW0HucSJxdnkvQ+LdTC7jM1+wx53zr MY+as4CfzzipjxM05cFgPCl9movR4z+r2ddCbFcUtyy5tWMBmm8a/GU9OK8JMxG9OxRU LfxNjGwCBUPVu95LGGh1HJQx2wPYHuh51kA3T7whGn9ZUJmlzPrS7UdjVaDN+V3Ly43/ mAPkcN4B+4rDgOBwXTqAQr37U+zi5bQ5inpH29WwoXdbQBSsnVLfIknpK3ibrmoQX5kq 3f5Y0ljRU9TCQo58WwhSIMZpoIC80asi6mtR5yAjSGPfe7Mp7p50klWSwO4jssnUVtZJ uqDg== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id i13si7670264pgi.260.2018.12.09.14.08.50; Sun, 09 Dec 2018 14:09:05 -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; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727452AbeLIWHR (ORCPT + 99 others); Sun, 9 Dec 2018 17:07:17 -0500 Received: from shadbolt.e.decadent.org.uk ([88.96.1.126]:37192 "EHLO shadbolt.e.decadent.org.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727576AbeLIWHO (ORCPT ); Sun, 9 Dec 2018 17:07:14 -0500 Received: from pub.yeoldevic.com ([81.174.156.145] helo=deadeye) by shadbolt.decadent.org.uk with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.89) (envelope-from ) id 1gW738-0002iZ-HB; Sun, 09 Dec 2018 21:55:43 +0000 Received: from ben by deadeye with local (Exim 4.91) (envelope-from ) id 1gW72f-0003Sf-33; Sun, 09 Dec 2018 21:55:13 +0000 Content-Type: text/plain; charset="UTF-8" Content-Disposition: inline Content-Transfer-Encoding: 8bit MIME-Version: 1.0 From: Ben Hutchings To: linux-kernel@vger.kernel.org, stable@vger.kernel.org CC: akpm@linux-foundation.org, "Borislav Petkov" , prarit@redhat.com, "Filippo Sironi" , "Thomas Gleixner" Date: Sun, 09 Dec 2018 21:50:33 +0000 Message-ID: X-Mailer: LinuxStableQueue (scripts by bwh) X-Patchwork-Hint: ignore Subject: [PATCH 3.16 179/328] x86/microcode: Update the new microcode revision unconditionally In-Reply-To: X-SA-Exim-Connect-IP: 81.174.156.145 X-SA-Exim-Mail-From: ben@decadent.org.uk X-SA-Exim-Scanned: No (on shadbolt.decadent.org.uk); SAEximRunCond expanded to false Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 3.16.62-rc1 review patch. If anyone has any objections, please let me know. ------------------ From: Filippo Sironi commit 8da38ebaad23fe1b0c4a205438676f6356607cfc upstream. Handle the case where microcode gets loaded on the BSP's hyperthread sibling first and the boot_cpu_data's microcode revision doesn't get updated because of early exit due to the siblings sharing a microcode engine. For that, simply write the updated revision on all CPUs unconditionally. Signed-off-by: Filippo Sironi Signed-off-by: Borislav Petkov Signed-off-by: Thomas Gleixner Cc: prarit@redhat.com Link: http://lkml.kernel.org/r/1533050970-14385-1-git-send-email-sironi@amazon.de [bwh: Backported to 3.16: - Keep returning 0 on success - Adjust context] Signed-off-by: Ben Hutchings --- --- a/arch/x86/kernel/cpu/microcode/amd.c +++ b/arch/x86/kernel/cpu/microcode/amd.c @@ -214,26 +214,26 @@ int apply_microcode_amd(int cpu) rdmsr(MSR_AMD64_PATCH_LEVEL, rev, dummy); /* need to apply patch? */ - if (rev >= mc_amd->hdr.patch_id) { - c->microcode = rev; - uci->cpu_sig.rev = rev; - return 0; - } + if (rev >= mc_amd->hdr.patch_id) + goto out; if (__apply_microcode_amd(mc_amd)) { pr_err("CPU%d: update failed for patch_level=0x%08x\n", cpu, mc_amd->hdr.patch_id); return -1; } - pr_info("CPU%d: new patch_level=0x%08x\n", cpu, - mc_amd->hdr.patch_id); - uci->cpu_sig.rev = mc_amd->hdr.patch_id; - c->microcode = mc_amd->hdr.patch_id; + rev = mc_amd->hdr.patch_id; + + pr_info("CPU%d: new patch_level=0x%08x\n", cpu, rev); + +out: + uci->cpu_sig.rev = rev; + c->microcode = rev; /* Update boot_cpu_data's revision too, if we're on the BSP: */ if (c->cpu_index == boot_cpu_data.cpu_index) - boot_cpu_data.microcode = mc_amd->hdr.patch_id; + boot_cpu_data.microcode = rev; return 0; } --- a/arch/x86/kernel/cpu/microcode/intel.c +++ b/arch/x86/kernel/cpu/microcode/intel.c @@ -161,11 +161,8 @@ int apply_microcode(int cpu) * already. */ rev = intel_get_microcode_revision(); - if (rev >= mc_intel->hdr.rev) { - uci->cpu_sig.rev = rev; - c->microcode = rev; - return 0; - } + if (rev >= mc_intel->hdr.rev) + goto out; /* write microcode via MSR 0x79 */ wrmsr(MSR_IA32_UCODE_WRITE, @@ -185,8 +182,9 @@ int apply_microcode(int cpu) mc_intel->hdr.date >> 24, (mc_intel->hdr.date >> 16) & 0xff); +out: uci->cpu_sig.rev = rev; - c->microcode = rev; + c->microcode = rev; /* Update boot_cpu_data's revision too, if we're on the BSP: */ if (c->cpu_index == boot_cpu_data.cpu_index)