kvm.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Vitaly Kuznetsov <vkuznets@redhat.com>
To: kvm@vger.kernel.org, x86@kernel.org
Cc: "Stephen Hemminger" <sthemmin@microsoft.com>,
	"Radim Krčmář" <rkrcmar@redhat.com>,
	"Haiyang Zhang" <haiyangz@microsoft.com>,
	linux-kernel@vger.kernel.org, devel@linuxdriverproject.org,
	"Michael Kelley (EOSG)" <Michael.H.Kelley@microsoft.com>,
	"Ingo Molnar" <mingo@redhat.com>,
	"Roman Kagan" <rkagan@virtuozzo.com>,
	"Andy Lutomirski" <luto@kernel.org>,
	"H. Peter Anvin" <hpa@zytor.com>,
	"Paolo Bonzini" <pbonzini@redhat.com>,
	"Thomas Gleixner" <tglx@linutronix.de>,
	"Mohammed Gamal" <mmorsy@redhat.com>
Subject: [PATCH v3 4/7] x86/hyper-v: redirect reenlightment notifications on CPU offlining
Date: Tue, 16 Jan 2018 19:26:57 +0100	[thread overview]
Message-ID: <20180116182700.1042-5-vkuznets@redhat.com> (raw)
In-Reply-To: <20180116182700.1042-1-vkuznets@redhat.com>

It is very unlikely for CPUs to get offlined when we run on Hyper-V as
we have a protection in vmbus module which prevents it when we have any
VMBus devices assigned. This, however,  may change in future if an option
to reassign an already active channel will be added. It is also possible
to run without any Hyper-V devices of have a CPU with no assigned channels.

Reassign reenlightenment notifications to some other active CPU when
the CPU which is assigned to get them goes offline.

Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
---
v2-> v3:
- Drop spinlock protection from hv_cpu_die() as cpu hotplug is already
  serialized [Thomas Gleixner]
- Use cpumask_any_but() in hv_cpu_die() [Thomas Gleixner]
---
 arch/x86/hyperv/hv_init.c | 22 +++++++++++++++++++++-
 1 file changed, 21 insertions(+), 1 deletion(-)

diff --git a/arch/x86/hyperv/hv_init.c b/arch/x86/hyperv/hv_init.c
index 712ac40081f7..e4377e2f2a10 100644
--- a/arch/x86/hyperv/hv_init.c
+++ b/arch/x86/hyperv/hv_init.c
@@ -191,6 +191,26 @@ void clear_hv_tscchange_cb(void)
 }
 EXPORT_SYMBOL_GPL(clear_hv_tscchange_cb);
 
+static int hv_cpu_die(unsigned int cpu)
+{
+	struct hv_reenlightenment_control re_ctrl;
+	unsigned int new_cpu;
+
+	if (hv_reenlightenment_cb == NULL)
+		return 0;
+
+	rdmsrl(HV_X64_MSR_REENLIGHTENMENT_CONTROL, *((u64 *)&re_ctrl));
+	if (re_ctrl.target_vp == hv_vp_index[cpu]) {
+		/* Reassign to some other online CPU */
+		new_cpu = cpumask_any_but(cpu_online_mask, cpu);
+
+		re_ctrl.target_vp = hv_vp_index[new_cpu];
+		wrmsrl(HV_X64_MSR_REENLIGHTENMENT_CONTROL, *((u64 *)&re_ctrl));
+	}
+
+	return 0;
+}
+
 /*
  * This function is to be invoked early in the boot sequence after the
  * hypervisor has been detected.
@@ -220,7 +240,7 @@ void hyperv_init(void)
 		return;
 
 	if (cpuhp_setup_state(CPUHP_AP_ONLINE_DYN, "x86/hyperv_init:online",
-			      hv_cpu_init, NULL) < 0)
+			      hv_cpu_init, hv_cpu_die) < 0)
 		goto free_vp_index;
 
 	/*
-- 
2.14.3

  parent reply	other threads:[~2018-01-16 18:26 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-01-16 18:26 [PATCH v3 0/7] x86/kvm/hyperv: stable clocksorce for L2 guests when running nested KVM on Hyper-V Vitaly Kuznetsov
2018-01-16 18:26 ` [PATCH v3 1/7] x86/hyper-v: check for required priviliges in hyperv_init() Vitaly Kuznetsov
2018-01-16 18:26 ` [PATCH v3 2/7] x86/hyper-v: add a function to read both TSC and TSC page value simulateneously Vitaly Kuznetsov
2018-01-16 18:26 ` [PATCH v3 3/7] x86/hyper-v: reenlightenment notifications support Vitaly Kuznetsov
2018-01-16 18:33   ` Thomas Gleixner
2018-01-19 10:21   ` kbuild test robot
2018-01-19 10:47     ` Vitaly Kuznetsov
2018-01-20  7:48       ` Thomas Gleixner
2018-01-22  1:22         ` Michael Kelley (EOSG)
2018-01-22 12:06           ` Vitaly Kuznetsov
2018-01-23 13:41             ` Vitaly Kuznetsov
2018-01-23 14:02               ` Michael Kelley (EOSG)
2018-01-23 14:07                 ` Vitaly Kuznetsov
2018-01-22 10:41         ` Vitaly Kuznetsov
2018-01-19 11:11   ` kbuild test robot
2018-01-16 18:26 ` Vitaly Kuznetsov [this message]
2018-01-16 18:31   ` [PATCH v3 4/7] x86/hyper-v: redirect reenlightment notifications on CPU offlining Thomas Gleixner
2018-01-16 18:26 ` [PATCH v3 5/7] x86/irq: Count Hyper-V reenlightenment interrupts Vitaly Kuznetsov
2018-01-16 18:32   ` Thomas Gleixner
2018-01-16 18:26 ` [PATCH v3 6/7] x86/kvm: pass stable clocksource to guests when running nested on Hyper-V Vitaly Kuznetsov
2018-01-16 18:27 ` [PATCH v3 7/7] x86/kvm: support Hyper-V reenlightenment Vitaly Kuznetsov
2018-01-19 11:15   ` [RFC PATCH] x86/kvm: kvm_hyperv_tsc_notifier() can be static kbuild test robot
2018-01-19 11:15   ` [PATCH v3 7/7] x86/kvm: support Hyper-V reenlightenment kbuild test robot

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=20180116182700.1042-5-vkuznets@redhat.com \
    --to=vkuznets@redhat.com \
    --cc=Michael.H.Kelley@microsoft.com \
    --cc=devel@linuxdriverproject.org \
    --cc=haiyangz@microsoft.com \
    --cc=hpa@zytor.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=luto@kernel.org \
    --cc=mingo@redhat.com \
    --cc=mmorsy@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=rkagan@virtuozzo.com \
    --cc=rkrcmar@redhat.com \
    --cc=sthemmin@microsoft.com \
    --cc=tglx@linutronix.de \
    --cc=x86@kernel.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).