36 lines
1.6 KiB
Diff
36 lines
1.6 KiB
Diff
# HG changeset patch
|
|
# User kfraser@localhost.localdomain
|
|
# Date 1184147295 -3600
|
|
# Node ID 637ff26be6ff820d185d8cdc5cc344aea6b5c9e2
|
|
# Parent ff51ff907f8cce9d10296507e6c4c666cf603876
|
|
Make QEMU consistently report write caching support for emulated IDE
|
|
drives to fix a hang during SLES 9 HVM guest installation.
|
|
|
|
Without this, the SLES 9 installer kernels (32 and 64 bit) were
|
|
getting inconsistent information from QEMU as to whether the
|
|
(emulated) IDE drives support write caching (which they do). So part
|
|
of the kernel thought write caching was enabled (and enabled the usage
|
|
of barrier writes) and part of it didn't, which triggered a bug in
|
|
which the same barrier write is submitted over and over again ...
|
|
|
|
Fixed by setting another bit in the WIN_IDENTIFY (IDE drive "identify"
|
|
command) response to indicate we really, truly support write caching.
|
|
|
|
Signed-off-by: David Lively <dlively@virtualiron.com>
|
|
Signed-off-by: Ben Guthro <bguthro@virtualiron.com>
|
|
|
|
Index: xen-3.1-testing/tools/ioemu/hw/ide.c
|
|
===================================================================
|
|
--- xen-3.1-testing.orig/tools/ioemu/hw/ide.c
|
|
+++ xen-3.1-testing/tools/ioemu/hw/ide.c
|
|
@@ -676,7 +676,8 @@ static void ide_identify(IDEState *s)
|
|
/* 13=flush_cache_ext,12=flush_cache,10=lba48 */
|
|
put_le16(p + 83, (1 << 14) | (1 << 13) | (1 <<12) | (1 << 10));
|
|
put_le16(p + 84, (1 << 14));
|
|
- put_le16(p + 85, (1 << 14));
|
|
+ /* 14=nop 5=write_cache */
|
|
+ put_le16(p + 85, (1 << 14) | (1 << 5));
|
|
/* 13=flush_cache_ext,12=flush_cache,10=lba48 */
|
|
put_le16(p + 86, (1 << 14) | (1 << 13) | (1 <<12) | (1 << 10));
|
|
put_le16(p + 87, (1 << 14));
|