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
|