lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <tip-e7c4e36c447daca2b7df49024f6bf230871cb155@git.kernel.org>
Date:   Tue, 30 Jan 2018 15:02:01 -0800
From:   tip-bot for Vitaly Kuznetsov <tipbot@...or.com>
To:     linux-tip-commits@...r.kernel.org
Cc:     sthemmin@...rosoft.com, linux-kernel@...r.kernel.org,
        kys@...rosoft.com, haiyangz@...rosoft.com, hpa@...or.com,
        rkagan@...tuozzo.com, Michael.H.Kelley@...rosoft.com,
        mmorsy@...hat.com, pbonzini@...hat.com, tglx@...utronix.de,
        luto@...nel.org, cavery@...hat.com, mingo@...nel.org,
        rkrcmar@...hat.com, vkuznets@...hat.com
Subject: [tip:x86/hyperv] x86/hyperv: Redirect reenlightment notifications
 on CPU offlining

Commit-ID:  e7c4e36c447daca2b7df49024f6bf230871cb155
Gitweb:     https://git.kernel.org/tip/e7c4e36c447daca2b7df49024f6bf230871cb155
Author:     Vitaly Kuznetsov <vkuznets@...hat.com>
AuthorDate: Wed, 24 Jan 2018 14:23:34 +0100
Committer:  Thomas Gleixner <tglx@...utronix.de>
CommitDate: Tue, 30 Jan 2018 23:55:33 +0100

x86/hyperv: Redirect reenlightment notifications on CPU offlining

It is very unlikely for CPUs to get offlined when running on Hyper-V as
there is a protection in the vmbus module which prevents it when the guest
has 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 or to have a CPU with no
assigned channels.

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

Signed-off-by: Vitaly Kuznetsov <vkuznets@...hat.com>
Signed-off-by: Thomas Gleixner <tglx@...utronix.de>
Reviewed-by: Thomas Gleixner <tglx@...utronix.de>
Cc: Stephen Hemminger <sthemmin@...rosoft.com>
Cc: kvm@...r.kernel.org
Cc: Radim Krčmář <rkrcmar@...hat.com>
Cc: Haiyang Zhang <haiyangz@...rosoft.com>
Cc: "Michael Kelley (EOSG)" <Michael.H.Kelley@...rosoft.com>
Cc: Roman Kagan <rkagan@...tuozzo.com>
Cc: Andy Lutomirski <luto@...nel.org>
Cc: devel@...uxdriverproject.org
Cc: Paolo Bonzini <pbonzini@...hat.com>
Cc: "K. Y. Srinivasan" <kys@...rosoft.com>
Cc: Cathy Avery <cavery@...hat.com>
Cc: Mohammed Gamal <mmorsy@...hat.com>
Link: https://lkml.kernel.org/r/20180124132337.30138-5-vkuznets@redhat.com

---
 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 712ac40..e4377e2 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;
 
 	/*

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