qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
To: qemu-devel@nongnu.org
Cc: xen-devel@lists.xensource.com, Ian.Jackson@eu.citrix.com,
	Ian.Campbell@citrix.com,
	Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Subject: [Qemu-devel] [PATCH 1/2] xen: separate the xenstore_record_dm_state calls for pv and hvm machines
Date: Mon, 1 Jun 2015 16:46:53 +0100	[thread overview]
Message-ID: <1433173614-19716-1-git-send-email-stefano.stabellini@eu.citrix.com> (raw)
In-Reply-To: <alpine.DEB.2.02.1506011641300.8130@kaball.uk.xensource.com>

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.)

Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
---
 hw/xenpv/xen_machine_pv.c |   11 +++++++++++
 include/hw/xen/xen.h      |    2 ++
 xen-common-stub.c         |    4 ++++
 xen-common.c              |   15 +--------------
 xen-hvm.c                 |    1 +
 5 files changed, 19 insertions(+), 14 deletions(-)

diff --git a/hw/xenpv/xen_machine_pv.c b/hw/xenpv/xen_machine_pv.c
index 2e545d2..5ad22e3 100644
--- a/hw/xenpv/xen_machine_pv.c
+++ b/hw/xenpv/xen_machine_pv.c
@@ -28,6 +28,15 @@
 #include "xen_domainbuild.h"
 #include "sysemu/block-backend.h"
 
+static void xen_change_state_handler(void *opaque, int running,
+                                     RunState state)
+{
+    if (running) {
+        /* record state running */
+        xenstore_record_dm_state(xenstore, "running");
+    }
+}
+
 static void xen_init_pv(MachineState *machine)
 {
     const char *kernel_filename = machine->kernel_filename;
@@ -91,6 +100,8 @@ static void xen_init_pv(MachineState *machine)
 
     /* setup framebuffer */
     xen_init_display(xen_domid);
+
+    qemu_add_vm_change_state_handler(xen_change_state_handler, NULL);
 }
 
 static QEMUMachine xenpv_machine = {
diff --git a/include/hw/xen/xen.h b/include/hw/xen/xen.h
index b0ed04c..d118b56 100644
--- a/include/hw/xen/xen.h
+++ b/include/hw/xen/xen.h
@@ -37,6 +37,8 @@ void xen_cmos_set_s3_resume(void *opaque, int irq, int level);
 qemu_irq *xen_interrupt_controller_init(void);
 
 void xenstore_store_pv_console_info(int i, struct CharDriverState *chr);
+extern struct xs_handle *xs;
+void xenstore_record_dm_state(struct xs_handle *xs, const char *state);
 
 #if defined(NEED_CPU_H) && !defined(CONFIG_USER_ONLY)
 int xen_hvm_init(ram_addr_t *below_4g_mem_size, ram_addr_t *above_4g_mem_size,
diff --git a/xen-common-stub.c b/xen-common-stub.c
index 906f991..6fcfc96 100644
--- a/xen-common-stub.c
+++ b/xen-common-stub.c
@@ -11,3 +11,7 @@
 void xenstore_store_pv_console_info(int i, CharDriverState *chr)
 {
 }
+
+void xenstore_record_dm_state(struct xs_handle *xs, const char *state)
+{
+}
diff --git a/xen-common.c b/xen-common.c
index 56359ca..97fc312 100644
--- a/xen-common.c
+++ b/xen-common.c
@@ -83,8 +83,7 @@ void xenstore_store_pv_console_info(int i, CharDriverState *chr)
     }
 }
 
-
-static void xenstore_record_dm_state(struct xs_handle *xs, const char *state)
+void xenstore_record_dm_state(struct xs_handle *xs, const char *state)
 {
     char path[50];
 
@@ -100,16 +99,6 @@ static void xenstore_record_dm_state(struct xs_handle *xs, const char *state)
     }
 }
 
-
-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 +106,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..1ea567d 100644
--- a/xen-hvm.c
+++ b/xen-hvm.c
@@ -1108,6 +1108,7 @@ static void xen_hvm_change_state_handler(void *opaque, int running,
 
     if (running) {
         xen_main_loop_prepare(state);
+        xenstore_record_dm_state(state->xenstore, "running");
     }
 
     xen_set_ioreq_server_state(xen_xc, xen_domid,
-- 
1.7.10.4

  reply	other threads:[~2015-06-01 15:47 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-06-01 15:46 [Qemu-devel] [PATCH 0/2] restrict the privilege of the xenstore connection Stefano Stabellini
2015-06-01 15:46 ` Stefano Stabellini [this message]
2015-06-01 15:46 ` [Qemu-devel] [PATCH 2/2] xen: introduce xsrestrict Stefano Stabellini

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=1433173614-19716-1-git-send-email-stefano.stabellini@eu.citrix.com \
    --to=stefano.stabellini@eu.citrix.com \
    --cc=Ian.Campbell@citrix.com \
    --cc=Ian.Jackson@eu.citrix.com \
    --cc=qemu-devel@nongnu.org \
    --cc=xen-devel@lists.xensource.com \
    /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;
as well as URLs for NNTP newsgroup(s).