Received: by 2002:a05:6a10:6d10:0:0:0:0 with SMTP id gq16csp24605pxb; Tue, 12 Apr 2022 15:45:42 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwc4yglSZDC9ItzXv/vpnwe6TmaYQWv/eb5mnl0uwqctmRtHEgWYeGHTR4ZcUcDzVcvYlFZ X-Received: by 2002:a17:902:ab01:b0:156:f1cc:6d2d with SMTP id ik1-20020a170902ab0100b00156f1cc6d2dmr32442253plb.127.1649803542512; Tue, 12 Apr 2022 15:45:42 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1649803542; cv=none; d=google.com; s=arc-20160816; b=m5rHX/HJnrPv5Y6EzzOcb3y8GbdQa5bNX1j7Q5c+g7zKPPa3HwaoWqCNTnSi/fYy3W E9rThzB4ZUwPBKqziXqm3HKe3WsOI+30YrditWgcIW54Cs/mUlM4KEEkTv/pGboJE7JL IPTiCDXRK9JZtHle+O8K2ESKzYQdPouCjPJKO2OSssYOGU7FouSUwa+3oQh4Yc2JEe0S gQibAB8vcP5vCRt6tFfKytSjAAajJ1ZbUB0oX6ftFZ28tI9MzZmfGLAHkFj2C5BcgUmR cGoco90GXcOdaFoXfBB3/SOTA+rTKOTEpNhaYLo+Qwr6Cog2kmk6hDqkyiEgsDY+FiFE sPBw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=Gh2XfJHVlm7slJbuBA3WMEFLWdHwlF6Y6PNHtV3nP+Q=; b=wMbRRAZeUbYCnCsH0jf+Gh+gLcDS5hlTLNKVLDPsavF1U5amKwyFbd1nL+ZiS3RoxZ ica4acUP4UVLCPnpruqihqrTIwrsUNha32uMJsdCK6qzGPRPu0zVPJ3lWlBuXXEMi4sK uW/1uJmo6mgj+9vNp08pRva/j9vK5j9r4RxlExpkx48VMU+MQK8OsoN/ZH4cKWVB1hcQ EqkT0ctex5zWDdqU5ZBsGAFmv5qdHk/UX83AxJ3zsvkCFGMJanuO4yf8nerc/I4TNff4 b9pjJKxQtBRLAcSnHZPPZmHTJA0FLegTJarZBeA1qCGJspkq6k0Cy+87Tvy2E4mWetRw Nxfw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=VEC2trbX; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [2620:137:e000::1:18]) by mx.google.com with ESMTPS id v24-20020a631518000000b003816043efcdsi3919107pgl.450.2022.04.12.15.45.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Apr 2022 15:45:42 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) client-ip=2620:137:e000::1:18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=VEC2trbX; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 0A7061B6979; Tue, 12 Apr 2022 14:27:06 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1381065AbiDLIXF (ORCPT + 99 others); Tue, 12 Apr 2022 04:23:05 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42846 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1353752AbiDLHZx (ORCPT ); Tue, 12 Apr 2022 03:25:53 -0400 Received: from ams.source.kernel.org (ams.source.kernel.org [145.40.68.75]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2388B6269; Tue, 12 Apr 2022 00:04:20 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id 8CE35B81B4E; Tue, 12 Apr 2022 07:04:19 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 0AE93C385AA; Tue, 12 Apr 2022 07:04:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1649747058; bh=1fAADtwZr8mUN51KJvbjJw10IrVyo6zwcuvu2c/R9yc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=VEC2trbXL96FptfskRl2QQzWnpIAOOKTsZdM85u9pQvzpFKUqnvuwnnnP3/xyiGZy g/9YTmKOXbgm0KHCKu5kp5LmRy1bFxYEK9TlbHjAbKHFRpGs1f3x7G2ogro3eLHP8t gcT1ORp8ot84assD3cTWIp7DoBdqrp795dSW6L0s= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Dave Hansen , Pawan Gupta , Borislav Petkov , Linus Torvalds Subject: [PATCH 5.16 228/285] x86/pm: Save the MSR validity status at context setup Date: Tue, 12 Apr 2022 08:31:25 +0200 Message-Id: <20220412062950.241328993@linuxfoundation.org> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220412062943.670770901@linuxfoundation.org> References: <20220412062943.670770901@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-2.0 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RDNS_NONE,SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Pawan Gupta commit 73924ec4d560257004d5b5116b22a3647661e364 upstream. The mechanism to save/restore MSRs during S3 suspend/resume checks for the MSR validity during suspend, and only restores the MSR if its a valid MSR. This is not optimal, as an invalid MSR will unnecessarily throw an exception for every suspend cycle. The more invalid MSRs, higher the impact will be. Check and save the MSR validity at setup. This ensures that only valid MSRs that are guaranteed to not throw an exception will be attempted during suspend. Fixes: 7a9c2dd08ead ("x86/pm: Introduce quirk framework to save/restore extra MSR registers around suspend/resume") Suggested-by: Dave Hansen Signed-off-by: Pawan Gupta Reviewed-by: Dave Hansen Acked-by: Borislav Petkov Cc: stable@vger.kernel.org Signed-off-by: Linus Torvalds Signed-off-by: Greg Kroah-Hartman --- arch/x86/power/cpu.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) --- a/arch/x86/power/cpu.c +++ b/arch/x86/power/cpu.c @@ -40,7 +40,8 @@ static void msr_save_context(struct save struct saved_msr *end = msr + ctxt->saved_msrs.num; while (msr < end) { - msr->valid = !rdmsrl_safe(msr->info.msr_no, &msr->info.reg.q); + if (msr->valid) + rdmsrl(msr->info.msr_no, msr->info.reg.q); msr++; } } @@ -424,8 +425,10 @@ static int msr_build_context(const u32 * } for (i = saved_msrs->num, j = 0; i < total_num; i++, j++) { + u64 dummy; + msr_array[i].info.msr_no = msr_id[j]; - msr_array[i].valid = false; + msr_array[i].valid = !rdmsrl_safe(msr_id[j], &dummy); msr_array[i].info.reg.q = 0; } saved_msrs->num = total_num;