]> git.proxmox.com Git - mirror_qemu.git/commit
device-core: use RCU for list of children of a bus
authorMaxim Levitsky <mlevitsk@redhat.com>
Tue, 6 Oct 2020 12:38:59 +0000 (15:38 +0300)
committerPaolo Bonzini <pbonzini@redhat.com>
Mon, 12 Oct 2020 15:50:50 +0000 (11:50 -0400)
commit2d24a64661549732fc77f632928318dd52f5bce5
tree3e7f20a87ef9c2368db3f988fe331279cacf236a
parent7bed89958bfbf40df9ca681cefbdca63abdde39d
device-core: use RCU for list of children of a bus

This fixes the race between device emulation code that tries to find
a child device to dispatch the request to (e.g a scsi disk),
and hotplug of a new device to that bus.

Note that this doesn't convert all the readers of the list
but only these that might go over that list without BQL held.

This is a very small first step to make this code thread safe.

Suggested-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Maxim Levitsky <mlevitsk@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Message-Id: <20200913160259.32145-5-mlevitsk@redhat.com>
[Use RCU_READ_LOCK_GUARD in more places, adjust testcase now that
 the delay in DEVICE_DELETED due to RCU is more consistent. - Paolo]
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Message-Id: <20201006123904.610658-9-mlevitsk@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
hw/core/bus.c
hw/core/qdev.c
hw/scsi/scsi-bus.c
hw/scsi/virtio-scsi.c
include/hw/qdev-core.h