Received: by 2002:a05:6512:3d0e:0:0:0:0 with SMTP id d14csp40296lfv; Tue, 12 Apr 2022 16:24:57 -0700 (PDT) X-Google-Smtp-Source: ABdhPJy+hrl1vBO44ggnELygEWtX7SCu86L406TqmEwnP36TQpGjD46aCRWDD/pM0t+efa9jz88R X-Received: by 2002:a63:40c7:0:b0:39d:8c29:2f57 with SMTP id n190-20020a6340c7000000b0039d8c292f57mr5563108pga.202.1649805897247; Tue, 12 Apr 2022 16:24:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1649805897; cv=none; d=google.com; s=arc-20160816; b=XjbPWZ5pBmyLcbHl8KvzgRPInoG2KLxyHsOpoU3Qt5UdpqKfl1kQESrn6ntmnsxZ5q n0UTAa7drVZBBC4wngGTklYwAJ1wRniyFmTQAe5xXmo2BF6Y+EgILv/KVtw9PGBUbKg+ GylfrEunJuhiXGYrSWdsARBZ+jHN2E7rb1MXhhOCEemsb2esIkVGhD6+7jXU90Nc6zaH 9HdkcX1uuMGWCtySSy85QVttbgaWQs86qHwXLYkOYKPSqRpJUibevBYc2U5luzz8dZJL UphioGVgmMCgUAYP8zlm4ACcWaTFaQYtsS85NQvHuO9XAQ0q70EhU+HxMLTE81Sbz4wT TM1A== 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=YwHtYeCCMujr4ae7oo/ihU5sBzfacz5J4T1woDvOiNA=; b=tb1Kp6rANu9fQPA0lzAkdxR0tGcy+sA9ie8foNq8ZqkdOlHeDf8g/1LwwLXyIGAMkh SXWjuTCa2DCbOaYLVgoxdmLqG4ou2US8Vb+AOM2HPeIkW+kQHaJbet9SGL4tOv8yz6WT isJEQ+DUOsPLU/NXw/giHuUwqDwNlXkQT4h2+4NUwaTrHV+dkJ8r0sUAC1hDvyWsZGEL pxm+mYjvWD28nCOKvbAjLP/Cr2Rb5qdcxDWs+UBxLXEn+vTtVNiKDEKveaS/JM05G+NF S3WOeoLydyX54ADn119K9XjGzeRqc3FC90n1WqCRe5uwchsykLN7Yif3shvG9vtZtR/m NgzA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=EIEz6Onu; 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 q14-20020a170902dace00b0015878610e3bsi5318846plx.367.2022.04.12.16.24.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Apr 2022 16:24:57 -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=EIEz6Onu; 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 6E636ED9D0; Tue, 12 Apr 2022 14:17:06 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1352661AbiDLG4T (ORCPT + 99 others); Tue, 12 Apr 2022 02:56:19 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57702 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S245566AbiDLGsd (ORCPT ); Tue, 12 Apr 2022 02:48:33 -0400 Received: from ams.source.kernel.org (ams.source.kernel.org [145.40.68.75]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D200A25E82; Mon, 11 Apr 2022 23:39:35 -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 58EEFB81B46; Tue, 12 Apr 2022 06:39:33 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id A3512C385A1; Tue, 12 Apr 2022 06:39:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1649745572; bh=hgWqPv0qp5XKtQyjo6xnVe2Wx2vOCKHxAO/Zm1Lvht4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=EIEz6OnudXcZbom9EFTGIrSS8dcBk8Jjpw/Gq5HSWMtTCVX5RFrmqX6yz+tECY7PU ZYJnIIQMBzrw1rn5ljCve68dvIXNl5C9EMYJkkjg+J8jT45gqD3ZwOlVFWszlxtxIE BsDbYRdkkXdELo3GilHZbt3pW36N6KIVn49V9tCM= 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.10 142/171] x86/pm: Save the MSR validity status at context setup Date: Tue, 12 Apr 2022 08:30:33 +0200 Message-Id: <20220412062932.000715095@linuxfoundation.org> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220412062927.870347203@linuxfoundation.org> References: <20220412062927.870347203@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++; } } @@ -427,8 +428,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;