public inbox for kvm@vger.kernel.org
 help / color / mirror / Atom feed
From: Avi Kivity <avi-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
To: kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org
Cc: linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: [PATCH 14/20] HOTPLUG: Add CPU_DYING notifier
Date: Sun,  8 Jul 2007 14:54:43 +0300	[thread overview]
Message-ID: <11838956892953-git-send-email-avi@qumranet.com> (raw)
In-Reply-To: <11838956891287-git-send-email-avi-atKUWr5tajBWk0Htik3J/w@public.gmane.org>

KVM wants a notification when a cpu is about to die, so it can disable
hardware extensions, but at a time when user processes cannot be scheduled
on the cpu, so it doesn't try to use virtualization extensions after they
have been disabled.

This adds a CPU_DYING notification.  The notification is called in atomic
context on the doomed cpu.

Signed-off-by: Avi Kivity <avi-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
---
 include/linux/notifier.h |    3 +++
 kernel/cpu.c             |   16 ++++++++++++++--
 2 files changed, 17 insertions(+), 2 deletions(-)

diff --git a/include/linux/notifier.h b/include/linux/notifier.h
index 9431101..576f2bb 100644
--- a/include/linux/notifier.h
+++ b/include/linux/notifier.h
@@ -196,6 +196,8 @@ extern int __srcu_notifier_call_chain(struct srcu_notifier_head *nh,
 #define CPU_DEAD		0x0007 /* CPU (unsigned)v dead */
 #define CPU_LOCK_ACQUIRE	0x0008 /* Acquire all hotcpu locks */
 #define CPU_LOCK_RELEASE	0x0009 /* Release all hotcpu locks */
+#define CPU_DYING		0x000A /* CPU (unsigned)v not running any task,
+				        * not handling interrupts, soon dead */
 
 /* Used for CPU hotplug events occuring while tasks are frozen due to a suspend
  * operation in progress
@@ -208,6 +210,7 @@ extern int __srcu_notifier_call_chain(struct srcu_notifier_head *nh,
 #define CPU_DOWN_PREPARE_FROZEN	(CPU_DOWN_PREPARE | CPU_TASKS_FROZEN)
 #define CPU_DOWN_FAILED_FROZEN	(CPU_DOWN_FAILED | CPU_TASKS_FROZEN)
 #define CPU_DEAD_FROZEN		(CPU_DEAD | CPU_TASKS_FROZEN)
+#define CPU_DYING_FROZEN	(CPU_DYING | CPU_TASKS_FROZEN)
 
 #endif /* __KERNEL__ */
 #endif /* _LINUX_NOTIFIER_H */
diff --git a/kernel/cpu.c b/kernel/cpu.c
index 208cf34..181ae70 100644
--- a/kernel/cpu.c
+++ b/kernel/cpu.c
@@ -103,11 +103,19 @@ static inline void check_for_tasks(int cpu)
 	write_unlock_irq(&tasklist_lock);
 }
 
+struct take_cpu_down_param {
+	unsigned long mod;
+	void *hcpu;
+};
+
 /* Take this CPU down. */
-static int take_cpu_down(void *unused)
+static int take_cpu_down(void *_param)
 {
+	struct take_cpu_down_param *param = _param;
 	int err;
 
+	raw_notifier_call_chain(&cpu_chain, CPU_DYING | param->mod,
+				param->hcpu);
 	/* Ensure this CPU doesn't handle any more interrupts. */
 	err = __cpu_disable();
 	if (err < 0)
@@ -127,6 +135,10 @@ static int _cpu_down(unsigned int cpu, int tasks_frozen)
 	cpumask_t old_allowed, tmp;
 	void *hcpu = (void *)(long)cpu;
 	unsigned long mod = tasks_frozen ? CPU_TASKS_FROZEN : 0;
+	struct take_cpu_down_param tcd_param = {
+		.mod = mod,
+		.hcpu = hcpu,
+	};
 
 	if (num_online_cpus() == 1)
 		return -EBUSY;
@@ -153,7 +165,7 @@ static int _cpu_down(unsigned int cpu, int tasks_frozen)
 	set_cpus_allowed(current, tmp);
 
 	mutex_lock(&cpu_bitmask_lock);
-	p = __stop_machine_run(take_cpu_down, NULL, cpu);
+	p = __stop_machine_run(take_cpu_down, &tcd_param, cpu);
 	mutex_unlock(&cpu_bitmask_lock);
 
 	if (IS_ERR(p) || cpu_online(cpu)) {
-- 
1.5.2.2


-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/

  parent reply	other threads:[~2007-07-08 11:54 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-07-08 11:54 [PATCH 00/20] KVM updates for 2.6.23, part 2 Avi Kivity
     [not found] ` <11838956891287-git-send-email-avi-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-07-08 11:54   ` [PATCH 01/20] KVM: Implement emulation of "pop reg" instruction (opcode 0x58-0x5f) Avi Kivity
2007-07-08 11:54   ` [PATCH 02/20] KVM: Implement emulation of instruction "ret" (opcode 0xc3) Avi Kivity
2007-07-08 11:54   ` [PATCH 03/20] KVM: Adds support for in-kernel mmio handlers Avi Kivity
2007-07-08 11:54   ` [PATCH 04/20] KVM: VMX: Fix interrupt checking on lightweight exit Avi Kivity
2007-07-08 11:54   ` [PATCH 05/20] KVM: Add support for in-kernel pio handlers Avi Kivity
2007-07-08 11:54   ` [PATCH 06/20] KVM: Fix x86 emulator writeback Avi Kivity
2007-07-08 11:54   ` [PATCH 07/20] KVM: Avoid useless memory write when possible Avi Kivity
2007-07-08 11:54   ` [PATCH 08/20] KVM: VMX: Reinitialize the real-mode tss when entering real mode Avi Kivity
2007-07-08 11:54   ` [PATCH 09/20] KVM: MMU: Fix Wrong tlb flush order Avi Kivity
     [not found]     ` <1183895689306-git-send-email-avi-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-07-08 12:21       ` Ingo Molnar
     [not found]         ` <20070708122137.GB30226-X9Un+BFzKDI@public.gmane.org>
2007-07-08 12:42           ` Avi Kivity
2007-07-08 11:54   ` [PATCH 10/20] KVM: VMX: Remove unnecessary code in vmx_tlb_flush() Avi Kivity
2007-07-08 11:54   ` [PATCH 11/20] KVM: SVM: Reliably detect if SVM was disabled by BIOS Avi Kivity
     [not found]     ` <11838956892580-git-send-email-avi-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-07-08 13:43       ` Roland Dreier
     [not found]         ` <aday7hr105d.fsf-FYB4Gu1CFyUAvxtiuMwx3w@public.gmane.org>
2007-07-08 13:45           ` Avi Kivity
2007-07-08 11:54   ` [PATCH 12/20] KVM: Remove kvmfs in favor of the anonymous inodes source Avi Kivity
2007-07-08 11:54   ` [PATCH 13/20] KVM: Clean up #includes Avi Kivity
2007-07-08 11:54   ` Avi Kivity [this message]
2007-07-08 11:54   ` [PATCH 15/20] HOTPLUG: Adapt cpuset hotplug callback to CPU_DYING Avi Kivity
2007-07-08 11:54   ` [PATCH 16/20] HOTPLUG: Adapt thermal throttle " Avi Kivity
2007-07-08 11:54   ` [PATCH 17/20] SMP: Implement on_cpu() Avi Kivity
     [not found]     ` <p73lkdqzpdm.fsf@bingen.suse.de>
     [not found]       ` <p73lkdqzpdm.fsf-KvMlXPVkKihbpigZmTR7Iw@public.gmane.org>
2007-07-09  6:46         ` Avi Kivity
     [not found]           ` <4691D9C1.4050309-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-07-09  7:16             ` Andi Kleen
2007-07-09  9:40               ` Avi Kivity
     [not found]                 ` <46920270.3080309-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-07-09 11:28                   ` Avi Kivity
     [not found]                     ` <46921BE9.4040801-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-07-09 19:24                       ` Satyam Sharma
     [not found]                         ` <a781481a0707091224s3fb1a2acr6d3ccce091480f61-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2007-07-10  6:03                           ` Avi Kivity
     [not found]                             ` <4693211D.4040406-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-07-10  9:22                               ` Satyam Sharma
2007-07-10 11:03                                 ` Avi Kivity
     [not found]                                   ` <46936766.20900-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-07-11  0:07                                     ` Satyam Sharma
     [not found]                                       ` <a781481a0707101707w121da1b7hc82dc0e3638e4570-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2007-07-11  7:26                                         ` Avi Kivity
     [not found]                                           ` <46948626.6050308-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-07-11  7:47                                             ` Satyam Sharma
2007-07-11  9:43                                             ` gcc + kvm + 64 bit ? confused :-/ Benjamin Budts
     [not found]                                               ` <4694A63E.1050606-rJAIWvhRp0CZIoH1IeqzKA@public.gmane.org>
2007-07-11  9:47                                                 ` Avi Kivity
2007-07-11 10:54                                                 ` Andi Kleen
2007-07-08 11:54   ` [PATCH 18/20] KVM: Keep track of which cpus have virtualization enabled Avi Kivity
2007-07-08 11:54   ` [PATCH 19/20] KVM: Tune hotplug/suspend IPIs Avi Kivity
2007-07-08 11:54   ` [PATCH 20/20] KVM: Use CPU_DYING for disabling virtualization Avi Kivity

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=11838956892953-git-send-email-avi@qumranet.com \
    --to=avi-atkuwr5tajbwk0htik3j/w@public.gmane.org \
    --cc=kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org \
    --cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.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