This reverts commit 8cc5583abe6419e7faaebc9fbd109f34f4c850f2. That commit causes several problems in Linux as described in the BZ. In particular, after a while, other devices on the bus are no longer usable even if those devices are not affected by the hotunplug. This may be a problem in Linux, but we have not been able to identify it so far. So better to revert this patch until we find a solution.
Also, Oracle, which initially proposed this patch for a problem with Solaris, seems to have already reversed it downstream: https://linux.oracle.com/errata/ELSA-2023-12065.html Suggested-by: Thomas Huth <th...@redhat.com> Buglink: https://bugzilla.redhat.com/show_bug.cgi?id=2176702 Cc: qemu-sta...@nongnu.org Cc: Mark Kanda <mark.ka...@oracle.com> Signed-off-by: Stefano Garzarella <sgarz...@redhat.com> --- include/hw/scsi/scsi.h | 1 - hw/scsi/scsi-bus.c | 18 ------------------ hw/scsi/virtio-scsi.c | 2 -- 3 files changed, 21 deletions(-) diff --git a/include/hw/scsi/scsi.h b/include/hw/scsi/scsi.h index e2bb1a2fbf..7c8adf10b1 100644 --- a/include/hw/scsi/scsi.h +++ b/include/hw/scsi/scsi.h @@ -198,7 +198,6 @@ SCSIDevice *scsi_bus_legacy_add_drive(SCSIBus *bus, BlockBackend *blk, BlockdevOnError rerror, BlockdevOnError werror, const char *serial, Error **errp); -void scsi_bus_set_ua(SCSIBus *bus, SCSISense sense); void scsi_bus_legacy_handle_cmdline(SCSIBus *bus); SCSIRequest *scsi_req_alloc(const SCSIReqOps *reqops, SCSIDevice *d, diff --git a/hw/scsi/scsi-bus.c b/hw/scsi/scsi-bus.c index f80f4cb4fc..42a915f8b7 100644 --- a/hw/scsi/scsi-bus.c +++ b/hw/scsi/scsi-bus.c @@ -1617,24 +1617,6 @@ static int scsi_ua_precedence(SCSISense sense) return (sense.asc << 8) | sense.ascq; } -void scsi_bus_set_ua(SCSIBus *bus, SCSISense sense) -{ - int prec1, prec2; - if (sense.key != UNIT_ATTENTION) { - return; - } - - /* - * Override a pre-existing unit attention condition, except for a more - * important reset condition. - */ - prec1 = scsi_ua_precedence(bus->unit_attention); - prec2 = scsi_ua_precedence(sense); - if (prec2 < prec1) { - bus->unit_attention = sense; - } -} - void scsi_device_set_ua(SCSIDevice *sdev, SCSISense sense) { int prec1, prec2; diff --git a/hw/scsi/virtio-scsi.c b/hw/scsi/virtio-scsi.c index 45b95ea070..1f56607100 100644 --- a/hw/scsi/virtio-scsi.c +++ b/hw/scsi/virtio-scsi.c @@ -1080,7 +1080,6 @@ static void virtio_scsi_hotplug(HotplugHandler *hotplug_dev, DeviceState *dev, virtio_scsi_acquire(s); virtio_scsi_push_event(s, &info); - scsi_bus_set_ua(&s->bus, SENSE_CODE(REPORTED_LUNS_CHANGED)); virtio_scsi_release(s); } } @@ -1112,7 +1111,6 @@ static void virtio_scsi_hotunplug(HotplugHandler *hotplug_dev, DeviceState *dev, if (virtio_vdev_has_feature(vdev, VIRTIO_SCSI_F_HOTPLUG)) { virtio_scsi_acquire(s); virtio_scsi_push_event(s, &info); - scsi_bus_set_ua(&s->bus, SENSE_CODE(REPORTED_LUNS_CHANGED)); virtio_scsi_release(s); } } -- 2.41.0