|
|
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
|