[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel]PATCH] ioemu-remote: Reintegrate media insert functionality
ioemu-remote: Reintegrate media insert functionality With patch applied I am able to switch ISO images by writing new image name to /local/domain/0/backend/vbd/<domid>/<diskid>/params Please apply to tip of git repository qemu-xen-unstable Signed-off-by: Pat Campbell <plc@xxxxxxxxxx> diff --git a/xenstore.c b/xenstore.c index 059e519..6c9d4b5 100644 --- a/xenstore.c +++ b/xenstore.c @@ -27,19 +27,11 @@ #include "hw.h" #include "pci.h" - -/* re FIXME_MEDIA_EJECT - * These code fragments manipulated interfaces in the old qemu, which - * are not present in this tree. They will need to be reintegrated. - * The code inside the #ifdef...#endif blocks has not been adjusted - # at all to align it with new upstream. - */ +#include "qemu-timer.h" struct xs_handle *xsh = NULL; -#ifdef FIXME_MEDIA_EJECT /* not yet supported in this merge */ -static char *media_filename[MAX_DISKS + MAX_SCSI_DISKS]; +static char *media_filename[MAX_DRIVES+1]; static QEMUTimer *insert_timer = NULL; -#endif #define UWAIT_MAX (30*1000000) /* thirty seconds */ #define UWAIT (100000) /* 1/10th second */ @@ -60,14 +52,16 @@ static int pasprintf(char **buf, const char *fmt, ...) return ret; } -#ifdef FIXME_MEDIA_EJECT /* not yet supported in this merge */ static void insert_media(void *opaque) { int i; + BlockDriverState *bs; - for (i = 0; i < MAX_DISKS + MAX_SCSI_DISKS; i++) { - if (media_filename[i] && bs_table[i]) { - do_change(bs_table[i]->device_name, media_filename[i]); + for (i = 0; i < MAX_DRIVES + 1; i++) { + bs = drives_table[i].bdrv; + if (media_filename[i] && bs && bs->filename[0] == '\0') { + bdrv_open2(bs, media_filename[i], 0, &bdrv_raw); + pstrcpy(bs->filename, sizeof(bs->filename), media_filename[i]); free(media_filename[i]); media_filename[i] = NULL; } @@ -81,7 +75,6 @@ void xenstore_check_new_media_present(int timeout) insert_timer = qemu_new_timer(rt_clock, insert_media, NULL); qemu_mod_timer(insert_timer, qemu_get_clock(rt_clock) + timeout); } -#endif static void waitForDevice(char *fn) { @@ -112,10 +105,8 @@ void xenstore_parse_domain_config(int hvm_domid) BlockDriverState *bs; BlockDriver *format; -#ifdef FIXME_MEDIA_EJECT /* not yet supported in this merge */ - for(i = 0; i < MAX_DISKS + MAX_SCSI_DISKS; i++) + for(i = 0; i < MAX_DRIVES + 1; i++) media_filename[i] = NULL; -#endif xsh = xs_daemon_open(); if (xsh == NULL) { @@ -298,6 +289,7 @@ void xenstore_parse_domain_config(int hvm_domid) } } } + pstrcpy(bs->filename, sizeof(bs->filename), params); if (bdrv_open2(bs, params, 0 /* snapshot */, format) < 0) fprintf(stderr, "qemu: could not open vbd '%s' or hard disk image '%s' (drv '%s' format '%s')\n", buf, params, drv ? drv : "?", format ? format->format_name : "0"); } @@ -632,7 +624,7 @@ void xenstore_process_event(void *opaque) if (strncmp(vec[XS_WATCH_TOKEN], "hd", 2) || strlen(vec[XS_WATCH_TOKEN]) != 3) goto out; - hd_index = vec[XS_WATCH_TOKEN][2] - 'a'; + hd_index = vec[XS_WATCH_TOKEN][2] - 'a' - 1; image = xs_read(xsh, XBT_NULL, vec[XS_WATCH_PATH], &len); if (image == NULL) goto out; /* gone */ @@ -649,12 +641,11 @@ void xenstore_process_event(void *opaque) if (drv && !strcmp(drv, "tap") && ((offset = strchr(image, ':')) != NULL)) memmove(image, offset+1, strlen(offset+1)+1); -#ifdef FIXME_MEDIA_EJECT /* not yet supported in this merge */ - if (!strcmp(image, bs_table[hd_index]->filename)) + if (!strcmp(image, drives_table[hd_index].bdrv->filename)) goto out; /* identical */ - do_eject(0, vec[XS_WATCH_TOKEN]); - bs_table[hd_index]->filename[0] = 0; + drives_table[hd_index].bdrv->filename[0] = '\0'; + bdrv_close(drives_table[hd_index].bdrv); if (media_filename[hd_index]) { free(media_filename[hd_index]); media_filename[hd_index] = NULL; @@ -664,7 +655,6 @@ void xenstore_process_event(void *opaque) media_filename[hd_index] = strdup(image); xenstore_check_new_media_present(5000); } -#endif out: free(drv); _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |