[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 10/15] vl: add qemu_cpu_reset_request()
From: |
TAKEDA, toshiya |
Subject: |
[Qemu-devel] [PATCH v2 10/15] vl: add qemu_cpu_reset_request() |
Date: |
Thu, 01 Oct 2009 20:55:43 +0900 |
This patch is to add qemu_cpu_reset_request() function.
It is like qemu_syste_reset_request(), but it resets only CPUs and does not
reset other devices.
diff --git a/qemu/sysemu.h b/qemu/sysemu.h
index 8bf90ee..6e8dab1 100644
--- a/qemu/sysemu.h
+++ b/qemu/sysemu.h
@@ -43,13 +43,16 @@ void cpu_enable_ticks(void);
void cpu_disable_ticks(void);
void qemu_system_reset_request(void);
+void qemu_cpu_reset_request(void);
void qemu_system_shutdown_request(void);
void qemu_system_powerdown_request(void);
int qemu_shutdown_requested(void);
int qemu_reset_requested(void);
+int qemu_cpu_reset_requested(void);
int qemu_powerdown_requested(void);
extern qemu_irq qemu_system_powerdown;
void qemu_system_reset(void);
+void qemu_cpu_reset(void);
void do_savevm(Monitor *mon, const QDict *qdict);
int load_vmstate(Monitor *mon, const char *name);
diff --git a/qemu/vl.c b/qemu/vl.c
index 7bfd415..4eee579 100644
--- a/qemu/vl.c
+++ b/qemu/vl.c
@@ -3205,6 +3205,7 @@ typedef struct QEMUResetEntry {
static QTAILQ_HEAD(reset_handlers, QEMUResetEntry) reset_handlers =
QTAILQ_HEAD_INITIALIZER(reset_handlers);
static int reset_requested;
+static int cpu_reset_requested;
static int shutdown_requested;
static int powerdown_requested;
static int debug_requested;
@@ -3224,6 +3225,13 @@ int qemu_reset_requested(void)
return r;
}
+int qemu_cpu_reset_requested(void)
+{
+ int r = cpu_reset_requested;
+ cpu_reset_requested = 0;
+ return r;
+}
+
int qemu_powerdown_requested(void)
{
int r = powerdown_requested;
@@ -3287,6 +3295,16 @@ void qemu_system_reset(void)
}
}
+void qemu_cpu_reset(void)
+{
+ CPUState *env;
+
+ /* reset all cpus */
+ for(env = first_cpu; env != NULL; env = env->next_cpu) {
+ cpu_reset(env);
+ }
+}
+
void qemu_system_reset_request(void)
{
if (no_reboot) {
@@ -3297,6 +3315,12 @@ void qemu_system_reset_request(void)
qemu_notify_event();
}
+void qemu_cpu_reset_request(void)
+{
+ cpu_reset_requested = 1;
+ qemu_notify_event();
+}
+
void qemu_system_shutdown_request(void)
{
shutdown_requested = 1;
@@ -4065,6 +4089,8 @@ static int vm_can_run(void)
return 0;
if (reset_requested)
return 0;
+ if (cpu_reset_requested)
+ return 0;
if (shutdown_requested)
return 0;
if (debug_requested)
@@ -4114,6 +4140,11 @@ static void main_loop(void)
qemu_system_reset();
resume_all_vcpus();
}
+ if (qemu_cpu_reset_requested()) {
+ pause_all_vcpus();
+ qemu_cpu_reset();
+ resume_all_vcpus();
+ }
if (qemu_powerdown_requested()) {
qemu_irq_raise(qemu_system_powerdown);
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Qemu-devel] [PATCH v2 10/15] vl: add qemu_cpu_reset_request(),
TAKEDA, toshiya <=