On 7/1/20 6:03 PM, Stefan Hajnoczi wrote: > On Tue, Jun 30, 2020 at 09:13:18PM +0200, Philippe Mathieu-Daudé wrote: >> To be able to use multiple queues on the same hardware, >> we need to have each queue able to receive IRQ notifications >> in the correct AIO context. >> The AIO context and the notification handler have to be proper >> to each queue, not to the block driver. Move aio_context and >> irq_notifier from BDRVNVMeState to NVMeQueuePair. > > If I understand correctly, after this patch: > > 1. Each queue pair has an EventNotifier irq_notifier but only the admin > queuepair's irq_notifier is hooked up to VFIO. This means all > interrupts come via the admin queuepair.
Yes, but this was the behavior before this patch too. > > (This also means all queuepairs still need to be polled for > completions when the interrupt fires because we don't know which > queuepair had a completion event.) Yes. > > 2. AioContexts must be identical across all queuepairs and > BlockDriverStates. Although they all have their own AioContext > pointer there is no true support for different AioContexts yet. I'm not sure. Maybe v3 will sort that out. > > (For example, nvme_cmd_sync() is called with a bs argument but > AIO_WAIT_WHILE(q->aio_context, ...) uses the queuepair aio_context so > the assumption is that they match.) > > Please confirm and add something equivalent into the commit description > so the assumptions/limitations are clear. I'll do my best! Thanks for your reviews, Phil.