* [Qemu-devel] [PULL 0/4] Xen 2013-09-25
@ 2013-09-25 16:51 Stefano Stabellini
2013-09-25 16:51 ` [Qemu-devel] [PULL 1/4] qemu: Adjust qemu wakeup Stefano Stabellini
` (3 more replies)
0 siblings, 4 replies; 5+ messages in thread
From: Stefano Stabellini @ 2013-09-25 16:51 UTC (permalink / raw)
To: Anthony Liguori; +Cc: Anthony.Perard, xen-devel, qemu-devel, Stefano Stabellini
The following changes since commit f828a4c8faa118e0ebab3e353ac6840f3b2a0318:
Merge remote-tracking branch 'stefanha/tracing' into staging (2013-09-23 11:53:22 -0500)
are available in the git repository at:
git://xenbits.xen.org/people/sstabellini/qemu-dm.git xen-2013-09-25
Anthony PERARD (2):
xen: Fix vcpu initialization.
xen: Enable cpu-hotplug on xenfv machine.
Liu, Jinsong (2):
qemu: Adjust qemu wakeup
qemu: Add qemu xen logic for Xen HVM S3 resume
hw/acpi/core.c | 3 ++-
hw/i386/pc_piix.c | 1 +
include/sysemu/sysemu.h | 4 +++-
vl.c | 15 +++++++--------
xen-all.c | 17 +++++++++++++----
5 files changed, 26 insertions(+), 14 deletions(-)
^ permalink raw reply [flat|nested] 5+ messages in thread
* [Qemu-devel] [PULL 1/4] qemu: Adjust qemu wakeup
2013-09-25 16:51 [Qemu-devel] [PULL 0/4] Xen 2013-09-25 Stefano Stabellini
@ 2013-09-25 16:51 ` Stefano Stabellini
2013-09-25 16:51 ` [Qemu-devel] [PULL 2/4] qemu: Add qemu xen logic for Xen HVM S3 resume Stefano Stabellini
` (2 subsequent siblings)
3 siblings, 0 replies; 5+ messages in thread
From: Stefano Stabellini @ 2013-09-25 16:51 UTC (permalink / raw)
To: anthony
Cc: Anthony.Perard, Liu, Jinsong, xen-devel, qemu-devel,
Stefano Stabellini
From: Liu, Jinsong <jinsong.liu@intel.com>
Currently Xen hvm s3 has a bug coming from the difference between
qemu-traditioanl and qemu-xen. For qemu-traditional, the way to
resume from hvm s3 is via 'xl trigger' command. However, for
qemu-xen, the way to resume from hvm s3 inherited from standard
qemu, i.e. via QMP, and it doesn't work under Xen.
The root cause is, for qemu-xen, 'xl trigger' command didn't reset
devices, while QMP didn't unpause hvm domain though they did qemu
system reset.
We have two qemu patches and one xl patch to fix Xen hvm s3 bug.
This patch is the qemu patch 1. It adjusts qemu wakeup so that
Xen s3 resume logic (which will be implemented at qemu patch 2)
will be notified after qemu system reset.
Signed-off-by: Liu Jinsong <jinsong.liu@intel.com>
Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Reviewed-by: Anthony PERARD <anthony.perard@citrix.com>
---
hw/acpi/core.c | 3 ++-
include/sysemu/sysemu.h | 4 +++-
vl.c | 15 +++++++--------
3 files changed, 12 insertions(+), 10 deletions(-)
diff --git a/hw/acpi/core.c b/hw/acpi/core.c
index 7467b88..7138139 100644
--- a/hw/acpi/core.c
+++ b/hw/acpi/core.c
@@ -324,12 +324,13 @@ static void acpi_notify_wakeup(Notifier *notifier, void *data)
(ACPI_BITMASK_WAKE_STATUS | ACPI_BITMASK_TIMER_STATUS);
break;
case QEMU_WAKEUP_REASON_OTHER:
- default:
/* ACPI_BITMASK_WAKE_STATUS should be set on resume.
Pretend that resume was caused by power button */
ar->pm1.evt.sts |=
(ACPI_BITMASK_WAKE_STATUS | ACPI_BITMASK_POWER_BUTTON_STATUS);
break;
+ default:
+ break;
}
}
diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h
index e2c6f58..ffc53aa 100644
--- a/include/sysemu/sysemu.h
+++ b/include/sysemu/sysemu.h
@@ -41,9 +41,11 @@ int vm_stop(RunState state);
int vm_stop_force_state(RunState state);
typedef enum WakeupReason {
- QEMU_WAKEUP_REASON_OTHER = 0,
+ /* Always keep QEMU_WAKEUP_REASON_NONE = 0 */
+ QEMU_WAKEUP_REASON_NONE = 0,
QEMU_WAKEUP_REASON_RTC,
QEMU_WAKEUP_REASON_PMTIMER,
+ QEMU_WAKEUP_REASON_OTHER,
} WakeupReason;
void qemu_system_reset_request(void);
diff --git a/vl.c b/vl.c
index 4e709d5..e4113ef 100644
--- a/vl.c
+++ b/vl.c
@@ -1718,14 +1718,14 @@ static pid_t shutdown_pid;
static int powerdown_requested;
static int debug_requested;
static int suspend_requested;
-static int wakeup_requested;
+static WakeupReason wakeup_reason;
static NotifierList powerdown_notifiers =
NOTIFIER_LIST_INITIALIZER(powerdown_notifiers);
static NotifierList suspend_notifiers =
NOTIFIER_LIST_INITIALIZER(suspend_notifiers);
static NotifierList wakeup_notifiers =
NOTIFIER_LIST_INITIALIZER(wakeup_notifiers);
-static uint32_t wakeup_reason_mask = ~0;
+static uint32_t wakeup_reason_mask = ~(1 << QEMU_WAKEUP_REASON_NONE);
static RunState vmstop_requested = RUN_STATE_MAX;
int qemu_shutdown_requested_get(void)
@@ -1775,11 +1775,9 @@ static int qemu_suspend_requested(void)
return r;
}
-static int qemu_wakeup_requested(void)
+static WakeupReason qemu_wakeup_requested(void)
{
- int r = wakeup_requested;
- wakeup_requested = 0;
- return r;
+ return wakeup_reason;
}
static int qemu_powerdown_requested(void)
@@ -1896,8 +1894,7 @@ void qemu_system_wakeup_request(WakeupReason reason)
return;
}
runstate_set(RUN_STATE_RUNNING);
- notifier_list_notify(&wakeup_notifiers, &reason);
- wakeup_requested = 1;
+ wakeup_reason = reason;
qemu_notify_event();
}
@@ -1989,6 +1986,8 @@ static bool main_loop_should_exit(void)
pause_all_vcpus();
cpu_synchronize_all_states();
qemu_system_reset(VMRESET_SILENT);
+ notifier_list_notify(&wakeup_notifiers, &wakeup_reason);
+ wakeup_reason = QEMU_WAKEUP_REASON_NONE;
resume_all_vcpus();
monitor_protocol_event(QEVENT_WAKEUP, NULL);
}
--
1.7.2.5
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [Qemu-devel] [PULL 2/4] qemu: Add qemu xen logic for Xen HVM S3 resume
2013-09-25 16:51 [Qemu-devel] [PULL 0/4] Xen 2013-09-25 Stefano Stabellini
2013-09-25 16:51 ` [Qemu-devel] [PULL 1/4] qemu: Adjust qemu wakeup Stefano Stabellini
@ 2013-09-25 16:51 ` Stefano Stabellini
2013-09-25 16:51 ` [Qemu-devel] [PULL 3/4] xen: Fix vcpu initialization Stefano Stabellini
2013-09-25 16:51 ` [Qemu-devel] [PULL 4/4] xen: Enable cpu-hotplug on xenfv machine Stefano Stabellini
3 siblings, 0 replies; 5+ messages in thread
From: Stefano Stabellini @ 2013-09-25 16:51 UTC (permalink / raw)
To: anthony
Cc: Anthony.Perard, Liu, Jinsong, xen-devel, qemu-devel,
Stefano Stabellini
From: Liu, Jinsong <jinsong.liu@intel.com>
This patch is qemu patch 2 to fix Xen HVM S3 bug, adding qemu
xen logic. When qemu wakeup, qemu xen logic is notified and
hypercall to xen hypervisor to unpause domain.
Signed-off-by: Liu Jinsong <jinsong.liu@intel.com>
Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Reviewed-by: Anthony PERARD <anthony.perard@citrix.com>
---
xen-all.c | 9 +++++++++
1 files changed, 9 insertions(+), 0 deletions(-)
diff --git a/xen-all.c b/xen-all.c
index 839f14f..10af44c 100644
--- a/xen-all.c
+++ b/xen-all.c
@@ -98,6 +98,7 @@ typedef struct XenIOState {
Notifier exit;
Notifier suspend;
+ Notifier wakeup;
} XenIOState;
/* Xen specific function for piix pci */
@@ -1060,6 +1061,11 @@ static void xen_read_physmap(XenIOState *state)
free(entries);
}
+static void xen_wakeup_notifier(Notifier *notifier, void *data)
+{
+ xc_set_hvm_param(xen_xc, xen_domid, HVM_PARAM_ACPI_S_STATE, 0);
+}
+
int xen_hvm_init(MemoryRegion **ram_memory)
{
int i, rc;
@@ -1089,6 +1095,9 @@ int xen_hvm_init(MemoryRegion **ram_memory)
state->suspend.notify = xen_suspend_notifier;
qemu_register_suspend_notifier(&state->suspend);
+ state->wakeup.notify = xen_wakeup_notifier;
+ qemu_register_wakeup_notifier(&state->wakeup);
+
xc_get_hvm_param(xen_xc, xen_domid, HVM_PARAM_IOREQ_PFN, &ioreq_pfn);
DPRINTF("shared page at pfn %lx\n", ioreq_pfn);
state->shared_page = xc_map_foreign_range(xen_xc, xen_domid, XC_PAGE_SIZE,
--
1.7.2.5
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [Qemu-devel] [PULL 3/4] xen: Fix vcpu initialization.
2013-09-25 16:51 [Qemu-devel] [PULL 0/4] Xen 2013-09-25 Stefano Stabellini
2013-09-25 16:51 ` [Qemu-devel] [PULL 1/4] qemu: Adjust qemu wakeup Stefano Stabellini
2013-09-25 16:51 ` [Qemu-devel] [PULL 2/4] qemu: Add qemu xen logic for Xen HVM S3 resume Stefano Stabellini
@ 2013-09-25 16:51 ` Stefano Stabellini
2013-09-25 16:51 ` [Qemu-devel] [PULL 4/4] xen: Enable cpu-hotplug on xenfv machine Stefano Stabellini
3 siblings, 0 replies; 5+ messages in thread
From: Stefano Stabellini @ 2013-09-25 16:51 UTC (permalink / raw)
To: anthony; +Cc: Anthony PERARD, xen-devel, qemu-devel, Stefano Stabellini
From: Anthony PERARD <anthony.perard@citrix.com>
Each vcpu need a evtchn binded in qemu, even those that are
offline at QEMU initialisation.
Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
---
xen-all.c | 8 ++++----
1 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/xen-all.c b/xen-all.c
index 10af44c..48e881b 100644
--- a/xen-all.c
+++ b/xen-all.c
@@ -614,13 +614,13 @@ static ioreq_t *cpu_get_ioreq(XenIOState *state)
}
if (port != -1) {
- for (i = 0; i < smp_cpus; i++) {
+ for (i = 0; i < max_cpus; i++) {
if (state->ioreq_local_port[i] == port) {
break;
}
}
- if (i == smp_cpus) {
+ if (i == max_cpus) {
hw_error("Fatal error while trying to get io event!\n");
}
@@ -1115,10 +1115,10 @@ int xen_hvm_init(MemoryRegion **ram_memory)
hw_error("map buffered IO page returned error %d", errno);
}
- state->ioreq_local_port = g_malloc0(smp_cpus * sizeof (evtchn_port_t));
+ state->ioreq_local_port = g_malloc0(max_cpus * sizeof (evtchn_port_t));
/* FIXME: how about if we overflow the page here? */
- for (i = 0; i < smp_cpus; i++) {
+ for (i = 0; i < max_cpus; i++) {
rc = xc_evtchn_bind_interdomain(state->xce_handle, xen_domid,
xen_vcpu_eport(state->shared_page, i));
if (rc == -1) {
--
1.7.2.5
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [Qemu-devel] [PULL 4/4] xen: Enable cpu-hotplug on xenfv machine.
2013-09-25 16:51 [Qemu-devel] [PULL 0/4] Xen 2013-09-25 Stefano Stabellini
` (2 preceding siblings ...)
2013-09-25 16:51 ` [Qemu-devel] [PULL 3/4] xen: Fix vcpu initialization Stefano Stabellini
@ 2013-09-25 16:51 ` Stefano Stabellini
3 siblings, 0 replies; 5+ messages in thread
From: Stefano Stabellini @ 2013-09-25 16:51 UTC (permalink / raw)
To: anthony; +Cc: Anthony PERARD, xen-devel, qemu-devel, Stefano Stabellini
From: Anthony PERARD <anthony.perard@citrix.com>
Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
---
hw/i386/pc_piix.c | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
index 907792b..c6042c7 100644
--- a/hw/i386/pc_piix.c
+++ b/hw/i386/pc_piix.c
@@ -741,6 +741,7 @@ static QEMUMachine xenfv_machine = {
.init = pc_xen_hvm_init,
.max_cpus = HVM_MAX_VCPUS,
.default_machine_opts = "accel=xen",
+ .hot_add_cpu = pc_hot_add_cpu,
};
#endif
--
1.7.2.5
^ permalink raw reply related [flat|nested] 5+ messages in thread
end of thread, other threads:[~2013-09-25 16:52 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-09-25 16:51 [Qemu-devel] [PULL 0/4] Xen 2013-09-25 Stefano Stabellini
2013-09-25 16:51 ` [Qemu-devel] [PULL 1/4] qemu: Adjust qemu wakeup Stefano Stabellini
2013-09-25 16:51 ` [Qemu-devel] [PULL 2/4] qemu: Add qemu xen logic for Xen HVM S3 resume Stefano Stabellini
2013-09-25 16:51 ` [Qemu-devel] [PULL 3/4] xen: Fix vcpu initialization Stefano Stabellini
2013-09-25 16:51 ` [Qemu-devel] [PULL 4/4] xen: Enable cpu-hotplug on xenfv machine Stefano Stabellini
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).