On Mon, Jan 19, 2026 at 04:34:11PM +0800, Jason Wang wrote: > On Mon, Jan 19, 2026 at 4:10 PM Eugenio Perez Martin > <[email protected]> wrote: > > > > On Mon, Jan 19, 2026 at 8:17 AM Jason Wang <[email protected]> wrote: > > > > > > On Fri, Jan 16, 2026 at 10:05 PM Eugenio Pérez <[email protected]> > > > wrote: > > > > > > > > Add support for assigning Address Space Identifiers (ASIDs) to each VQ > > > > group. This enables mapping each group into a distinct memory space. > > > > > > > > The vq group to ASID association is protected by a rwlock now. But the > > > > mutex domain_lock keeps protecting the domains of all ASIDs, as some > > > > operations like the one related with the bounce buffer size still > > > > requires to lock all the ASIDs. > > > > > > > > Signed-off-by: Eugenio Pérez <[email protected]> > > > > > > > > --- > > > > Future improvements can include performance optimizations on top like > > > > ore to RCU or thread synchronized atomics, or hardening by tracking ASID > > > > or ASID hashes on unused bits of the DMA address. > > > > > > > > Tested virtio_vdpa by adding manually two threads in vduse_set_status: > > > > one of them modifies the vq group 0 ASID and the other one map and unmap > > > > memory continuously. After a while, the two threads stop and the usual > > > > work continues. Test with version 0, version 1 with the old ioctl, and > > > > version 1 with the new ioctl. > > > > > > > > Tested with vhost_vdpa by migrating a VM while ping on OVS+VDUSE. A few > > > > workaround were needed in some parts: > > > > * Do not enable CVQ before data vqs in QEMU, as VDUSE does not forward > > > > the enable message to the userland device. This will be solved in the > > > > future. > > > > * Share the suspended state between all vhost devices in QEMU: > > > > https://lists.nongnu.org/archive/html/qemu-devel/2025-11/msg02947.html > > > > * Implement a fake VDUSE suspend vdpa operation callback that always > > > > returns true in the kernel. DPDK suspend the device at the first > > > > GET_VRING_BASE. > > > > * Remove the CVQ blocker in ASID. > > > > > > > > The driver vhost_vdpa was also tested with version 0, version 1 with the > > > > old ioctl, version 1 with the new ioctl but only one ASID, and version 1 > > > > with many ASID. > > > > > > > > > > Looks good overall, but I spot a small issue: > > > > > > int vduse_domain_add_user_bounce_pages(struct vduse_iova_domain *domain, > > > struct page **pages, int count) > > > { > > > struct vduse_bounce_map *map, *head_map; > > > ... > > > > > > /* Now we don't support partial mapping */ > > > if (count != (domain->bounce_size >> PAGE_SHIFT)) > > > return -EINVAL; > > > > > > Here we still use domain->bounce_size even if we support multiple as, > > > this conflicts with the case without userspace memory. > > > > > > > I don't follow you. My understanding from the previous discussion is > > that the bounce size is distributed evenly per AS. Should we just have > > a global bounce buffer size and protect that the amount of added > > memory of all domains is less than that bounce size? > > I meant we require bounce_size / nas to be the size of the bounce > buffer size of each AS. > > But for userspace registered memory, it requires bounce_size per AS. > > Thanks
I don't really understand what you are saying here, either. Could you explain what your suggestion is? > >

