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