From: Daniel P. Berrangé Date: Fri, 20 Nov 2020 16:04:05 +0000 (+0000) Subject: qemu: fix setting of scsi-id for ESP SCSI controllers X-Git-Tag: v6.10.0-rc1~72 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=24ce5a6cd261485d636cf125545f3e1902d0cec6;p=thirdparty%2Flibvirt.git qemu: fix setting of scsi-id for ESP SCSI controllers 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é --- 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