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 v4 4/7] x86/hyper-v: redirect reenlightment notifications on CPU offlining Date: Wed, 24 Jan 2018 14:23:34 +0100 [thread overview] Message-ID: <20180124132337.30138-5-vkuznets@redhat.com> (raw) In-Reply-To: <20180124132337.30138-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> Reviewed-by: Thomas Gleixner <tglx@linutronix.de> --- 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 _______________________________________________ devel mailing list devel@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
WARNING: multiple messages have this Message-ID (diff)
From: Vitaly Kuznetsov <vkuznets@redhat.com> To: kvm@vger.kernel.org, x86@kernel.org Cc: "Paolo Bonzini" <pbonzini@redhat.com>, "Radim Krčmář" <rkrcmar@redhat.com>, "Thomas Gleixner" <tglx@linutronix.de>, "Ingo Molnar" <mingo@redhat.com>, "H. Peter Anvin" <hpa@zytor.com>, "K. Y. Srinivasan" <kys@microsoft.com>, "Haiyang Zhang" <haiyangz@microsoft.com>, "Stephen Hemminger" <sthemmin@microsoft.com>, "Michael Kelley (EOSG)" <Michael.H.Kelley@microsoft.com>, "Andy Lutomirski" <luto@kernel.org>, "Mohammed Gamal" <mmorsy@redhat.com>, "Cathy Avery" <cavery@redhat.com>, "Roman Kagan" <rkagan@virtuozzo.com>, linux-kernel@vger.kernel.org, devel@linuxdriverproject.org Subject: [PATCH v4 4/7] x86/hyper-v: redirect reenlightment notifications on CPU offlining Date: Wed, 24 Jan 2018 14:23:34 +0100 [thread overview] Message-ID: <20180124132337.30138-5-vkuznets@redhat.com> (raw) In-Reply-To: <20180124132337.30138-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> Reviewed-by: Thomas Gleixner <tglx@linutronix.de> --- 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
next prev parent reply other threads:[~2018-01-24 13:23 UTC|newest] Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top 2018-01-24 13:23 [PATCH v4 0/7] x86/kvm/hyperv: stable clocksource for L2 guests when running nested KVM on Hyper-V Vitaly Kuznetsov 2018-01-24 13:23 ` Vitaly Kuznetsov 2018-01-24 13:23 ` [PATCH v4 1/7] x86/hyper-v: check for required priviliges in hyperv_init() Vitaly Kuznetsov 2018-01-24 13:23 ` Vitaly Kuznetsov 2018-01-30 23:00 ` [tip:x86/hyperv] x86/hyperv: Check " tip-bot for Vitaly Kuznetsov 2018-01-24 13:23 ` [PATCH v4 2/7] x86/hyper-v: add a function to read both TSC and TSC page value simulateneously Vitaly Kuznetsov 2018-01-24 13:23 ` Vitaly Kuznetsov 2018-01-30 23:01 ` [tip:x86/hyperv] x86/hyperv: Add " tip-bot for Vitaly Kuznetsov 2018-01-24 13:23 ` [PATCH v4 3/7] x86/hyper-v: reenlightenment notifications support Vitaly Kuznetsov 2018-01-24 13:23 ` Vitaly Kuznetsov 2018-01-30 23:01 ` [tip:x86/hyperv] x86/hyperv: Reenlightenment " tip-bot for Vitaly Kuznetsov 2018-01-24 13:23 ` Vitaly Kuznetsov [this message] 2018-01-24 13:23 ` [PATCH v4 4/7] x86/hyper-v: redirect reenlightment notifications on CPU offlining Vitaly Kuznetsov 2018-01-30 23:02 ` [tip:x86/hyperv] x86/hyperv: Redirect " tip-bot for Vitaly Kuznetsov 2018-01-24 13:23 ` [PATCH v4 5/7] x86/irq: Count Hyper-V reenlightenment interrupts Vitaly Kuznetsov 2018-01-24 13:23 ` Vitaly Kuznetsov 2018-01-24 14:58 ` Radim Krčmář 2018-01-24 14:58 ` Radim Krčmář 2018-01-29 21:48 ` Thomas Gleixner 2018-01-29 21:48 ` Thomas Gleixner 2018-01-30 14:02 ` Radim Krčmář 2018-01-30 14:02 ` Radim Krčmář 2018-01-30 14:35 ` Thomas Gleixner 2018-01-30 23:48 ` Thomas Gleixner 2018-01-30 23:48 ` Thomas Gleixner 2018-01-30 23:02 ` [tip:x86/hyperv] " tip-bot for Vitaly Kuznetsov 2018-01-24 13:23 ` [PATCH v4 6/7] x86/kvm: pass stable clocksource to guests when running nested on Hyper-V Vitaly Kuznetsov 2018-01-24 13:23 ` Vitaly Kuznetsov 2018-01-30 23:02 ` [tip:x86/hyperv] x86/kvm: Pass " tip-bot for Vitaly Kuznetsov 2018-01-24 13:23 ` [PATCH v4 7/7] x86/kvm: support Hyper-V reenlightenment Vitaly Kuznetsov 2018-01-24 13:23 ` Vitaly Kuznetsov 2018-01-30 23:03 ` [tip:x86/hyperv] x86/kvm: Support " tip-bot for Vitaly Kuznetsov
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=20180124132337.30138-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: linkBe 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.