Index: xen-4.0.2-testing/tools/ioemu-qemu-xen/qemu-xen.h =================================================================== --- xen-4.0.2-testing.orig/tools/ioemu-qemu-xen/qemu-xen.h +++ xen-4.0.2-testing/tools/ioemu-qemu-xen/qemu-xen.h @@ -1,6 +1,8 @@ #ifndef QEMU_XEN_H #define QEMU_XEN_H +#include "hw/boards.h" + /* vl.c */ extern int restore; extern int vga_ram_size; @@ -73,7 +75,7 @@ void handle_buffered_pio(void); #endif /* xenstore.c */ -void xenstore_parse_domain_config(int domid); +void xenstore_parse_domain_config(int domid, QEMUMachine *machine); int xenstore_parse_disable_pf_config(void); int xenstore_fd(void); void xenstore_process_event(void *opaque); Index: xen-4.0.2-testing/tools/ioemu-qemu-xen/vl.c =================================================================== --- xen-4.0.2-testing.orig/tools/ioemu-qemu-xen/vl.c +++ xen-4.0.2-testing/tools/ioemu-qemu-xen/vl.c @@ -5827,10 +5827,10 @@ int main(int argc, char **argv, char **e if ((msg = xenbus_read(XBT_NIL, "domid", &domid_s))) fprintf(stderr,"Can not read our own domid: %s\n", msg); else - xenstore_parse_domain_config(atoi(domid_s)); + xenstore_parse_domain_config(atoi(domid_s), machine); } #else - xenstore_parse_domain_config(domid); + xenstore_parse_domain_config(domid, machine); #endif /* CONFIG_STUBDOM */ /* we always create the cdrom drive, even if no disk is there */ Index: xen-4.0.2-testing/tools/ioemu-qemu-xen/xenstore.c =================================================================== --- xen-4.0.2-testing.orig/tools/ioemu-qemu-xen/xenstore.c +++ xen-4.0.2-testing/tools/ioemu-qemu-xen/xenstore.c @@ -397,7 +397,7 @@ static const char *xenstore_get_guest_uu #define PT_PCI_POWER_MANAGEMENT_DEFAULT 0 int direct_pci_msitranslate; int direct_pci_power_mgmt; -void xenstore_parse_domain_config(int hvm_domid) +void xenstore_parse_domain_config(int hvm_domid, QEMUMachine *machine) { char **e_danger = NULL; char *buf = NULL; @@ -712,15 +712,19 @@ void xenstore_parse_domain_config(int hv #endif - drives_table[nb_drives].bdrv = bs; - drives_table[nb_drives].used = 1; + if (machine == &xenfv_machine) { + drives_table[nb_drives].bdrv = bs; + drives_table[nb_drives].used = 1; #ifdef CONFIG_STUBDOM - media_filename[nb_drives] = strdup(danger_buf); + media_filename[nb_drives] = strdup(danger_buf); #else - media_filename[nb_drives] = strdup(bs->filename); + media_filename[nb_drives] = strdup(bs->filename); #endif - nb_drives++; - + nb_drives++; + } else { + qemu_aio_flush(); + bdrv_close(bs); + } } #ifdef CONFIG_STUBDOM