@@ -45,6 +45,16 @@ static void xen_init_pv(MachineState *machine)
switch (xen_mode) {
case XEN_ATTACH:
/* nothing to do, xend handles everything */
+ {
+ char path[50];
+ /* record state running */
+ snprintf(path, sizeof (path), "device-model/%u/state", xen_domid);
+ if (!xs_write(xenstore, XBT_NULL, path, "running", strlen("running"))) {
+ fprintf(stderr, "error recording state\n");
+ exit(1);
+ }
+ }
+
break;
case XEN_CREATE:
if (xen_domain_build_pv(kernel_filename, initrd_filename,
@@ -83,33 +83,6 @@ void xenstore_store_pv_console_info(int i, CharDriverState *chr)
}
}
-
-static void xenstore_record_dm_state(struct xs_handle *xs, const char *state)
-{
- char path[50];
-
- if (xs == NULL) {
- fprintf(stderr, "xenstore connection not initialized\n");
- exit(1);
- }
-
- snprintf(path, sizeof (path), "device-model/%u/state", xen_domid);
- if (!xs_write(xs, XBT_NULL, path, state, strlen(state))) {
- fprintf(stderr, "error recording dm state\n");
- exit(1);
- }
-}
-
-
-static void xen_change_state_handler(void *opaque, int running,
- RunState state)
-{
- if (running) {
- /* record state running */
- xenstore_record_dm_state(xenstore, "running");
- }
-}
-
static int xen_init(MachineState *ms)
{
xen_xc = xen_xc_interface_open(0, 0, 0);
@@ -117,8 +90,6 @@ static int xen_init(MachineState *ms)
xen_be_printf(NULL, 0, "can't open xen interface\n");
return -1;
}
- qemu_add_vm_change_state_handler(xen_change_state_handler, NULL);
-
return 0;
}
@@ -1107,7 +1107,14 @@ static void xen_hvm_change_state_handler(void *opaque, int running,
XenIOState *state = opaque;
if (running) {
+ char path[50];
xen_main_loop_prepare(state);
+
+ snprintf(path, sizeof (path), "device-model/%u/state", xen_domid);
+ if (!xs_write(state->xenstore, XBT_NULL, path, "running", strlen("running"))) {
+ fprintf(stderr, "error recording state\n");
+ exit(1);
+ }
}
xen_set_ioreq_server_state(xen_xc, xen_domid,
The following patch will introduce a new option to restrict the privilege of the xenstore connection. In that case, we do not want to use multiple xenstore connections, but just the one, with lower privileges. For this reason, split the xenstore_record_dm_state calls for pv and hvm machines, so that in the hvm case QEMU will reuse the same xenstore connection. (At the moment it opens two and uses the second one for the xenstore_record_dm_state call.) As the xenstore_record_dm_state is not very useful anymore, just remove it. Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com> --- Changes in v2: - remove xenstore_record_dm_state and open code the xenstore write instead --- hw/xenpv/xen_machine_pv.c | 10 ++++++++++ xen-common.c | 29 ----------------------------- xen-hvm.c | 7 +++++++ 3 files changed, 17 insertions(+), 29 deletions(-)