yeahuh / rpms / qemu-kvm

Forked from rpms/qemu-kvm 2 years ago
Clone
76daa3
From 7977e603169c92da4b0ecd656c3346500a93897b Mon Sep 17 00:00:00 2001
76daa3
From: Markus Armbruster <armbru@redhat.com>
76daa3
Date: Fri, 28 Apr 2017 12:22:27 +0200
76daa3
Subject: [PATCH 02/27] scsi: Disable deprecated implicit SCSI HBA creation
76daa3
 more cleanly
76daa3
76daa3
RH-Author: Markus Armbruster <armbru@redhat.com>
76daa3
Message-id: <1493382147-23057-2-git-send-email-armbru@redhat.com>
76daa3
Patchwork-id: 74946
76daa3
O-Subject: [RHV-7.4 qemu-kvm-rhev PATCH] scsi: Disable deprecated implicit SCSI HBA creation more cleanly
76daa3
Bugzilla: 971799
76daa3
RH-Acked-by: Stefan Hajnoczi <stefanha@redhat.com>
76daa3
RH-Acked-by: John Snow <jsnow@redhat.com>
76daa3
RH-Acked-by: Jeffrey Cody <jcody@redhat.com>
76daa3
76daa3
The PC machines (pc-q35-* pc-i440fx-* pc-* isapc xenfv) automatically
76daa3
create lsi53c895a SCSI HBAs and SCSI devices to honor -drive if=scsi.
76daa3
Deprecated upstream since commit f778a82, v2.9.0, not supported at all
76daa3
in RHEL.  The way it fails is rather ugly, though:
76daa3
76daa3
    $ qemu-kvm -nodefaults -S -drive if=scsi,media=cdrom
76daa3
    qemu-kvm: Unknown device 'lsi53c895a' for bus 'PCI'
76daa3
    Aborted (core dumped)
76daa3
76daa3
Recent upstream work permit us to make this fail cleanly by commenting
76daa3
out the code that tries to create lsi53c895a SCSI HBAs in
76daa3
pc_pci_device_init():
76daa3
76daa3
    qemu-kvm: -drive if=scsi,media=cdrom: machine type does not support if=scsi,bus=0,unit=0
76daa3
76daa3
However, by itself this would make another deprecated feature
76daa3
available in RHEL: drives defined with if=scsi get picked up by SCSI
76daa3
HBAs added with -device, unlike other interface types.  Deprecated
76daa3
upstream since commit a64aa57, v2.9.0.  Comment out that code, too.
76daa3
Bonus: that code can be rather slow with a large number of drives, so
76daa3
good riddance.
76daa3
76daa3
Signed-off-by: Markus Armbruster <armbru@redhat.com>
76daa3
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
76daa3
---
76daa3
 hw/i386/pc.c       | 2 ++
76daa3
 hw/scsi/scsi-bus.c | 7 +++++++
76daa3
 vl.c               | 2 ++
76daa3
 3 files changed, 11 insertions(+)
76daa3
76daa3
diff --git a/hw/i386/pc.c b/hw/i386/pc.c
76daa3
index 6ed4d23..1a0e672 100644
76daa3
--- a/hw/i386/pc.c
76daa3
+++ b/hw/i386/pc.c
76daa3
@@ -1648,6 +1648,7 @@ void pc_nic_init(ISABus *isa_bus, PCIBus *pci_bus)
76daa3
 
76daa3
 void pc_pci_device_init(PCIBus *pci_bus)
76daa3
 {
76daa3
+#if 0 /* Disabled for Red Hat Enterprise Linux */
76daa3
     int max_bus;
76daa3
     int bus;
76daa3
 
76daa3
@@ -1661,6 +1662,7 @@ void pc_pci_device_init(PCIBus *pci_bus)
76daa3
          * this usage is deprecated.
76daa3
          */
76daa3
     }
76daa3
+#endif
76daa3
 }
76daa3
 
76daa3
 void ioapic_init_gsi(GSIState *gsi_state, const char *parent_name)
76daa3
diff --git a/hw/scsi/scsi-bus.c b/hw/scsi/scsi-bus.c
76daa3
index f557446..bc984f4 100644
76daa3
--- a/hw/scsi/scsi-bus.c
76daa3
+++ b/hw/scsi/scsi-bus.c
76daa3
@@ -265,6 +265,8 @@ SCSIDevice *scsi_bus_legacy_add_drive(SCSIBus *bus, BlockBackend *blk,
76daa3
 
76daa3
 void scsi_bus_legacy_handle_cmdline(SCSIBus *bus, bool deprecated)
76daa3
 {
76daa3
+#if 0 /* Disabled for Red Hat Enterprise Linux */
76daa3
+
76daa3
     Location loc;
76daa3
     DriveInfo *dinfo;
76daa3
     int unit;
76daa3
@@ -291,8 +293,11 @@ void scsi_bus_legacy_handle_cmdline(SCSIBus *bus, bool deprecated)
76daa3
                                   unit, false, -1, NULL, &error_fatal);
76daa3
     }
76daa3
     loc_pop(&loc;;
76daa3
+#endif
76daa3
 }
76daa3
 
76daa3
+#if 0 /* Disabled for Red Hat Enterprise Linux */
76daa3
+
76daa3
 static bool is_scsi_hba_with_legacy_magic(Object *obj)
76daa3
 {
76daa3
     static const char *magic[] = {
76daa3
@@ -329,6 +334,8 @@ void scsi_legacy_handle_cmdline(void)
76daa3
                                    scsi_legacy_handle_cmdline_cb, NULL);
76daa3
 }
76daa3
 
76daa3
+#endif
76daa3
+
76daa3
 static int32_t scsi_invalid_field(SCSIRequest *req, uint8_t *buf)
76daa3
 {
76daa3
     scsi_req_build_sense(req, SENSE_CODE(INVALID_FIELD));
76daa3
diff --git a/vl.c b/vl.c
76daa3
index 8a5df00..183f070 100644
76daa3
--- a/vl.c
76daa3
+++ b/vl.c
76daa3
@@ -4602,6 +4602,7 @@ int main(int argc, char **argv, char **envp)
76daa3
 
76daa3
     rom_reset_order_override();
76daa3
 
76daa3
+#if 0 /* Disabled for Red Hat Enterprise Linux */
76daa3
     /*
76daa3
      * Create frontends for -drive if=scsi leftovers.
76daa3
      * Normally, frontends for -drive get created by machine
76daa3
@@ -4610,6 +4611,7 @@ int main(int argc, char **argv, char **envp)
76daa3
      * implementation accident, and deprecated.
76daa3
      */
76daa3
     scsi_legacy_handle_cmdline();
76daa3
+#endif
76daa3
 
76daa3
     /* Did we create any drives that we failed to create a device for? */
76daa3
     drive_check_orphaned();
76daa3
-- 
76daa3
1.8.3.1
76daa3