All of lore.kernel.org
 help / color / mirror / Atom feed
From: Isaku Yamahata <isaku.yamahata@gmail.com>
To: Chao Gao <chao.gao@intel.com>
Cc: isaku.yamahata@intel.com, linux-kernel@vger.kernel.org,
	kvm@vger.kernel.org, Paolo Bonzini <pbonzini@redhat.com>,
	Sean Christopherson <seanjc@google.com>,
	Marc Zyngier <maz@kernel.org>, Will Deacon <will@kernel.org>,
	Yuan Yao <yuan.yao@linux.intel.com>,
	isaku.yamahata@gmail.com, Kai Huang <kai.huang@intel.com>,
	Atish Patra <atishp@atishpatra.org>,
	Shaokun Zhang <zhangshaokun@hisilicon.com>,
	Qi Liu <liuqi115@huawei.com>, John Garry <john.garry@huawei.com>,
	Daniel Lezcano <daniel.lezcano@linaro.org>,
	Huang Ying <ying.huang@intel.com>,
	Huacai Chen <chenhuacai@kernel.org>
Subject: Re: [PATCH v4 11/26] KVM: Add arch hooks for PM events with empty stub
Date: Sat, 10 Sep 2022 19:39:45 -0700	[thread overview]
Message-ID: <20220911023945.GD699006@ls.amr.corp.intel.com> (raw)
In-Reply-To: <YxrCX2nhOyWbbGGY@gao-cwp>

On Fri, Sep 09, 2022 at 12:34:39PM +0800,
Chao Gao <chao.gao@intel.com> wrote:

> On Thu, Sep 08, 2022 at 04:25:27PM -0700, isaku.yamahata@intel.com wrote:
> >From: Isaku Yamahata <isaku.yamahata@intel.com>
> >
> >Add arch hooks for reboot, suspend, resume, and CPU-online/offline events
> >with empty stub functions.
> >
> >Suggested-by: Sean Christopherson <seanjc@google.com>
> >Signed-off-by: Isaku Yamahata <isaku.yamahata@intel.com>
> >---
> > include/linux/kvm_host.h |  6 +++++
> > virt/kvm/Makefile.kvm    |  2 +-
> > virt/kvm/kvm_arch.c      | 44 ++++++++++++++++++++++++++++++
> > virt/kvm/kvm_main.c      | 58 +++++++++++++++++++++++++---------------
> > 4 files changed, 88 insertions(+), 22 deletions(-)
> > create mode 100644 virt/kvm/kvm_arch.c
> >
> >diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h
> >index eab352902de7..dd2a6d98d4de 100644
> >--- a/include/linux/kvm_host.h
> >+++ b/include/linux/kvm_host.h
> >@@ -1448,6 +1448,12 @@ int kvm_arch_post_init_vm(struct kvm *kvm);
> > void kvm_arch_pre_destroy_vm(struct kvm *kvm);
> > int kvm_arch_create_vm_debugfs(struct kvm *kvm);
> > 
> >+int kvm_arch_suspend(int usage_count);
> >+void kvm_arch_resume(int usage_count);
> >+int kvm_arch_reboot(int val);
> >+int kvm_arch_online_cpu(unsigned int cpu, int usage_count);
> >+int kvm_arch_offline_cpu(unsigned int cpu, int usage_count);
> 
> Why not extract each of them with one separate patch?

Do you mean one patch for each arch callback?  They are convoluted.
See the comment below.


