Re: [PATCH v6 4/6] vfio: Define vfio based vgpu's dma-buf operations

From: Gerd Hoffmann
Date: Tue Jun 06 2017 - 03:59:23 EST


On Mon, 2017-06-05 at 13:56 +0530, Kirti Wankhede wrote:
>
> On 6/2/2017 2:08 PM, Gerd Hoffmann wrote:
> >
> > > struct vfio_vgpu_surface_info {
> > > ÂÂÂÂÂÂÂÂ__u64 start;
> > > ÂÂÂÂÂÂÂÂ__u32 width;
> > > ÂÂÂÂÂÂÂÂ__u32 height;
> > > ÂÂÂÂÂÂÂÂ__u32 stride;
> > > ÂÂÂÂÂÂÂÂ__u32 size;
> > > ÂÂÂÂÂÂÂÂ__u32 x_pos;
> > > ÂÂÂÂÂÂÂÂ__u32 y_pos;
> > > ÂÂÂÂÂÂÂÂ__u32 padding;
> > > ÂÂÂÂÂÂÂÂ/* Only used when VFIO_VGPU_SURFACE_DMABUF_* flags set */
> > > ÂÂÂÂÂÂÂÂ__u64 drm_format_mod;
> > > ÂÂÂÂÂÂÂÂ__u32 drm_format;
> >
> > Why for dmabufs only?ÂÂShouldn't the region specify the format
> > too?Â
> > Even in case you are using a fixed one (say
> > DRM_FORMAT_XRGB8888) you
> > can explicitly say so in drm_format (and set drm_format_mod to
> > zero).
> >
>
> Definitions for PIXMAN formats and DRM formats are different. I think
> we need a flag to specify the format of surface that vendor driver is
> going to provide, PIXMAN or DRM.

No need to put that into the ioctl interface. First, the kernel should
not worry about what userspace uses to process the data. Second (most)
drm formats can trivially be mapped into pixman formats.

For example: PIXMAN_x8r8g8b8 (little endian) == DRM_FORMAT_XRGB8888

> If surface is provided through region in PIXMAN format, existing
> functions in QEMU can be used to get format from bpp value,
> qemu_default_pixman_format(). Similarly, display surface can be
> updated
> by QEMU using qemu_create_displaysurface_from() from mmaped region.

A thin wrapper which accepts a struct vfio_vgpu_surface_info and
translates that into a qemu_create_displaysurface_from() call should be
pretty small.

cheers,
Gerd