WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

[Xen-devel] [PATCH 5 of 9] libxl: wait for devices to initialize upon ad

To: xen-devel@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-devel] [PATCH 5 of 9] libxl: wait for devices to initialize upon addition to the domain
From: Roger Pau Monne <roger.pau@xxxxxxxxxxxxx>
Date: Fri, 14 Oct 2011 15:35:37 +0200
Delivery-date: Fri, 14 Oct 2011 06:42:40 -0700
Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=sender:content-type:mime-version:content-transfer-encoding:subject :x-mercurial-node:message-id:in-reply-to:references:user-agent:date :from:to; bh=vvqRTeKvl/jjA6gBtgr9tWYgKuUU8EBsfZ4MI62HhHo=; b=nUmhTX9Hk0e3WmobM7UYQgYN4zv6N/sUTZOIwWtYptWi+DrHKU8tZZdRr6mPYELr6C DNcd4hMZOrzR/+/3sIiKWEZdnEFug5eBrRddLetkAYywfxrG+HX1FVfWwMRUSlzTPBmF bGNGW8pV/m0cD4PUph79IaPY5HmSEjru/SYa4=
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <patchbomb.1318599332@loki>
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
References: <patchbomb.1318599332@loki>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Mercurial-patchbomb/1.9.2
# HG changeset patch
# User Roger Pau Monne <roger.pau@xxxxxxxxxxxxx>
# Date 1318592310 -7200
# Node ID d14479efe33c3955dcf41783a1b02c8d2bb572e6
# Parent  0235e192a519e29ac3d77e91fe59b38e6a6f06ef
libxl: wait for devices to initialize upon addition to the domain.

Block waiting for devices to initialize (switch to state 2).

Signed-off-by: Roger Pau Monne <roger.pau@xxxxxxxxxxxxx>

diff -r 0235e192a519 -r d14479efe33c tools/libxl/libxl.c
--- a/tools/libxl/libxl.c       Fri Oct 14 13:38:30 2011 +0200
+++ b/tools/libxl/libxl.c       Fri Oct 14 13:38:30 2011 +0200
@@ -1070,6 +1070,11 @@ int libxl_device_disk_add(libxl_ctx *ctx
                              libxl__xs_kvs_of_flexarray(&gc, back, 
back->count),
                              libxl__xs_kvs_of_flexarray(&gc, front, 
front->count));
 
+    if (libxl__wait_for_device_initialization(&gc, &device) < 0) {
+        rc = -1;
+        goto out_free;
+    }
+
     rc = 0;
 
 out_free:
@@ -1513,7 +1518,11 @@ int libxl_device_nic_add(libxl_ctx *ctx,
                              libxl__xs_kvs_of_flexarray(&gc, back, 
back->count),
                              libxl__xs_kvs_of_flexarray(&gc, front, 
front->count));
 
-    /* FIXME: wait for plug */
+    if (libxl__wait_for_device_initialization(&gc, &device) < 0) {
+        rc = -1;
+        goto out_free;
+    }
+
     rc = 0;
 out_free:
     flexarray_free(back);
diff -r 0235e192a519 -r d14479efe33c tools/libxl/libxl_device.c
--- a/tools/libxl/libxl_device.c        Fri Oct 14 13:38:30 2011 +0200
+++ b/tools/libxl/libxl_device.c        Fri Oct 14 13:38:30 2011 +0200
@@ -366,6 +366,38 @@ int libxl__device_disk_dev_number(const 
     return -1;
 }
 
+int libxl__wait_for_device_initialization(libxl__gc *gc, libxl__device *device)
+{
+    libxl_ctx *ctx = libxl__gc_owner(gc);
+    char *be_path = libxl__device_backend_path(gc, device);
+    char *state_path = libxl__sprintf(gc, "%s/state", be_path);
+    char *state = libxl__xs_read(gc, XBT_NULL, state_path);
+    int rc = -1;
+    char **l1 = NULL;
+    unsigned int n;
+    
+    if (atoi(state) == 2) {
+        rc = 0;
+        goto out;
+    }
+
+    xs_watch(ctx->xsh, state_path, be_path);
+    while (atoi(state) != 2) {
+        l1 = xs_read_watch(ctx->xsh, &n);
+        if (l1 == NULL) {
+            goto out;
+        }
+        state = libxl__xs_read(gc, XBT_NULL, l1[XS_WATCH_PATH]);
+        if (state == NULL) {
+            goto out;
+        }
+    }
+    rc = 0;
+
+out:
+    return rc;
+}
+
 static int wait_for_dev_destroy(libxl__gc *gc, struct timeval *tv)
 {
     libxl_ctx *ctx = libxl__gc_owner(gc);
diff -r 0235e192a519 -r d14479efe33c tools/libxl/libxl_internal.h
--- a/tools/libxl/libxl_internal.h      Fri Oct 14 13:38:30 2011 +0200
+++ b/tools/libxl/libxl_internal.h      Fri Oct 14 13:38:30 2011 +0200
@@ -231,7 +231,7 @@ _hidden int libxl__device_disk_set_backe
 _hidden int libxl__device_physdisk_major_minor(const char *physpath, int 
*major, int *minor);
 _hidden int libxl__device_disk_dev_number(const char *virtpath,
                                           int *pdisk, int *ppartition);
-
+_hidden int libxl__wait_for_device_initialization(libxl__gc *gc, libxl__device 
*device);
 _hidden int libxl__device_console_add(libxl__gc *gc, uint32_t domid,
                                       libxl_device_console *console,
                                       libxl__domain_build_state *state);

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel