OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

virtio-comment message

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]


Subject: Re: [PATCH 2/2] virtio-gpu: add support for mapping/unmapping blob resources


On Tue, Apr 21, 2020 at 05:55:31PM -0700, Gurchetan Singh wrote:
> This defines a virtgpu shared memory region, with the possibilty
> of more in the future.  This is required to implement VK/GL coherent
> memory semantics, among other things.
> 
> Does anyone know when VIRTIO_PCI_CAP_SHARED_MEMORY_CFG is expected
> to land in the Linux kernel?

virtfs needs this when DAX support lands, so it should not be that far
away ...

Patch looks fine to me.

take care,
  Gerd

> Co-authored-by: Gerd Hoffman <kraxel@redhat.com>
> Co-authored-by: Chia-I-Wu <olvaffe@gmail.com>
> Signed-off-by: Gurchetan Singh <gurchetansingh@chromium.org>
> ---
>  virtio-gpu.tex | 71 +++++++++++++++++++++++++++++++++++++++++++++++---
>  1 file changed, 67 insertions(+), 4 deletions(-)
> 
> diff --git a/virtio-gpu.tex b/virtio-gpu.tex
> index 6f374bd..a19536d 100644
> --- a/virtio-gpu.tex
> +++ b/virtio-gpu.tex
> @@ -88,13 +88,31 @@ \subsubsection{Events}
>  information is available or all displays are disabled the driver MAY
>  choose to use a fallback, such as 1024x768 at display 0.
>  
> +The driver SHOULD query all shared memory regions supported by the device.
> +If the device supports shared memory, the \field{shmid} of a region MUST
> +(see \ref{sec:Basic Facilities of a Virtio Device /
> +Shared Memory Regions}~\nameref{sec:Basic Facilities of a Virtio Device /
> +Shared Memory Regions}) be one of the following:
> +
> +\begin{lstlisting}
> +enum virtio_gpu_shm_id {
> +        VIRTIO_GPU_SHM_ID_UNDEFINED = 0,
> +        VIRTIO_GPU_SHM_ID_HOST_VISIBLE = 1,
> +};
> +\end{lstlisting}
> +
> +The shared memory region with VIRTIO_GPU_SHM_ID_HOST_VISIBLE is referred as
> +the "host visible memory region".  The device MUST support the
> +VIRTIO_GPU_CMD_RESOURCE_MAP_BLOB and VIRTIO_GPU_CMD_RESOURCE_UNMAP_BLOB
> +if the host visible memory region is available.
> +
>  \subsection{Device Operation}\label{sec:Device Types / GPU Device / Device Operation}
>  
>  The virtio-gpu is based around the concept of resources private to the
> -host, the guest must DMA transfer into these resources. This is a
> -design requirement in order to interface with future 3D rendering. In
> -the unaccelerated 2D mode there is no support for DMA transfers from
> -resources, just to them.
> +host.  The guest must DMA transfer into these resources, unless shared memory
> +regions are supported. This is a design requirement in order to interface with
> +future 3D rendering. In the unaccelerated 2D mode there is no support for DMA
> +transfers from resources, just to them.
>  
>  Resources are initially simple 2D resources, consisting of a width,
>  height and format along with an identifier. The guest must then attach
> @@ -190,6 +208,8 @@ \subsubsection{Device Operation: Request header}\label{sec:Device Types / GPU De
>          VIRTIO_GPU_CMD_GET_EDID,
>          VIRTIO_GPU_CMD_RESOURCE_ASSIGN_UUID,
>          VIRTIO_GPU_CMD_RESOURCE_CREATE_BLOB,
> +        VIRTIO_GPU_CMD_RESOURCE_MAP_BLOB,
> +        VIRTIO_GPU_CMD_RESOURCE_UNMAP_BLOB,
>  
>          /* 3d commands (OpenGL) */
>          VIRTIO_GPU_CMD_CTX_CREATE = 0x0200,
> @@ -212,6 +232,7 @@ \subsubsection{Device Operation: Request header}\label{sec:Device Types / GPU De
>          VIRTIO_GPU_RESP_OK_CAPSET,
>          VIRTIO_GPU_RESP_OK_EDID,
>          VIRTIO_GPU_RESP_OK_RESOURCE_UUID,
> +        VIRTIO_GPU_RESP_OK_MAP_INFO,
>  
>          /* error responses */
>          VIRTIO_GPU_RESP_ERR_UNSPEC = 0x1200,
> @@ -599,6 +620,48 @@ \subsubsection{Device Operation: controlq}\label{sec:Device Types / GPU Device /
>  For host-only blob resources, transfer operations MAY synchronize
>  caches.
>  
> +\item[VIRTIO_GPU_CMD_RESOURCE_MAP_BLOB] maps a host-only
> +  blob resource into an offset in the host visible memory region. Request
> +  data is \field{struct virtio_gpu_resource_map_blob}.  Response type
> +  is VIRTIO_GPU_RESP_OK_MAP_INFO. Support is optional and negotiated
> +  using the VIRTIO_GPU_F_RESOURCE_BLOB feature flag and checking for
> +  the presence of the host visible memory region.
> +
> +\begin{lstlisting}
> +/* VIRTIO_GPU_CMD_RESOURCE_MAP_BLOB */
> +struct virtio_gpu_resource_map_blob {
> +        struct virtio_gpu_ctrl_hdr hdr;
> +        le32 resource_id;
> +        le32 padding;
> +        le64 offset;
> +};
> +
> +/* VIRTIO_GPU_RESP_OK_MAP_INFO */
> +#define VIRTIO_GPU_MAP_CACHE_MASK      0x0f
> +#define VIRTIO_GPU_MAP_CACHE_NONE      0x00
> +#define VIRTIO_GPU_MAP_CACHE_CACHED    0x01
> +#define VIRTIO_GPU_MAP_CACHE_UNCACHED  0x02
> +#define VIRTIO_GPU_MAP_CACHE_WC        0x03
> +struct virtio_gpu_resp_map_info {
> +        struct virtio_gpu_ctrl_hdr hdr;
> +        u32 map_info;
> +        u32 padding;
> +};
> +\end{lstlisting}
> +
> +\item[VIRTIO_GPU_CMD_RESOURCE_UNMAP_BLOB] unmaps a
> +  host-only blob resource from the host visible memory region. Request data
> +  is \field{struct virtio_gpu_resource_unmap_blob}.  Response type is
> +  VIRTIO_GPU_RESP_OK_NODATA.  Support is optional and negotiated
> +  using the VIRTIO_GPU_F_RESOURCE_BLOB feature flag and checking for
> +  the presence of the host visible memory region.
> +
> +struct virtio_gpu_resource_unmap_blob {
> +        struct virtio_gpu_ctrl_hdr hdr;
> +        le32 resource_id;
> +        le32 padding;
> +};
> +
>  \end{description}
>  
>  \subsubsection{Device Operation: controlq (3d)}\label{sec:Device Types / GPU Device / Device Operation / Device Operation: controlq (3d)}
> -- 
> 2.24.1
> 



[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]