On Wed, Jan 13, 2021 at 10:38:29AM +0800, Jason Wang wrote: > > On 2021/1/8 上午1:53, Stefan Hajnoczi wrote: > > On Thu, Jan 07, 2021 at 11:30:47AM +0800, Jason Wang wrote: > > > On 2021/1/6 下午11:05, Stefan Hajnoczi wrote: > > > > On Wed, Jan 06, 2021 at 01:21:43PM +0800, Jason Wang wrote: > > > > > On 2021/1/5 下午6:25, Stefan Hajnoczi wrote: > > > > > > On Tue, Jan 05, 2021 at 11:53:01AM +0800, Jason Wang wrote: > > > > > > > On 2021/1/5 上午8:02, Elena Afanasova wrote: > > > > > > > > On Mon, 2021-01-04 at 13:34 +0800, Jason Wang wrote: > > > > > > > > > On 2021/1/4 上午4:32, Elena Afanasova wrote: > > > > > > > > > > On Thu, 2020-12-31 at 11:45 +0800, Jason Wang wrote: > > > > > > > > > > > On 2020/12/29 下午6:02, Elena Afanasova wrote: > > 2. If separate userspace threads process the virtqueues, then set up the > > virtio-pci capabilities so the virtqueues have separate notification > > registers: > > https://docs.oasis-open.org/virtio/virtio/v1.1/cs01/virtio-v1.1-cs01.html#x1-1150004 > > > Right. But this works only when PCI transport is used and queue index could > be deduced from the register address (separated doorbell). > > If we use MMIO or sharing the doorbell registers among all the virtqueues > (multiplexer is zero in the above case) , it can't work without datamatch. True. Can you think of an application that needs to dispatch a shared doorbell register to several threads? If this is a case that real-world applications need then we should tackle it. This is where eBPF would be appropriate. I guess the interface would be something like: /* * A custom demultiplexer function that returns the index of the <wfd, * rfd> pair to use or -1 to produce a KVM_EXIT_IOREGION_FAILURE that * userspace must handle. */ int demux(const struct ioregionfd_cmd *cmd); Userspace can install an eBPF demux function as well as an array of <wfd, rfd> fd pairs. The demux function gets to look at the cmd in order to decide which fd pair it is sent to. This is how I think eBPF datamatch could work. It's not as general as in our original discussion where we also talked about custom protocols (instead of struct ioregionfd_cmd/struct ioregionfd_resp). Stefan
Attachment:
signature.asc
Description: PGP signature