> >diff --git a/virt/kvm/kvm_arch.c b/virt/kvm/kvm_arch.c
> >new file mode 100644
> >index 000000000000..4748a76bcb03
> >--- /dev/null
> >+++ b/virt/kvm/kvm_arch.c
> >@@ -0,0 +1,44 @@
> >+// SPDX-License-Identifier: GPL-2.0-only
> >+/*
> >+ * kvm_arch.c: kvm default arch hooks for hardware enabling/disabling
> >+ * Copyright (c) 2022 Intel Corporation.
> >+ *
> >+ * Author:
> >+ *   Isaku Yamahata <isaku.yamahata@intel.com>
> >+ *                  <isaku.yamahata@gmail.com>
> >+ */
> >+
> >+#include <linux/kvm_host.h>
> >+
> >+/*
> >+ * Called after the VM is otherwise initialized, but just before adding it to
> >+ * the vm_list.
> >+ */
> >+__weak int kvm_arch_post_init_vm(struct kvm *kvm)
> >+{
> >+	return 0;
> >+}
> 
> use "int __weak" to comply with kernel's convension.

Will fix.

> > static int kvm_offline_cpu(unsigned int cpu)
> > {
> >+	int ret = 0;
> >+
> > 	mutex_lock(&kvm_lock);
> > 	if (kvm_usage_count) {
> > 		/*
> >@@ -5069,10 +5067,15 @@ static int kvm_offline_cpu(unsigned int cpu)
> > 		 */
> > 		preempt_disable();
> > 		hardware_disable_nolock(NULL);
> >+		ret = kvm_arch_offline_cpu(cpu, kvm_usage_count);
> >+		if (ret) {
> >+			(void)hardware_enable_nolock(NULL);
> >+			atomic_set(&hardware_enable_failed, 0);
> 
> The error-handling code ignores hardware enabling failure which looks
> weird to me. If you extract kvm_arch_offline_cpu() directly like what
> you do in patch 14 (rather than add a stub function first and then move
> some code to the stub function), the error-handling code isn't needed.

I did it for x86 tsc fix.  It relates to suspend/resume.  I would split those
- introduce suspend/resuem/reboot arch hooks
- fix x86 tsc issue
- move
- introduce cpu online/offline arch hooks
- move out PM hooks. probably this can be combined into the previous one.


-- 
Isaku Yamahata <isaku.yamahata@gmail.com>

  reply	other threads:[~2022-09-11  2:40 UTC|newest]

Thread overview: 47+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-09-08 23:25 [PATCH v4 00/26] KVM: hardware enable/disable reorganize isaku.yamahata
2022-09-08 23:25 ` [PATCH v4 01/26] KVM: x86: Drop kvm_user_return_msr_cpu_online() isaku.yamahata
2022-09-08 23:25 ` [PATCH v4 02/26] KVM: x86: Use this_cpu_ptr() instead of per_cpu_ptr(smp_processor_id()) isaku.yamahata
2022-09-08 23:25 ` [PATCH v4 03/26] KVM: x86: Move check_processor_compatibility from init ops to runtime ops isaku.yamahata
2022-09-08 23:25 ` [PATCH v4 04/26] Partially revert "KVM: Pass kvm_init()'s opaque param to additional arch funcs" isaku.yamahata
2022-09-08 23:25 ` [PATCH v4 05/26] KVM: Provide more information in kernel log if hardware enabling fails isaku.yamahata
2022-09-08 23:25 ` [PATCH v4 06/26] KVM: arm64: Simplify the CPUHP logic isaku.yamahata
2022-09-12 15:07   ` Marc Zyngier
2022-09-08 23:25 ` [PATCH v4 07/26] KVM: Rename and move CPUHP_AP_KVM_STARTING to ONLINE section isaku.yamahata
2022-09-08 23:25 ` [PATCH v4 08/26] KVM: Do compatibility checks on hotplugged CPUs isaku.yamahata
2022-09-08 23:25 ` [PATCH v4 09/26] KVM: Do processor compatibility check on resume isaku.yamahata
2022-09-09  2:15   ` Chao Gao
2022-09-10 17:59     ` Isaku Yamahata
2022-09-08 23:25 ` [PATCH v4 10/26] KVM: Drop kvm_count_lock and instead protect kvm_usage_count with kvm_lock isaku.yamahata
2022-09-09  3:05   ` Chao Gao
2022-09-10 18:11     ` Isaku Yamahata
2022-09-08 23:25 ` [PATCH v4 11/26] KVM: Add arch hooks for PM events with empty stub isaku.yamahata
2022-09-09  4:34   ` Chao Gao
2022-09-11  2:39     ` Isaku Yamahata [this message]
2022-09-08 23:25 ` [PATCH v4 12/26] KVM: x86: Move TSC fixup logic to KVM arch resume callback isaku.yamahata
2022-09-09  5:48   ` Chao Gao
2022-09-11  2:45     ` Isaku Yamahata
2022-09-08 23:25 ` [PATCH v4 13/26] KVM: Add arch hook when VM is added/deleted isaku.yamahata
2022-09-09  6:08   ` Chao Gao
2022-09-11  2:50     ` Isaku Yamahata
2022-09-08 23:25 ` [PATCH v4 14/26] KVM: Move out KVM arch PM hooks and hardware enable/disable logic isaku.yamahata
2022-09-08 23:25 ` [PATCH v4 15/26] KVM: kvm_arch.c: Remove _nolock post fix isaku.yamahata
2022-09-09  6:30   ` Chao Gao
2022-09-08 23:25 ` [PATCH v4 16/26] KVM: kvm_arch.c: Remove a global variable, hardware_enable_failed isaku.yamahata
2022-09-09  6:54   ` Chao Gao
2022-09-11  3:00     ` Isaku Yamahata
2022-09-08 23:25 ` [PATCH v4 17/26] KVM: Introduce a arch wrapper to check all processor compatibility isaku.yamahata
2022-09-09  7:32   ` Chao Gao
2022-09-08 23:25 ` [PATCH v4 18/26] KVM: x86: Duplicate arch callbacks related to pm events and compat check isaku.yamahata
2022-09-08 23:25 ` [PATCH v4 19/26] KVM: Eliminate kvm_arch_post_init_vm() isaku.yamahata
2022-09-08 23:25 ` [PATCH v4 20/26] KVM: Add config to not compile kvm_arch.c isaku.yamahata
2022-09-08 23:25 ` [PATCH v4 21/26] KVM: x86: Delete kvm_arch_hardware_enable/disable() isaku.yamahata
2022-09-08 23:25 ` [PATCH v4 22/26] KVM: x86: Make x86 processor compat check callback empty isaku.yamahata
2022-09-08 23:25 ` [PATCH v4 23/26] RFC: KVM: powerpc: Move processor compatibility check to hardware setup isaku.yamahata
2022-09-08 23:25   ` isaku.yamahata
2022-09-09  5:55   ` Christophe Leroy
2022-09-09  5:55     ` Christophe Leroy
2022-09-10  1:39     ` Isaku Yamahata
2022-09-10  1:39       ` Isaku Yamahata
2022-09-08 23:25 ` [PATCH v4 24/26] KVM: Eliminate kvm_arch_check_processor_compat() isaku.yamahata
2022-09-08 23:25 ` [PATCH v4 25/26] RFC: KVM: x86: Remove cpus_hardware_enabled and related sanity check isaku.yamahata
2022-09-08 23:25 ` [PATCH v4 26/26] RFC: KVM: " isaku.yamahata

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220911023945.GD699006@ls.amr.corp.intel.com \
    --to=isaku.yamahata@gmail.com \
    --cc=atishp@atishpatra.org \
    --cc=chao.gao@intel.com \
    --cc=chenhuacai@kernel.org \
    --cc=daniel.lezcano@linaro.org \
    --cc=isaku.yamahata@intel.com \
    --cc=john.garry@huawei.com \
    --cc=kai.huang@intel.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=liuqi115@huawei.com \
    --cc=maz@kernel.org \
    --cc=pbonzini@redhat.com \
    --cc=seanjc@google.com \
    --cc=will@kernel.org \
    --cc=ying.huang@intel.com \
    --cc=yuan.yao@linux.intel.com \
    --cc=zhangshaokun@hisilicon.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.