All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] libxl: added libxl compatibility with physical backend file for NetBSD
@ 2011-07-22 12:38 Roger Pau Monné
  2011-07-22 13:25 ` Christoph Egger
  2011-07-22 13:39 ` Ian Campbell
  0 siblings, 2 replies; 11+ messages in thread
From: Roger Pau Monné @ 2011-07-22 12:38 UTC (permalink / raw)
  To: xen-devel

[-- Attachment #1: Type: text/plain, Size: 269 bytes --]

Hello,

This patch fixes the problems described in a previous thread regarding
PV machines not booting on NetBSD with libxl toolstack. The patch also
prevents libxl from adding PCI entries to xenstore if there is no PCI
device configured in the guest.

Regards, Roger.

[-- Attachment #2: patch-libxl-netbsd --]
[-- Type: application/octet-stream, Size: 6691 bytes --]

# HG changeset patch
# User royger
# Date 1311345485 -7200
# Node ID cc91b131c788992d6ab9aa3803d60ccb4d46ca74
# Parent  e298ce67777eb45187d6581a0c51c2dbe7161000
libxl: added libxl compatibility with physical backend file for NetBSD

This patch allows running PV machines on NetBSD using the libxenlight toolstack.
Added option for PHY backend to handle regular files and disable auto-remove of vbd xenstore entries.
Updated xenbackend to detect if vbd is a regular file or a block partition and pass the correct parameter to 'block' script.
This patch also updates libxl to only add PCI entries to xenstore if there is at least one PCI device.

Signed-off-by: Roger Pau Monne <roger.pau@entel.upc.edu>

diff -r e298ce67777e -r cc91b131c788 tools/hotplug/NetBSD/block
--- a/tools/hotplug/NetBSD/block	Mon Jul 18 14:38:31 2011 +0100
+++ b/tools/hotplug/NetBSD/block	Fri Jul 22 16:38:05 2011 +0200
@@ -19,7 +19,8 @@
 
 xpath=$1
 xstatus=$2
-xtype=$(xenstore-read "$xpath/type")
+xtype=$3
+#xtype=$(xenstore-read "$xpath/type")
 xparams=$(xenstore-read "$xpath/params")
 
 case $xstatus in
diff -r e298ce67777e -r cc91b131c788 tools/libxl/libxl_create.c
--- a/tools/libxl/libxl_create.c	Mon Jul 18 14:38:31 2011 +0100
+++ b/tools/libxl/libxl_create.c	Fri Jul 22 16:38:05 2011 +0200
@@ -531,12 +531,14 @@
     for (i = 0; i < d_config->num_pcidevs; i++)
         libxl__device_pci_add(gc, domid, &d_config->pcidevs[i], 1);
 
-    ret = libxl__create_pci_backend(gc, domid, d_config->pcidevs,
+    if (d_config->num_pcidevs > 0) {
+        ret = libxl__create_pci_backend(gc, domid, d_config->pcidevs,
                                     d_config->num_pcidevs);
-    if (ret < 0) {
-        LIBXL__LOG(ctx, LIBXL__LOG_ERROR,
-                   "libxl_create_pci_backend failed: %d", ret);
-        goto error_out;
+        if (ret < 0) {
+            LIBXL__LOG(ctx, LIBXL__LOG_ERROR,
+                "libxl_create_pci_backend failed: %d", ret);
+            goto error_out;
+        }
     }
 
     if (!d_config->c_info.hvm && d_config->b_info.u.pv.e820_host) {
diff -r e298ce67777e -r cc91b131c788 tools/libxl/libxl_device.c
--- a/tools/libxl/libxl_device.c	Mon Jul 18 14:38:31 2011 +0100
+++ b/tools/libxl/libxl_device.c	Fri Jul 22 16:38:05 2011 +0200
@@ -136,15 +136,22 @@
               a->disk->format == LIBXL_DISK_FORMAT_EMPTY)) {
             goto bad_format;
         }
-        if (a->disk->format != LIBXL_DISK_FORMAT_EMPTY &&
-            !S_ISBLK(a->stab.st_mode)) {
-            LIBXL__LOG(ctx, LIBXL__LOG_DEBUG, "Disk vdev=%s, backend phy"
-                       " unsuitable as phys path not a block device",
-                       a->disk->vdev);
-            return 0;
+        if (a->disk->format == LIBXL_DISK_FORMAT_EMPTY ||
+            S_ISBLK(a->stab.st_mode)) {
+                return backend;
         }
-
-        return backend;
+        #ifdef HAVE_PHY_BACKEND_FILE_SUPPORT
+        if (S_ISREG(a->stab.st_mode))
+            return backend;
+        LIBXL__LOG(ctx, LIBXL__LOG_DEBUG, "Disk vdev=%s, backend phy"
+                   " unsuitable as phys path not a block device or"
+                   " raw image", a->disk->vdev);
+        #else
+        LIBXL__LOG(ctx, LIBXL__LOG_DEBUG, "Disk vdev=%s, backend phy"
+                   " unsuitable as phys path not a block device",
+                   a->disk->vdev);
+        #endif
+        return 0;
 
     case LIBXL_DISK_BACKEND_TAP:
         if (!libxl__blktap_enabled(a->gc)) {
@@ -455,6 +462,10 @@
             fe_path = libxl__sprintf(gc, "/local/domain/%d/device/%s/%s", domid, l1[i], l2[j]);
             be_path = libxl__xs_read(gc, XBT_NULL, libxl__sprintf(gc, "%s/backend", fe_path));
             if (be_path != NULL) {
+                #ifdef DONT_REMOVE_VBD_FROM_STORE
+                if (!strcmp(l1[i], "vbd"))
+                    continue;
+                #endif
                 if (libxl__device_destroy(gc, be_path, force) > 0)
                     n_watches++;
             } else {
diff -r e298ce67777e -r cc91b131c788 tools/libxl/libxl_osdeps.h
--- a/tools/libxl/libxl_osdeps.h	Mon Jul 18 14:38:31 2011 +0100
+++ b/tools/libxl/libxl_osdeps.h	Fri Jul 22 16:38:05 2011 +0200
@@ -25,6 +25,8 @@
 
 #if defined(__NetBSD__) || defined(__OpenBSD__)
 #include <util.h>
+#define HAVE_PHY_BACKEND_FILE_SUPPORT
+#define DONT_REMOVE_VBD_FROM_STORE
 #elif defined(__linux__)
 #include <pty.h>
 #elif defined(__sun__)
diff -r e298ce67777e -r cc91b131c788 tools/xenbackendd/xenbackendd.c
--- a/tools/xenbackendd/xenbackendd.c	Mon Jul 18 14:38:31 2011 +0100
+++ b/tools/xenbackendd/xenbackendd.c	Fri Jul 22 16:38:05 2011 +0200
@@ -89,15 +89,15 @@
 }
 
 static void
-doexec(const char *cmd, const char *arg1, const char *arg2)
+doexec(const char *cmd, const char *arg1, const char *arg2, const char *arg3)
 {
-	dodebug("exec %s %s %s", cmd, arg1, arg2);
+	dodebug("exec %s %s %s %s", cmd, arg1, arg2, arg3);
 	switch(vfork()) {
 	case -1:
 		dolog(LOG_ERR, "can't vfork: %s", strerror(errno));
 		break;
 	case 0:
-		execl(cmd, cmd, arg1, arg2, NULL);
+		execl(cmd, cmd, arg1, arg2, arg3, NULL);
 		dolog(LOG_ERR, "can't exec %s: %s", cmd, strerror(errno));
 		exit(EXIT_FAILURE);
 		/* NOTREACHED */
@@ -145,11 +145,14 @@
 int
 main(int argc, char * const argv[])
 {
+	struct stat stab;
 	char **vec;
 	unsigned int num;
 	char *s;
 	int state;
 	char *sstate;
+	char *stype;
+	char *params;
 	char *p;
 	char buf[80];
 	int type;
@@ -169,7 +172,7 @@
 			log_file = optarg;
 			break;
 		case 'p':
-			pidfile = pidfile;
+			pidfile = optarg;
 		case 's':
 			vbd_script = optarg;
 			break;
@@ -297,11 +300,38 @@
 				    strerror(errno));
 				goto next2;
 			}
-			doexec(s, vec[XS_WATCH_PATH], sstate);
+			doexec(s, vec[XS_WATCH_PATH], sstate, NULL);
 			break;
 
 		case DEVTYPE_VBD:
-			doexec(vbd_script, vec[XS_WATCH_PATH], sstate);
+			// Check if given file is a block device or a raw image
+			snprintf(buf, sizeof(buf), "%s/params", vec[XS_WATCH_PATH]);
+			params = xs_read(xs, XBT_NULL, buf, 0);
+			if(params == NULL) {
+				dolog(LOG_ERR,
+				    "Failed to read %s (%s)", buf, strerror(errno));
+				goto next2;
+			}
+			if (stat(params, &stab) < 0) {
+				dolog(LOG_ERR,
+				    "Failed to get info about %s (%s)", params,
+				    strerror(errno));
+				goto next3;
+			}
+			stype = NULL;
+			if (S_ISBLK(stab.st_mode))
+				stype = "phy";
+			if (S_ISREG(stab.st_mode))
+				stype = "file";
+			if (stype == NULL) {
+				dolog(LOG_ERR,
+				    "Failed to attach %s (not a block device or raw image)",
+				    params, strerror(errno));
+				goto next3;
+			}
+			doexec(vbd_script, vec[XS_WATCH_PATH], sstate, stype);
+next3:
+			free(params);
 			break;
 
 		default:

[-- Attachment #3: Type: text/plain, Size: 138 bytes --]

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

^ permalink raw reply	[flat|nested] 11+ messages in thread
* [PATCH] libxl: added libxl compatibility with physical backend file for NetBSD
@ 2011-07-22 17:36 Roger Pau Monne
  2011-07-22 16:01 ` Ian Campbell
  0 siblings, 1 reply; 11+ messages in thread
From: Roger Pau Monne @ 2011-07-22 17:36 UTC (permalink / raw)
  To: xen-devel

# HG changeset patch
# User royger
# Date 1311355770 -7200
# Node ID c3d4cad0fc2d34c8346c8a1c4d493a429939249d
# Parent  bb2568713604f2eef45326c271132b06a0bff1cc
libxl: added libxl compatibility with physical backend file for NetBSD

This patch allows running PV machines on NetBSD using the libxenlight toolstack.
Added option for PHY backend to handle regular files and disable auto-remove of vbd xenstore entries.
Updated xenbackend to detect if vbd is a regular file or a block partition and pass the correct parameter to 'block' script.

Signed-off-by: Roger Pau Monne <roger.pau@entel.upc.edu>

diff -r bb2568713604 -r c3d4cad0fc2d tools/hotplug/NetBSD/block
--- a/tools/hotplug/NetBSD/block	Fri Jul 22 19:24:34 2011 +0200
+++ b/tools/hotplug/NetBSD/block	Fri Jul 22 19:29:30 2011 +0200
@@ -19,7 +19,7 @@ error() {
 
 xpath=$1
 xstatus=$2
-xtype=$(xenstore-read "$xpath/type")
+xtype=$3
 xparams=$(xenstore-read "$xpath/params")
 
 case $xstatus in
diff -r bb2568713604 -r c3d4cad0fc2d tools/libxl/libxl_device.c
--- a/tools/libxl/libxl_device.c	Fri Jul 22 19:24:34 2011 +0200
+++ b/tools/libxl/libxl_device.c	Fri Jul 22 19:29:30 2011 +0200
@@ -136,15 +136,20 @@ static int disk_try_backend(disk_try_bac
               a->disk->format == LIBXL_DISK_FORMAT_EMPTY)) {
             goto bad_format;
         }
-        if (a->disk->format != LIBXL_DISK_FORMAT_EMPTY &&
-            !S_ISBLK(a->stab.st_mode)) {
-            LIBXL__LOG(ctx, LIBXL__LOG_DEBUG, "Disk vdev=%s, backend phy"
-                       " unsuitable as phys path not a block device",
-                       a->disk->vdev);
-            return 0;
-        }
-
-        return backend;
+        if (S_ISBLK(a->stab.st_mode))
+                return backend;
+#ifdef HAVE_PHY_BACKEND_FILE_SUPPORT
+        if (S_ISREG(a->stab.st_mode))
+            return backend;
+        LIBXL__LOG(ctx, LIBXL__LOG_DEBUG, "Disk vdev=%s, backend phy"
+                   " unsuitable as phys path not a block device or"
+                   " raw image", a->disk->vdev);
+#else
+        LIBXL__LOG(ctx, LIBXL__LOG_DEBUG, "Disk vdev=%s, backend phy"
+                   " unsuitable as phys path not a block device",
+                   a->disk->vdev);
+#endif
+        return 0;
 
     case LIBXL_DISK_BACKEND_TAP:
         if (!libxl__blktap_enabled(a->gc)) {
@@ -455,6 +460,10 @@ int libxl__devices_destroy(libxl__gc *gc
             fe_path = libxl__sprintf(gc, "/local/domain/%d/device/%s/%s", domid, l1[i], l2[j]);
             be_path = libxl__xs_read(gc, XBT_NULL, libxl__sprintf(gc, "%s/backend", fe_path));
             if (be_path != NULL) {
+#ifdef DONT_REMOVE_VBD_FROM_STORE
+                if (!strcmp(l1[i], "vbd"))
+                    continue;
+#endif
                 if (libxl__device_destroy(gc, be_path, force) > 0)
                     n_watches++;
             } else {
diff -r bb2568713604 -r c3d4cad0fc2d tools/libxl/libxl_osdeps.h
--- a/tools/libxl/libxl_osdeps.h	Fri Jul 22 19:24:34 2011 +0200
+++ b/tools/libxl/libxl_osdeps.h	Fri Jul 22 19:29:30 2011 +0200
@@ -25,6 +25,8 @@
 
 #if defined(__NetBSD__) || defined(__OpenBSD__)
 #include <util.h>
+#define HAVE_PHY_BACKEND_FILE_SUPPORT
+#define DONT_REMOVE_VBD_FROM_STORE
 #elif defined(__linux__)
 #include <pty.h>
 #elif defined(__sun__)
diff -r bb2568713604 -r c3d4cad0fc2d tools/xenbackendd/xenbackendd.c
--- a/tools/xenbackendd/xenbackendd.c	Fri Jul 22 19:24:34 2011 +0200
+++ b/tools/xenbackendd/xenbackendd.c	Fri Jul 22 19:29:30 2011 +0200
@@ -89,15 +89,15 @@ dodebug(const char *fmt, ...)
 }
 
 static void
-doexec(const char *cmd, const char *arg1, const char *arg2)
+doexec(const char *cmd, const char *arg1, const char *arg2, const char *arg3)
 {
-	dodebug("exec %s %s %s", cmd, arg1, arg2);
+	dodebug("exec %s %s %s %s", cmd, arg1, arg2, arg3);
 	switch(vfork()) {
 	case -1:
 		dolog(LOG_ERR, "can't vfork: %s", strerror(errno));
 		break;
 	case 0:
-		execl(cmd, cmd, arg1, arg2, NULL);
+		execl(cmd, cmd, arg1, arg2, arg3, NULL);
 		dolog(LOG_ERR, "can't exec %s: %s", cmd, strerror(errno));
 		exit(EXIT_FAILURE);
 		/* NOTREACHED */
@@ -145,11 +145,14 @@ xen_setup(void)
 int
 main(int argc, char * const argv[])
 {
+	struct stat stab;
 	char **vec;
 	unsigned int num;
 	char *s;
 	int state;
 	char *sstate;
+	char *stype;
+	char *params;
 	char *p;
 	char buf[80];
 	int type;
@@ -169,7 +172,7 @@ main(int argc, char * const argv[])
 			log_file = optarg;
 			break;
 		case 'p':
-			pidfile = pidfile;
+			pidfile = optarg;
 		case 's':
 			vbd_script = optarg;
 			break;
@@ -297,11 +300,38 @@ main(int argc, char * const argv[])
 				    strerror(errno));
 				goto next2;
 			}
-			doexec(s, vec[XS_WATCH_PATH], sstate);
+			doexec(s, vec[XS_WATCH_PATH], sstate, NULL);
 			break;
 
 		case DEVTYPE_VBD:
-			doexec(vbd_script, vec[XS_WATCH_PATH], sstate);
+			/* check if given file is a block device or a raw image */
+			snprintf(buf, sizeof(buf), "%s/params", vec[XS_WATCH_PATH]);
+			params = xs_read(xs, XBT_NULL, buf, 0);
+			if(params == NULL) {
+				dolog(LOG_ERR,
+				    "Failed to read %s (%s)", buf, strerror(errno));
+				goto next2;
+			}
+			if (stat(params, &stab) < 0) {
+				dolog(LOG_ERR,
+				    "Failed to get info about %s (%s)", params,
+				    strerror(errno));
+				goto next3;
+			}
+			stype = NULL;
+			if (S_ISBLK(stab.st_mode))
+				stype = "phy";
+			if (S_ISREG(stab.st_mode))
+				stype = "file";
+			if (stype == NULL) {
+				dolog(LOG_ERR,
+				    "Failed to attach %s (not a block device or raw image)",
+				    params, strerror(errno));
+				goto next3;
+			}
+			doexec(vbd_script, vec[XS_WATCH_PATH], sstate, stype);
+next3:
+			free(params);
 			break;
 
 		default:

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2011-07-29 11:02 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-07-22 12:38 [PATCH] libxl: added libxl compatibility with physical backend file for NetBSD Roger Pau Monné
2011-07-22 13:25 ` Christoph Egger
2011-07-22 13:39 ` Ian Campbell
2011-07-22 13:46   ` Christoph Egger
2011-07-22 13:54     ` Ian Campbell
2011-07-22 14:55   ` Roger Pau Monné
  -- strict thread matches above, loose matches on Subject: below --
2011-07-22 17:36 Roger Pau Monne
2011-07-22 16:01 ` Ian Campbell
2011-07-22 17:07   ` Roger Pau Monné
2011-07-22 19:07     ` Ian Campbell
2011-07-29 11:02       ` Roger Pau Monné

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.