From 24ce5a6cd261485d636cf125545f3e1902d0cec6 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Daniel=20P=2E=20Berrang=C3=A9?= Date: Fri, 20 Nov 2020 16:04:05 +0000 Subject: [PATCH] qemu: fix setting of scsi-id for ESP SCSI controllers MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit The ESP SCSI controllers (NCR53C90, DC390, AM53C974) have the same requirement as the LSI Logic controller for each disk to be set via the scsi-id=NNN property, not the lun=NNN property. Switching the code to use an enum will force authors to pay attention to this difference when adding future SCSI controllers. Reviewed-by: Laine Stump Signed-off-by: Daniel P. Berrangé --- src/qemu/qemu_command.c | 26 +++++++++++++++++++++-- tests/qemuxml2argvdata/sparc-minimal.args | 7 +++--- 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index fbaacb8dd8..479bcc0b0c 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -1625,17 +1625,39 @@ qemuBuildDiskDeviceStr(const virDomainDef *def, disk->info.addr.drive.controller))) return NULL; - if (controllerModel == VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSILOGIC) { + switch ((virDomainControllerModelSCSI)controllerModel) { + case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSILOGIC: + case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_NCR53C90: + case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_DC390: + case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_AM53C974: virBufferAsprintf(&opt, ",bus=%s.%d,scsi-id=%d", contAlias, disk->info.addr.drive.bus, disk->info.addr.drive.unit); - } else { + break; + + case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_AUTO: + case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_BUSLOGIC: + case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSISAS1068: + case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VMPVSCSI: + case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_IBMVSCSI: + case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_SCSI: + case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSISAS1078: + case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_TRANSITIONAL: + case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_NON_TRANSITIONAL: virBufferAsprintf(&opt, ",bus=%s.0,channel=%d,scsi-id=%d,lun=%d", contAlias, disk->info.addr.drive.bus, disk->info.addr.drive.target, disk->info.addr.drive.unit); + break; + + case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_DEFAULT: + case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LAST: + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Unexpected SCSI controller model %d"), + controllerModel); + return NULL; } if (scsiVPDDeviceId) diff --git a/tests/qemuxml2argvdata/sparc-minimal.args b/tests/qemuxml2argvdata/sparc-minimal.args index 65cf99c895..b91a4e85b4 100644 --- a/tests/qemuxml2argvdata/sparc-minimal.args +++ b/tests/qemuxml2argvdata/sparc-minimal.args @@ -26,9 +26,8 @@ path=/tmp/lib/domain--1-redhat62sparc/monitor.sock,server,nowait \ -usb \ -drive file=/home/berrange/VirtualMachines/redhat-6.2-sparc.img,format=qcow2,\ if=none,id=drive-scsi0-0-0-0 \ --device scsi-hd,bus=scsi.0,channel=0,scsi-id=0,lun=0,drive=drive-scsi0-0-0-0,\ -id=scsi0-0-0-0,bootindex=1 \ +-device scsi-hd,bus=scsi.0,scsi-id=0,drive=drive-scsi0-0-0-0,id=scsi0-0-0-0,\ +bootindex=1 \ -drive file=/home/berrange/VirtualMachines/redhat-6.2-sparc.iso,format=raw,\ if=none,id=drive-scsi0-0-0-1,readonly=on \ --device scsi-cd,bus=scsi.0,channel=0,scsi-id=0,lun=1,drive=drive-scsi0-0-0-1,\ -id=scsi0-0-0-1 +-device scsi-cd,bus=scsi.0,scsi-id=1,drive=drive-scsi0-0-0-1,id=scsi0-0-0-1 -- 2.47.2