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

Re: [Xen-devel] [PATCH] tools: libxl: translate xvd[a-d] to hd[a-d] for

On Fri, 2011-04-01 at 13:01 +0100, Ian Campbell wrote:
> On Thu, 2011-03-31 at 19:38 +0100, Ian Jackson wrote:
> > Ian Campbell writes ("[Xen-devel] [PATCH] tools: libxl: translate xvd[a-d] 
> > to hd[a-d] for new qemu"):
> > > tools: libxl: translate xvd[a-d] to hd[a-d] for new qemu
> > > 
> > > xvde+ are ignored.
> > 
> > I don't think this is strictly speaking correct.  According to the
> > spec doc/misc/vbd-interface.txt, we are supposed to support vdevs in a
> > variety of formats.
> > 
> > What this code ought to be doing is using the parsing function and
> > then reconstituting the vdev name for qemu's benefit.
> 
> makes sense, I'd forgotten about the parsing function.
> 
> I guess for everything other than the sdX syntax I should translate the
> result of libxl__device_disk_dev_number into an -hd[a-d] for values < 4
> and ignore anything greater, but for sdX syntax I want to pass it
> through as is? And is the limit 4 or 16 in that case? (I'm not 100% sure
> of the old qemu's behaviour...)

qemu-xen translates up to MAX_SCSI_DEVS into sdX devices, MAX_SCSI_DEVS
is 7 in qemu-xen and 256 in upstream qemu, so I think for xl I'll just
translate sd devices with no limits -- adding more sd devices than the
particular qemu can cope with seems like user error to me.

8<------------------------------------------

# HG changeset patch
# User Ian Campbell <ian.campbell@xxxxxxxxxx>
# Date 1301663315 -3600
# Node ID cd7f020e44b051542b82d54b8a4ef526cf403608
# Parent  356becdb49de5ac69f174ec8d0804882fef1ef3c
tools: libxl: translate disk device names to hd[a-d] for new qemu

We convert the first four non-SCSI disks to hd[a-d] and ignore any
additional non-SCSI disks.

SCSI disks are passed through as is. qemu-xen was limited to 7 SCSI
devices but upstream supports 256.

qemu-xen did all this itself internally.

Fixes "qemu: -xvda: invalid option" and allows PVHVM to work with
upstream qemu.

Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>

diff -r 356becdb49de -r cd7f020e44b0 tools/libxl/libxl_dm.c
--- a/tools/libxl/libxl_dm.c    Fri Apr 01 14:05:22 2011 +0100
+++ b/tools/libxl/libxl_dm.c    Fri Apr 01 14:08:35 2011 +0100
@@ -318,8 +318,27 @@ static char ** libxl__build_device_model
                 flexarray_append(dm_args, "-cdrom");
                 flexarray_append(dm_args, libxl__strdup(gc, 
disks[i].pdev_path));
             } else {
-                flexarray_append(dm_args, libxl__sprintf(gc, "-%s", 
disks[i].vdev));
-                flexarray_append(dm_args, libxl__strdup(gc, 
disks[i].pdev_path));
+                int dev_number = libxl__device_disk_dev_number(disks[i].vdev);
+                char *vdev;
+
+                /* Explicit sd disks are passed through as is.
+                 *
+                 * For other disks we translate devices 0..3 into
+                 * hd[a-d] and ignore the rest.
+                 */
+                if (dev_number == -1)
+                    vdev = NULL;
+                else if (strncmp(disks[i].vdev, "sd", 2) == 0)
+                    vdev = libxl__sprintf(gc, "-%s", vdev);
+                else if (dev_number < 4)
+                    vdev = libxl__sprintf(gc, "-hd%c", 'a' + dev_number);
+                else
+                    vdev = NULL;
+
+                if (vdev) {
+                    flexarray_append(dm_args, libxl__sprintf(gc, "-%s", vdev));
+                    flexarray_append(dm_args, libxl__strdup(gc, 
disks[i].pdev_path));
+                }
             }
             libxl_device_disk_destroy(&disks[i]);
         }



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