Am 17.10.2023 um 16:01 hat Philippe Mathieu-Daudé geschrieben: > Access QOM parent with the proper QOM VIRTIO_SCSI_COMMON() macro. > > Signed-off-by: Philippe Mathieu-Daudé <phi...@linaro.org> > --- > hw/scsi/virtio-scsi.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/hw/scsi/virtio-scsi.c b/hw/scsi/virtio-scsi.c > index 45b95ea070..fa53f0902c 100644 > --- a/hw/scsi/virtio-scsi.c > +++ b/hw/scsi/virtio-scsi.c > @@ -761,7 +761,7 @@ static void virtio_scsi_fail_cmd_req(VirtIOSCSIReq *req) > > static int virtio_scsi_handle_cmd_req_prepare(VirtIOSCSI *s, VirtIOSCSIReq > *req) > { > - VirtIOSCSICommon *vs = &s->parent_obj; > + VirtIOSCSICommon *vs = VIRTIO_SCSI_COMMON(s); > SCSIDevice *d; > int rc;
Why is a dynamic cast more "proper" than a static type-safe access, even more so in a hot I/O path? Rich Jones posted a flamegraph the other day that surprised me because object_class_dynamic_class_assert() and object_dynamic_cast_assert() were shown to be a big part of scsi_req_new(). In the overall performance, it's probably dwarved by other issues, but unnecessary little things can add up, too. Kevin