Received: by 2002:a19:f614:0:0:0:0:0 with SMTP id x20csp56997lfe; Fri, 15 Apr 2022 19:19:08 -0700 (PDT) X-Google-Smtp-Source: ABdhPJz08KhkDUJ6KKqZ1lGshNnUdD5BoHw8d698OknzMU6ASVsox/GLZGaIWIgDy0J29Ar1j8dN X-Received: by 2002:a17:902:aa84:b0:156:6b35:9681 with SMTP id d4-20020a170902aa8400b001566b359681mr1866392plr.48.1650075547766; Fri, 15 Apr 2022 19:19:07 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1650075547; cv=none; d=google.com; s=arc-20160816; b=H6hTC/3vmRIYWWzRe5FX0hgMF01oAW+ptjFBuGL3ENMmGIIsMIxCJQs2efc3Ph/Y8Q 9phon3GlVjYf/JFkVWL+Hu+FY4IpcbGpD1ZCD89LH0T4xcRGv6asVIgdk7gngfk2g4rQ quDYikehxFcIWbN0r3FWSlstF538aPIpYbHbbgWchIlE7oTWux0NjK4Ku1eW25WICRHX LtILB4FpuXhCSoSc6G9z6dHVYeFvff8X5l0bthvDjl6sNQ9kgIXKQY87kzbE4Scxf/Rz JaYEWHJrGkE1zWzjZthV+97qCDwy7Fd5IDtFQPE8ZpL3mJCPCLYoMqbBtj65WsB+UXFp PTLA== 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=YC+K53EVuEd0Gn8PJDjYF99l/kwaSqOl9lkghHLUgIg=; b=mGA3mcrkvpzyQKqdzZfAGTRXFZ31ZLfDX7QduwpfkAbEZ4NBay7iyHvYEafuVKGbW1 xjPnfe+6tYlOA0tz9shs6gvsO6Wa1AsiFLEOBiK0dHzz/Duqioja6VnsqawZEx+X06IQ NoybP03QnYTDlJxWmKr6O/ImwhSSeoGgpwdX7zjw9oie0UytI0bW3NTSDj2JEOMzotgL DZ5y+NxEdzY0CB/dqUyOmovRtCV6uCz7bUIwYM1VBRDHPiIVCiMp2vZtjs32/qJd0bnt WH35u9LrAIxTW99AIKl8SOv86O8SA6wDX4lpOlrl23fY5Bz2rpE6ImA2Ogfo3LvFTAnI Nw1g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=VsUJzO23; spf=softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 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. [23.128.96.19]) by mx.google.com with ESMTPS id c29-20020a630d1d000000b0039daca697b3si2849751pgl.707.2022.04.15.19.19.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 15 Apr 2022 19:19:07 -0700 (PDT) Received-SPF: softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) client-ip=23.128.96.19; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=VsUJzO23; spf=softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 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 04A7F22474A; Fri, 15 Apr 2022 18:33:52 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1346978AbiDNN6K (ORCPT + 99 others); Thu, 14 Apr 2022 09:58:10 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58074 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1344273AbiDNNbb (ORCPT ); Thu, 14 Apr 2022 09:31:31 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AB3F71B6; Thu, 14 Apr 2022 06:29:06 -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 4722D61B51; Thu, 14 Apr 2022 13:29:06 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5CC6EC385A9; Thu, 14 Apr 2022 13:29:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1649942945; bh=1m3xIrLcO5FIijhI2wj1F439x8Le5NCM2hWe+oEGa6s=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=VsUJzO23Wlgq1FPNi2+sRhV5qdHKkaUYKNcMNPOvdaJvUK39hLhew0UvGS/gD+wh+ p4taCTcNr0RAcbF8mc0eQSj2K6ye/h/a87fvz/WXk6ec57iD0HPe8z6vvyfHR9+ikV VPHNs59mj0rRQNx7IJCmVq5KerIvfwZK5iDgWTsU= 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.19 317/338] x86/pm: Save the MSR validity status at context setup Date: Thu, 14 Apr 2022 15:13:40 +0200 Message-Id: <20220414110847.910365334@linuxfoundation.org> X-Mailer: git-send-email 2.35.2 In-Reply-To: <20220414110838.883074566@linuxfoundation.org> References: <20220414110838.883074566@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 @@ -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++; } } @@ -426,8 +427,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;