From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=59594 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PiEXh-00053M-D7 for qemu-devel@nongnu.org; Wed, 26 Jan 2011 18:14:43 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PiEXU-0003Gt-QX for qemu-devel@nongnu.org; Wed, 26 Jan 2011 18:12:37 -0500 Received: from mail-iy0-f173.google.com ([209.85.210.173]:57155) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PiEXU-0003Go-KZ for qemu-devel@nongnu.org; Wed, 26 Jan 2011 18:12:36 -0500 Received: by iye19 with SMTP id 19so929743iye.4 for ; Wed, 26 Jan 2011 15:12:36 -0800 (PST) Message-ID: <4D40AA5D.7050308@codemonkey.ws> Date: Wed, 26 Jan 2011 17:12:29 -0600 From: Anthony Liguori MIME-Version: 1.0 Subject: Re: [Qemu-devel] [PATCH V9 15/16] xen: Set running state in xenstore. References: <1295965760-31508-1-git-send-email-anthony.perard@citrix.com> <1295965760-31508-16-git-send-email-anthony.perard@citrix.com> In-Reply-To: <1295965760-31508-16-git-send-email-anthony.perard@citrix.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: anthony.perard@citrix.com Cc: Xen Devel , QEMU-devel , Stefano Stabellini On 01/25/2011 08:29 AM, anthony.perard@citrix.com wrote: > From: Anthony PERARD > > This tells to the xen management tool that the machine can begin run. > > Signed-off-by: Anthony PERARD > --- > xen-all.c | 27 +++++++++++++++++++++++++++ > 1 files changed, 27 insertions(+), 0 deletions(-) > > diff --git a/xen-all.c b/xen-all.c > index a0248ee..c2d37d6 100644 > --- a/xen-all.c > +++ b/xen-all.c > @@ -58,6 +58,8 @@ typedef struct XenIOState { > /* which vcpu we are serving */ > int send_vcpu; > > + struct xs_handle *xenstore; > + > Notifier exit; > } XenIOState; > > @@ -426,6 +428,21 @@ static void cpu_handle_ioreq(void *opaque) > } > } > > +static void xenstore_record_dm_state(XenIOState *s, const char *state) > +{ > + char *path = NULL; > + > + if (asprintf(&path, "/local/domain/0/device-model/%u/state", xen_domid) == -1) { > + fprintf(stderr, "out of memory recording dm state\n"); > + exit(1); > + } > asprintf() is very unportable. > + if (!xs_write(s->xenstore, XBT_NULL, path, state, strlen(state))) { > + fprintf(stderr, "error recording dm state\n"); > + exit(1); > + } > + free(path); > +} > + > static void xen_main_loop_prepare(XenIOState *state) > { > int evtchn_fd = -1; > @@ -441,6 +458,9 @@ static void xen_main_loop_prepare(XenIOState *state) > if (evtchn_fd != -1) { > qemu_set_fd_handler(evtchn_fd, cpu_handle_ioreq, NULL, state); > } > + > + /* record state running */ > + xenstore_record_dm_state(state, "running"); > } > > > @@ -459,6 +479,7 @@ static void xen_exit_notifier(Notifier *n) > XenIOState *state = container_of(n, XenIOState, exit); > > xc_evtchn_close(state->xce_handle); > + xs_daemon_close(state->xenstore); > } > > int xen_init(int smp_cpus) > @@ -484,6 +505,12 @@ int xen_init(int smp_cpus) > return -errno; > } > > + state->xenstore = xs_daemon_open(); > + if (state->xenstore == NULL) { > + perror("xen: xenstore open"); > + return -errno; > + } > + > state->exit.notify = xen_exit_notifier; > qemu_add_exit_notifier(&state->exit); > >