Received: by 2002:a05:6602:2086:0:0:0:0 with SMTP id a6csp4712279ioa; Wed, 27 Apr 2022 09:27:57 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyxo9ThC/pFf2ygGnlHGnEzEF7RAxCeXYKVjWHHfUppsAyu8S3oP03nolsPgR7SOpdV6BW0 X-Received: by 2002:a63:a515:0:b0:3b4:e71:efc6 with SMTP id n21-20020a63a515000000b003b40e71efc6mr4719524pgf.183.1651076877030; Wed, 27 Apr 2022 09:27:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1651076877; cv=none; d=google.com; s=arc-20160816; b=mH3fYCuJvy7IQJRWA4l4lqL4DbjMpbUP5fUQpbSMyDhAUvZ51R0g3Ex1Lrq6XkiciQ UXiJgAWBK/oVL/fgnAHQuX/hC9IXbW5RmwVkDdvxOLrWuJT2vUkgupBS8Xro3sOrX7yN M9hrKkHBNJQQ7jOL3u9GpSHUwMb3SDrNn+zreYbyacUiIVOX/gdHdl5JbFdGNioFnjMi 1fHKZmgDEBNcbDwgMeFQWSxMCv3yaruP3WKXVh02ymXpQ3EXTXYDUtvLsbU8/QJLVfSZ zHjvuSE5WPCeo8pr+7Ux9b1aRCtyggfgJulaq6iW2s0oWEFQwqBM47BRE2CnOXYx6kUY YhjA== 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=L6nKV75npCgVWqfC/ztlKk819gmaHkio7NzxevSc2sQ=; b=duHHqNwovEYu6tJHrsFIXbIBZzHD1lS5QMTn0xDovbinVSvP4wEqtDwng5affZq0az kYXx9mnwi67UiBYuAH4GquSYxZx+Zm1AwYdy2AqIlplVKOyX8TQSdtpRSWtfoB07ZPBG i7b2skyWYbD+P5aetQP5ypcLjK0SNgX4XN45RsfhX4h/KZ652fVT8HvYr1WIGhl3Cil6 DfQ3mmfs1eYmrAk9H8wYCY2its0JTl2766L9M/hvLM/CNyGSfFs7S1gKqqqbyUaSOHN2 wdz3J7j0d1lrxi9RmxRWr1azyZR7LHIiCf4szAo+EakD8iQ81UYmJ5YWfD4fzTu6x4zI o3EA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=o+kuXoa1; 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 c2-20020a631c42000000b003aba3fbf0fcsi2044250pgm.180.2022.04.27.09.27.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 27 Apr 2022 09:27: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=@kernel.org header.s=k20201202 header.b=o+kuXoa1; 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 5929B7C152; Wed, 27 Apr 2022 08:57:23 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240880AbiD0P6g (ORCPT + 99 others); Wed, 27 Apr 2022 11:58:36 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56826 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240709AbiD0P6E (ORCPT ); Wed, 27 Apr 2022 11:58:04 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8689977F27; Wed, 27 Apr 2022 08:54:34 -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 E608E61B2D; Wed, 27 Apr 2022 15:54:33 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2FF22C385AF; Wed, 27 Apr 2022 15:54:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1651074873; bh=68/j1f2siY5vbwja/tKj5PvdogndN7w1f7F6F5vMHDk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=o+kuXoa1f8SQiTdAxJTHqn6QORjE6j3HTvr6dw9LG1JWYXzqzMlaRGIHISTI6bPpB C881/TVYO5vxR3ffYMAZZTtH19RRs0j6tyMFhVoFNYHsnWvVzRlsUGgnfNs82Lw3Lx ucMkb1oNK35qJ27Lw6C40jynlAtzF9IPoUimn1W3sbzwB0MaqU7e4dOLvCZd4eFGzh PRf81YJRh4tJd9LfZkAaOGoKk4+rbbGX77V6szTMxVPZc2ZiSn8H+qWunsrETs9GuJ +zSExLFeftkY/bfRtvC5hnQZHDq9GC0XoceldrG+piRl7BUfP6qK+ulo0Mzex1vRNK PyzVfrgyFdnsQ== 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.15 3/7] x86/kvm: Preserve BSP MSR_KVM_POLL_CONTROL across suspend/resume Date: Wed, 27 Apr 2022 11:54:23 -0400 Message-Id: <20220427155431.19458-3-sashal@kernel.org> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220427155431.19458-1-sashal@kernel.org> References: <20220427155431.19458-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 bd7b65081eb0..d36b58e705b6 100644 --- a/arch/x86/kernel/kvm.c +++ b/arch/x86/kernel/kvm.c @@ -66,6 +66,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 */ @@ -650,14 +651,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