9ae3a8
From 62868855d0fdd34dee119a59c7e56c1706fc27ab Mon Sep 17 00:00:00 2001
9ae3a8
From: Miroslav Rezanina <mrezanin@redhat.com>
9ae3a8
Date: Wed, 31 Jul 2013 08:00:55 +0200
9ae3a8
Subject: pc: Disable the "use flash device for BIOS unless KVM" misfeature
9ae3a8
9ae3a8
Message-id: <1373453682-19227-2-git-send-email-armbru@redhat.com>
9ae3a8
Patchwork-id: 52417
9ae3a8
O-Subject: [RHEL-7 PATCH qemu-kvm 1/1] pc: Disable the "use flash device for BIOS unless KVM" misfeature
9ae3a8
Bugzilla: 963280
9ae3a8
RH-Acked-by: Michael S. Tsirkin <mst@redhat.com>
9ae3a8
RH-Acked-by: Laszlo Ersek <lersek@redhat.com>
9ae3a8
RH-Acked-by: Paolo Bonzini <pbonzini@redhat.com>
9ae3a8
9ae3a8
Use of a flash memory device for the BIOS was added in series "[PATCH
9ae3a8
v10 0/8] PC system flash support", commit 4732dca..1b89faf, v1.1.
9ae3a8
9ae3a8
Flash vs. ROM is a guest-visible difference.  Thus, flash use had to
9ae3a8
be suppressed for machine types pc-1.0 and older.  This was
9ae3a8
accomplished by adding a dummy device "pc-sysfw" with property
9ae3a8
"rom_only":
9ae3a8
9ae3a8
* Non-zero rom_only means "use ROM".  Default for pc-1.0 and older.
9ae3a8
* Zero rom_only means "maybe use flash".  Default for newer machines.
9ae3a8
9ae3a8
Not only is the dummy device ugly, it was also retroactively added to
9ae3a8
the older machine types!  Fortunately, it's not guest-visible (thus no
9ae3a8
immediate guest ABI breakage), and has no vmstate (thus no immediate
9ae3a8
migration breakage).  Breakage occurs only if the user unwisely
9ae3a8
enables flash by setting rom_only to zero.  Patch review FAIL #1.
9ae3a8
9ae3a8
Why "maybe use flash"?  Flash didn't work with KVM.  Therefore,
9ae3a8
rom_only=0 really means "use flash, except when KVM is enabled, use
9ae3a8
ROM".  This is a Bad Idea, because it makes enabling/ disabling KVM
9ae3a8
guest-visible.  Patch review FAIL #2.
9ae3a8
9ae3a8
Aside: it also precludes migrating between KVM on and off, but that's
9ae3a8
not possible for other reasons anyway.
9ae3a8
9ae3a8
Upstream commit 9953f88 killed the misfeature for new machine types.
9ae3a8
Upstream commit 9e1c2ec reverted the kill, but left a dead variable
9ae3a8
behind.  This is what's in RHEL-7 is before this patch.
9ae3a8
9ae3a8
KVM has recently been made to support flash (KVM_CAP_READONLY_MEM),
9ae3a8
which permitted upstream QEMU to redo the flash vs. ROM switch
9ae3a8
properly (commit 338ea90..dafb82e).  The required follow-up cleanup
9ae3a8
hasn't been committed, yet: Paolo's [PATCH v2 0/3] Remove legacy sysfw
9ae3a8
code.
9ae3a8
9ae3a8
Instead of backporting all that, I'm simply ripping out the flash
9ae3a8
feature.  ROM has been working just fine for us, and I don't think we
9ae3a8
should complicate RHEL-7 maintenance and support by having two ways to
9ae3a8
map BIOS, at least not without sufficient business reason.
9ae3a8
9ae3a8
The result behaves just like upstream with the follow-up cleanup
9ae3a8
applied, except -pflash doesn't affect the BIOS mapping, but remains
9ae3a8
as it always was: it creates an unused drive.
9ae3a8
9ae3a8
Signed-off-by: Markus Armbruster <armbru@redhat.com>
9ae3a8
9ae3a8
diff --git a/hw/block/pc_sysfw.c b/hw/block/pc_sysfw.c
9ae3a8
index 4f17668..2bbedc9 100644
9ae3a8
--- a/hw/block/pc_sysfw.c
9ae3a8
+++ b/hw/block/pc_sysfw.c
9ae3a8
@@ -36,6 +36,7 @@
9ae3a8
 
9ae3a8
 #define BIOS_FILENAME "bios.bin"
9ae3a8
 
9ae3a8
+#if 0   /* Disabled for Red Hat Enterprise Linux */
9ae3a8
 typedef struct PcSysFwDevice {
9ae3a8
     SysBusDevice busdev;
9ae3a8
     uint8_t rom_only;
9ae3a8
@@ -138,6 +139,7 @@ static void pc_system_flash_init(MemoryRegion *rom_memory,
9ae3a8
 
9ae3a8
     pc_isa_bios_init(rom_memory, flash_mem, size);
9ae3a8
 }
9ae3a8
+#endif  /* Disabled for Red Hat Enterprise Linux */
9ae3a8
 
9ae3a8
 static void old_pc_system_rom_init(MemoryRegion *rom_memory)
9ae3a8
 {
9ae3a8
@@ -194,6 +196,7 @@ static void old_pc_system_rom_init(MemoryRegion *rom_memory)
9ae3a8
                                 bios);
9ae3a8
 }
9ae3a8
 
9ae3a8
+#if 0   /* Disabled for Red Hat Enterprise Linux */
9ae3a8
 /*
9ae3a8
  * Bug-compatible flash vs. ROM selection enabled?
9ae3a8
  * A few older machines enable this.
9ae3a8
@@ -287,3 +290,9 @@ static void pcsysfw_register (void)
9ae3a8
 
9ae3a8
 type_init (pcsysfw_register);
9ae3a8
 
9ae3a8
+#else   /* Disabled for Red Hat Enterprise Linux */
9ae3a8
+void pc_system_firmware_init(MemoryRegion *rom_memory)
9ae3a8
+{
9ae3a8
+    old_pc_system_rom_init(rom_memory);
9ae3a8
+}
9ae3a8
+#endif