Received: by 2002:a05:6a10:6d10:0:0:0:0 with SMTP id gq16csp3199376pxb; Mon, 18 Apr 2022 18:56:56 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyJjHMnBsTVbJ4NAVEo5sR+Pk6yQJ+40qGQkY4Hepd6pVQOK3jG0Xbzr9mxa/gKhcDbb0sQ X-Received: by 2002:a05:6402:40d5:b0:423:e40e:351c with SMTP id z21-20020a05640240d500b00423e40e351cmr8780175edb.52.1650333416319; Mon, 18 Apr 2022 18:56:56 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1650333416; cv=none; d=google.com; s=arc-20160816; b=lEsvTjqXo8fWNO2CEdlMQDIJck+S6rvcBxcj8QnpADHcPRyu1GPfYVyLws+5lzYqbi qkdxc0qBZ9n6QgQLNvzH4Pc5PaOHRVZCDlTJQwocrOYrIXS/88aUgKYQEBA6ibA+Nmnl C1FaZMAnmjIh8DsnARpLjhUrmk8//oFzspVq1eVx/7w0Xj2GaZMnpPdxC6Hx8z0qbR/Z SoeFAuiRFahixz74W0ndqpLfSXotJn/eWwxvzdWL8iF0r8KAOZraoBfhG6L6JlJFQb/H xT4xqYj8OsaL1jqym1upVAQD5YwFDJDkPKgnAZyg4zIMNMugdWbOra3SkEpIUAjnSkTY ACUw== 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=AcHXqRH19P0pUAKWDyVjIze3Vz7Ehlcqx6vNCYmxXiE=; b=zbZc5+VEPHQPCgHEvcGzd8R4WgxtncpsVjud9cPC2eUWXAWydpAjUZYd+MbTf8MBz9 tQ/RHeTHlo++5uOs71DOsjYhLqJnI5WbcmCW3Y+D7vUEsbAW3qEMTwxgMghOL2KuWddB ZY4Lk34ZKfcCGQomR5nXfQPpf/fpYu/9J/FK02wQk2/X3kvI1DF/BgVPwOdx9P20dB8T LsN+J3UdtDqcpRbmzllKKLgn7pXKKM0I6i2aiPnbMq/hnZJroQN52c5vzJ2N16/oIy0Q Bv6IrNv5HNfbbExvmVc0VphY4UGkI3kN+n4A7yanmzsunnnbwNCnXfd1erSGnSugFWcU APCw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=eu1OELzE; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 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 out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id f23-20020a170906391700b006e48a4b0accsi6783195eje.1003.2022.04.18.18.56.32; Mon, 18 Apr 2022 18:56:56 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=eu1OELzE; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1343628AbiDRO0K (ORCPT + 99 others); Mon, 18 Apr 2022 10:26:10 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52090 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1343727AbiDROOi (ORCPT ); Mon, 18 Apr 2022 10:14:38 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 80D1439157; Mon, 18 Apr 2022 06:12:24 -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 dfw.source.kernel.org (Postfix) with ESMTPS id 9FE6760F61; Mon, 18 Apr 2022 13:12:22 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 942E3C385AF; Mon, 18 Apr 2022 13:12:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1650287542; bh=D9jDLCe4MqfUvLSNeM+CrpvYnD79pR+M4WZpoFClI+o=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=eu1OELzEStTt0dNL5A/Pd4yE4Xgm089glfTHDKoHy1e15h3lQC6hTdlSxr6kleC4u EpZnXNehVgJcvA/ghoGTa1BMN7gdjvlCaIwavHPQsIAd3LB5Tl1jdB9k6J6rYhAaO5 fkP6G9L5KfaN34qhA2cIr/DJIR8K6r1uf5HBneHE= 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 4.9 194/218] x86/pm: Save the MSR validity status at context setup Date: Mon, 18 Apr 2022 14:14:20 +0200 Message-Id: <20220418121206.989865358@linuxfoundation.org> X-Mailer: git-send-email 2.35.3 In-Reply-To: <20220418121158.636999985@linuxfoundation.org> References: <20220418121158.636999985@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=-7.7 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_HI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham 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 @@ -41,7 +41,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++; } } @@ -419,8 +420,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;