On Thu, Apr 24, 2025 at 06:08:21PM +0200, Cédric Le Goater wrote: > On 4/9/25 15:48, John Levon wrote: > > Instead of requesting region information on demand with > > VFIO_DEVICE_GET_REGION_INFO, maintain a cache: this will become > > necessary for performance for vfio-user, where this call becomes a > > message over the control socket, so is of higher overhead than the > > traditional path. > > > > We will also need it to generalize region accesses, as that means we > > can't use ->config_offset for configuration space accesses, but must > > look up the region offset (if relevant) each time. > > This change is an optimization for vfio-user. I would prefer to keep it > for after enabling vfio-user.
It's not vfio-user specific. Just to clarify, you want this code: static int vfio_io_region_write(VFIODevice *vbasedev, uint8_t index, off_t off, uint32_t size, void *data, bool post) { struct vfio_region_info *info = vbasedev->regions[index]; int ret; ret = pwrite(vbasedev->fd, data, size, info->offset + off); return ret < 0 ? -errno : ret; } to become: static int vfio_io_region_write(VFIODevice *vbasedev, uint8_t index, off_t off, uint32_t size, void *data, bool post) { struct vfio_region_info info; ioctl(vbasedev->fd, VFIO_DEVICE_GET_IRQ_INFO, &info); struct vfio_region_info *info = vbasedev->regions[index]; int ret; ret = pwrite(vbasedev->fd, data, size, info->offset + off); return ret < 0 ? -errno : ret; } i.e. every region read/write needs to look up info each time? If not, what are you suggesting? regards john