Received: by 2002:a05:6602:2086:0:0:0:0 with SMTP id a6csp4712242ioa; Wed, 27 Apr 2022 09:27:55 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwkaQCN792IDtD+eGPql218mUUWKvjqPhnD2IKtTH0J8g0w24oG8k2nx8+usKlZAFeiLHFo X-Received: by 2002:a81:60d5:0:b0:2f4:dde7:5bf3 with SMTP id u204-20020a8160d5000000b002f4dde75bf3mr27593054ywb.174.1651076875191; Wed, 27 Apr 2022 09:27:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1651076875; cv=none; d=google.com; s=arc-20160816; b=iqN6/D3N6ytoRfo966AhDj7+BMl8XJLmIRHlzdOuk4lkkERo+dHFQ6/lqbDLP/9r2C BKjisjkkFfC5JT5p3cIW6YnOkLdCE5E9MgUC7sl3NWPjUDX5lrnBdjkLei3I+2xUN2yR GrNNkZKFRiRYf9BtgF9Ir1uUSXf4xhQslw+J/YSfvnA604I2m6gJl/IKX0vDFVpr55Jf FLddm8YZ5jFJNN4znS7bQEJK8ZwnydGvWR0ZRT0lVWbgDaHNoIPfscrLPbGjGU8M3u4K 5kHMkJ79n6kmriGJjPU1ELtVIqFCQT931w+Oc1WvbFXMiA++i+YddcuT2pajteygwtmS us1w== 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 :message-id:date:subject:cc:to:from:dkim-signature; bh=ZW5D7Er+x39YN3Hv0KAQ4j2AaDDKkBCAZBsn8akjUoQ=; b=IzlAvBANnqe4yJJSgQTpPj9sLhorOwsMXu2y7+1A18HEt0ldlatvaJxs+8yEV/pOH1 5dA+z/j/SEMiSBUDZRt/pHraiPygqyG91Vsz69xJYKOI1ZJUxFcYeDArz6/Y1b6Rir72 H2yIyyUpkSn0x4rZ5VHw2nu1O3TiQy8VeonchUH9eyD9G3B1Pz+D9Y3G+kYcFCyRDJSt wBqHuoehf2KaxcjmJqkmmEG7hVaY6u/ksdVMVzrfImlPzdqIn7sCvzKtqt6p7KnNm/b1 E8oIMG2ehJIG6ueXxmMH7LXsNUmRkc89o4jaPG3RVEj2UaQ/aqwTCh+xYqQVaR32GVyU kL2w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=Ld29gQkj; 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=kernel.org Return-Path: Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [2620:137:e000::1:18]) by mx.google.com with ESMTPS id a75-20020a811a4e000000b002eb578580b8si1686570ywa.323.2022.04.27.09.27.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 27 Apr 2022 09:27:55 -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=@kernel.org header.s=k20201202 header.b=Ld29gQkj; 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=kernel.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id DA403991A0; Wed, 27 Apr 2022 08:57:23 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241124AbiD0P6w (ORCPT + 99 others); Wed, 27 Apr 2022 11:58:52 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56828 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240815AbiD0P6P (ORCPT ); Wed, 27 Apr 2022 11:58:15 -0400 Received: from ams.source.kernel.org (ams.source.kernel.org [IPv6:2604:1380:4601:e00::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D886D712EB; Wed, 27 Apr 2022 08:54:43 -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 1C61DB82881; Wed, 27 Apr 2022 15:54:41 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id B0E46C385A9; Wed, 27 Apr 2022 15:54:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1651074879; bh=Q2Wg0f11Q6IIlcPJ/b7UtaXwtP9iKWdEGB/4BG3k6bo=; h=From:To:Cc:Subject:Date:From; b=Ld29gQkjZjkZZYoY/ffWgvKnH+yrSCwQI5NhsMJMqFuGmIiUcpb8hkiGM+xEttCmM kaPX7XaEzgBAgGeZ6XXZX0xkg4NL78ENNPGf3OAB1s82d8TBU94JpIc3Cj4Gk9xAQx 7jzQsy1A8bDl6fAJIzu49tmgicCUjj7zk8yGrop2HlIzIhaMATu1a8TdNKw54voBqY bKViKj7V5imM+/lJFLoH/H1noYW/WyAsYlT78Owaku5pQvVeiGJ5TXFH2gFBtBfOty /y7+wVn5ruJTyx4g95N2dmjKu8i0E8PhCJ03rPs01BZaPjBl+1gU0VHcsRTdz75M3u ErTjb3fIolqoQ== 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.4 1/2] x86/kvm: Preserve BSP MSR_KVM_POLL_CONTROL across suspend/resume Date: Wed, 27 Apr 2022 11:54:37 -0400 Message-Id: <20220427155438.19612-1-sashal@kernel.org> X-Mailer: git-send-email 2.35.1 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 408b51aba293..f582dda8dd34 100644 --- a/arch/x86/kernel/kvm.c +++ b/arch/x86/kernel/kvm.c @@ -59,6 +59,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 */ @@ -584,14 +585,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