Cornelia Huck
2022-Apr-12 16:48 UTC
[PATCH V2 4/5] virtio-pci: implement synchronize_vqs()
On Tue, Apr 12 2022, Halil Pasic <pasic at linux.ibm.com> wrote:> On Mon, 11 Apr 2022 16:27:41 +0200 > Cornelia Huck <cohuck at redhat.com> wrote:>> My main concern is that we would need to synchronize against a single >> interrupt that covers all kinds of I/O interrupts, not just a single >> device... >> > > Could we synchronize on struct airq_info's lock member? If we were > to grab all of these that might be involved...Hm, that could possibly narrow the sync down to a subset, which seems better. For devices still using classic interrupts, per-device sync would be easy.> > AFAIU for the synchronize implementation we need a lock or a set of locks > that contain all the possible vring_interrupt() calls with the queuues > that belong to the given device as a critical section. That way, one > has the acquire's and release's in place so that the vrign_interrupt() > either guaranteed to finish before the change of driver_ready is > guaranteed to be complete, or it is guaranteed to see the change. > > In any case, I guess we should first get clear on the first part. I.e. > when do we want to allow host->guest notifications.Also, whether we just care about vring interrupts, or general device interrupts (not sure if a config change interrupt may also trigger things we do not want to trigger?)
On Wed, Apr 13, 2022 at 12:49 AM Cornelia Huck <cohuck at redhat.com> wrote:> > On Tue, Apr 12 2022, Halil Pasic <pasic at linux.ibm.com> wrote: > > > On Mon, 11 Apr 2022 16:27:41 +0200 > > Cornelia Huck <cohuck at redhat.com> wrote: > > >> My main concern is that we would need to synchronize against a single > >> interrupt that covers all kinds of I/O interrupts, not just a single > >> device... > >> > > > > Could we synchronize on struct airq_info's lock member? If we were > > to grab all of these that might be involved... > > Hm, that could possibly narrow the sync down to a subset, which seems > better. For devices still using classic interrupts, per-device sync > would be easy. > > > > > AFAIU for the synchronize implementation we need a lock or a set of locks > > that contain all the possible vring_interrupt() calls with the queuues > > that belong to the given device as a critical section. That way, one > > has the acquire's and release's in place so that the vrign_interrupt() > > either guaranteed to finish before the change of driver_ready is > > guaranteed to be complete, or it is guaranteed to see the change. > > > > In any case, I guess we should first get clear on the first part. I.e. > > when do we want to allow host->guest notifications. > > Also, whether we just care about vring interrupts, or general device > interrupts (not sure if a config change interrupt may also trigger > things we do not want to trigger?)I think only vring interrupts, since the config interrupt hardening is done via 22b7050a024d7 ("virtio: defer config changed notifications") Thanks>