diff mbox

[v3,1/2] xen: separate the xenstore_record_dm_state calls for pv and hvm machines

Message ID 1433930498-32338-1-git-send-email-stefano.stabellini@eu.citrix.com
State New
Headers show

Commit Message

Stefano Stabellini June 10, 2015, 10:01 a.m. UTC
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(-)
diff mbox

Patch

diff --git a/hw/xenpv/xen_machine_pv.c b/hw/xenpv/xen_machine_pv.c
index 2e545d2..68758a0 100644
--- a/hw/xenpv/xen_machine_pv.c
+++ b/hw/xenpv/xen_machine_pv.c
@@ -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,
diff --git a/xen-common.c b/xen-common.c
index 56359ca..5573c9e 100644
--- a/xen-common.c
+++ b/xen-common.c
@@ -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;
 }
 
diff --git a/xen-hvm.c b/xen-hvm.c
index 315864c..8079b8e 100644
--- a/xen-hvm.c
+++ b/xen-hvm.c
@@ -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,