Sophie

Sophie

distrib > Scientific%20Linux > 5x > x86_64 > media > main-src > by-pkgid > aadbe78a25743146bb784eee19f007c5 > files > 288

kvm-83-164.el5_5.9.src.rpm

From d1b65b73021f7d6aa301dbf6ceb2d5dfe6e90b29 Mon Sep 17 00:00:00 2001
From: Naphtali Sprei <nsprei@redhat.com>
Date: Wed, 29 Jul 2009 20:52:03 +0300
Subject: [PATCH 2/2] fix for bug #508664, KVM: "could not read the boot disk"

error message after running "Sys Mark" benchmark on Windows Guest

In some cases reboot sequence fails to detect the ide device in the rombios
sequence for ata_detect, since ioport writes are ignored when the
ide device status indicates busy or data request in progres.
The ide if must be reset when system reset.

Signed-off-by: Naphtali Sprei <nsprei@redhat.com>
Message-ID: <4A708E6A.4000809@redhat.com>
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Bugzilla: 508664
Acked-by: Gleb Natapov <gleb@redhat.com>
Acked-by: Dor Laor <dlaor@redhat.com>
Acked-by: Avi Kivity <avi@redhat.com>
---
 qemu/hw/ide.c |   14 ++++++++------
 1 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/qemu/hw/ide.c b/qemu/hw/ide.c
index dd56f82..30a175e 100644
--- a/qemu/hw/ide.c
+++ b/qemu/hw/ide.c
@@ -3325,6 +3325,8 @@ static void piix3_reset(void *opaque)
 
     for (i = 0; i < 2; i++)
         ide_dma_cancel(&d->bmdma[i]);
+    for (i = 0; i < 4; i++)
+        ide_reset(&d->ide_if[i]);
 
     pci_conf[0x04] = 0x00;
     pci_conf[0x05] = 0x00;
@@ -3359,9 +3361,6 @@ void pci_piix3_ide_init(PCIBus *bus, BlockDriverState **hd_table, int devfn,
     pci_conf[0x0b] = 0x01; // class_base = PCI_mass_storage
     pci_conf[0x0e] = 0x00; // header_type
 
-    qemu_register_reset(piix3_reset, d);
-    piix3_reset(d);
-
     pci_register_io_region((PCIDevice *)d, 4, 0x10,
                            PCI_ADDRESS_SPACE_IO, bmdma_map);
 
@@ -3374,6 +3373,9 @@ void pci_piix3_ide_init(PCIBus *bus, BlockDriverState **hd_table, int devfn,
         if (hd_table[i])
             hd_table[i]->private = &d->dev;
 
+    qemu_register_reset(piix3_reset, d);
+    piix3_reset(d);
+
     register_savevm("ide", 0, 2, pci_ide_save, pci_ide_load, d);
 }
 
@@ -3402,9 +3404,6 @@ void pci_piix4_ide_init(PCIBus *bus, BlockDriverState **hd_table, int devfn,
     pci_conf[0x0b] = 0x01; // class_base = PCI_mass_storage
     pci_conf[0x0e] = 0x00; // header_type
 
-    qemu_register_reset(piix3_reset, d);
-    piix3_reset(d);
-
     pci_register_io_region((PCIDevice *)d, 4, 0x10,
                            PCI_ADDRESS_SPACE_IO, bmdma_map);
 
@@ -3413,6 +3412,9 @@ void pci_piix4_ide_init(PCIBus *bus, BlockDriverState **hd_table, int devfn,
     ide_init_ioport(&d->ide_if[0], 0x1f0, 0x3f6);
     ide_init_ioport(&d->ide_if[2], 0x170, 0x376);
 
+    qemu_register_reset(piix3_reset, d);
+    piix3_reset(d);
+
     register_savevm("ide", 0, 2, pci_ide_save, pci_ide_load, d);
 }
 
-- 
1.6.3.rc4.29.g8146