From mboxrd@z Thu Jan 1 00:00:00 1970 From: Samuel Thibault Subject: [PATCH] ioemu: save IDE write_cache flag [Was: IOEMU images format policy] Date: Wed, 26 Mar 2008 12:51:00 +0000 Message-ID: <20080326125100.GH5636@implementation.uk.xensource.com> References: <20080326122843.GK4437@implementation.uk.xensource.com> Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit Return-path: Content-Disposition: inline In-Reply-To: <20080326122843.GK4437@implementation.uk.xensource.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: xen-devel@lists.xensource.com List-Id: xen-devel@lists.xenproject.org Hello, Samuel Thibault, le Wed 26 Mar 2008 12:28:43 +0000, a écrit : > The short story is that we need to add the write_cache parameter in the > IOEMU IDE format. > > What is the policy for the version_id field of IOEMU images? It looks > like we don't care about the compatibility with QEMU images, but I guess > we want compatibility with IOEMU images of other Xen versions? Here is a patch that preserve compatibility with IOEMU but not QEMU. That should fix some of the performance drops in restored HVM domains. ioemu: save IDE write cache flag Signed-off-by: Samuel Thibault diff -r 01573df1051e tools/ioemu/hw/ide.c --- a/tools/ioemu/hw/ide.c Wed Mar 26 12:37:37 2008 +0000 +++ b/tools/ioemu/hw/ide.c Wed Mar 26 12:47:18 2008 +0000 @@ -2723,6 +2723,7 @@ static void pci_ide_save(QEMUFile* f, vo if (s->identify_set) { qemu_put_buffer(f, (const uint8_t *)s->identify_data, 512); } + qemu_put_8s(f, &s->write_cache); qemu_put_8s(f, &s->feature); qemu_put_8s(f, &s->error); qemu_put_be32s(f, &s->nsector); @@ -2749,7 +2750,7 @@ static int pci_ide_load(QEMUFile* f, voi PCIIDEState *d = opaque; int ret, i; - if (version_id != 1) + if (version_id != 1 && version_id != 2) return -EINVAL; ret = pci_device_load(&d->dev, f); if (ret < 0) @@ -2780,6 +2781,8 @@ static int pci_ide_load(QEMUFile* f, voi if (s->identify_set) { qemu_get_buffer(f, (uint8_t *)s->identify_data, 512); } + if (version_id >= 2) + qemu_get_8s(f, &s->write_cache); qemu_get_8s(f, &s->feature); qemu_get_8s(f, &s->error); qemu_get_be32s(f, &s->nsector); @@ -2854,7 +2857,7 @@ void pci_piix_ide_init(PCIBus *bus, Bloc buffered_pio_init(); - register_savevm("ide", 0, 1, pci_ide_save, pci_ide_load, d); + register_savevm("ide", 0, 2, pci_ide_save, pci_ide_load, d); } /* hd_table must contain 4 block drivers */ @@ -2895,7 +2898,7 @@ void pci_piix3_ide_init(PCIBus *bus, Blo buffered_pio_init(); - register_savevm("ide", 0, 1, pci_ide_save, pci_ide_load, d); + register_savevm("ide", 0, 2, pci_ide_save, pci_ide_load, d); } /***********************************************************/