Received: by 2002:a05:6602:2086:0:0:0:0 with SMTP id a6csp4709858ioa; Wed, 27 Apr 2022 09:25:21 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwX2YSFgOQ8W7CXyaYAHmelmoPhPUA9y3atJBbEhi8H4EbAArfPDb2J3hDKevhwikgn9B14 X-Received: by 2002:a63:8848:0:b0:3ab:2967:df83 with SMTP id l69-20020a638848000000b003ab2967df83mr14810140pgd.77.1651076720978; Wed, 27 Apr 2022 09:25:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1651076720; cv=none; d=google.com; s=arc-20160816; b=KQKXk6HF0jdFs3Sa7cfVyxNWjhS38KaBQKTHFQ+PgwDvr7QVoO5lCuDueOFV6gPQvF KI92cSs9VHI8uc06UDf84gv96GtMOR0D2IU3kTPu1DMV6I4/Q+CXLEOH+kRjL956muV9 Ek9C0zmEeGBKxnhr9fwu/n1oASTKq3/lpagCmbny8dzs36WS9FjipDkqfyqN08EpuGv8 eWuChmXkrP1dDeb7/sgWSrEPbJfKSeYB8UGAKwdNfnKYevohCR3LoXQMmqJvaZoOvFfW 5jNcRUkqAh0gKNx1Qu6WcOP+VczzonS0cTLli8XUOpSPJNtYeXwIs+nnsAmqcphy7xW7 TsTg== 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 :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=PL6ojcHJ05GyG5uplEXmwjR08tdb+qJb73L7w9ldzps=; b=Uf2p3UmUtBSBGu8Qjn/fMKJltHgUdSw3nnZu1hVEq/MQDWxYkRDAJ2TAAN6P28quCz Ztuihh469J9hDe8wMeeiqcENVaKm1ApGwA+wdxwiDcFLK9q8PYyh54Tz9tTyUoZhLDTF kK7ylqqZpPHsbw6EDQhDZQK6NCDrqYzgJxQw5bSRgWHtMX6spfDc7nmBTvVAokHQoJy8 lGtYI7+0bhud0N5CzKD4v/LBbJHnuPSj0iNuSQFauGsRrgh/DcBDXq2zsRaZ7bHA25wA QI77aFNODB1J0oho9ATlAXWiusC+WKZBOX30+NxeqxSfvYfAfX98dxlleBjAmj5pL1Tk tsDQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=alCXOIOP; 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=kernel.org Return-Path: Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [23.128.96.19]) by mx.google.com with ESMTPS id f20-20020a056a00229400b004faa473dabcsi1872956pfe.301.2022.04.27.09.25.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 27 Apr 2022 09:25:20 -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=@kernel.org header.s=k20201202 header.b=alCXOIOP; 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=kernel.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id D33517B135; Wed, 27 Apr 2022 08:55:08 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240515AbiD0P5x (ORCPT + 99 others); Wed, 27 Apr 2022 11:57:53 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55288 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240434AbiD0P5t (ORCPT ); Wed, 27 Apr 2022 11:57:49 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 18DF56B65C; Wed, 27 Apr 2022 08:54:23 -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 4866261B24; Wed, 27 Apr 2022 15:54:21 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7C30DC385B3; Wed, 27 Apr 2022 15:54:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1651074860; bh=4jWXUFL4sGPebXcKjYdd9XhHrmSzS5fbyAElvBDd/Vk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=alCXOIOP/Fx35ptG7HPjAhsRAX55CNm7UutwlUAVeR6bFtpEW+zFg065/nhBCWtDC sd0MEeGiDAoLbHUfEwWhO0djdJpfXtCCIsXWmFSmYf/4c7VJxreQgiiwHulLC4yKJB A/DutpmqAqw01J7Ele4sCyW44/tBLy1I3YCkNN/SqWSPzOz1ZbhI31lPFgA+ZIxYwV YqKv/Dnmlc495UQ612LW1ruUHOPcb4BIqKv4ZbgdbeIlgRuV2V4whQEzTUfxpjHJSt cU2lhzv1QmtDRAYWfdA0fGXEK8fYO8TJzy2sdceYqR2ldfeG652yBAHTKYpJz9HOXk CUHqNJwSrXQkw== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Wanpeng Li , Marcelo Tosatti , Paolo Bonzini , Sasha Levin , tglx@linutronix.de, mingo@redhat.com, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, kvm@vger.kernel.org Subject: [PATCH MANUALSEL 5.17 3/7] x86/kvm: Preserve BSP MSR_KVM_POLL_CONTROL across suspend/resume Date: Wed, 27 Apr 2022 11:53:59 -0400 Message-Id: <20220427155408.19352-3-sashal@kernel.org> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220427155408.19352-1-sashal@kernel.org> References: <20220427155408.19352-1-sashal@kernel.org> MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-2.9 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI, RDNS_NONE,SPF_HELO_NONE autolearn=unavailable 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: Wanpeng Li [ Upstream commit 0361bdfddca20c8855ea3bdbbbc9c999912b10ff ] MSR_KVM_POLL_CONTROL is cleared on reset, thus reverting guests to host-side polling after suspend/resume. Non-bootstrap CPUs are restored correctly by the haltpoll driver because they are hot-unplugged during suspend and hot-plugged during resume; however, the BSP is not hotpluggable and remains in host-sde polling mode after the guest resume. The makes the guest pay for the cost of vmexits every time the guest enters idle. Fix it by recording BSP's haltpoll state and resuming it during guest resume. Cc: Marcelo Tosatti Signed-off-by: Wanpeng Li Message-Id: <1650267752-46796-1-git-send-email-wanpengli@tencent.com> Signed-off-by: Paolo Bonzini Signed-off-by: Sasha Levin --- arch/x86/kernel/kvm.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c index ed8a13ac4ab2..4c2a158bb6c4 100644 --- a/arch/x86/kernel/kvm.c +++ b/arch/x86/kernel/kvm.c @@ -69,6 +69,7 @@ static DEFINE_PER_CPU_DECRYPTED(struct kvm_vcpu_pv_apf_data, apf_reason) __align DEFINE_PER_CPU_DECRYPTED(struct kvm_steal_time, steal_time) __aligned(64) __visible; static int has_steal_clock = 0; +static int has_guest_poll = 0; /* * No need for any "IO delay" on KVM */ @@ -706,14 +707,26 @@ static int kvm_cpu_down_prepare(unsigned int cpu) static int kvm_suspend(void) { + u64 val = 0; + kvm_guest_cpu_offline(false); +#ifdef CONFIG_ARCH_CPUIDLE_HALTPOLL + if (kvm_para_has_feature(KVM_FEATURE_POLL_CONTROL)) + rdmsrl(MSR_KVM_POLL_CONTROL, val); + has_guest_poll = !(val & 1); +#endif return 0; } static void kvm_resume(void) { kvm_cpu_online(raw_smp_processor_id()); + +#ifdef CONFIG_ARCH_CPUIDLE_HALTPOLL + if (kvm_para_has_feature(KVM_FEATURE_POLL_CONTROL) && has_guest_poll) + wrmsrl(MSR_KVM_POLL_CONTROL, 0); +#endif } static struct syscore_ops kvm_syscore_ops = { -- 2.35.1