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

Reply via email to