diff mbox series

[v2,03/20] vhost-user-gpu: use an extandable state enum for commands

Message ID 20210204105232.834642-4-marcandre.lureau@redhat.com (mailing list archive)
State New, archived
Headers show
Series Various vhost-user-gpu & UI fixes | expand

Commit Message

Marc-André Lureau Feb. 4, 2021, 10:52 a.m. UTC
From: Marc-André Lureau <marcandre.lureau@redhat.com>

Introduce a pending state for commands which aren't finished yet, but
are being handled. See following patch.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 contrib/vhost-user-gpu/vugpu.h          | 8 +++++++-
 contrib/vhost-user-gpu/vhost-user-gpu.c | 8 ++++----
 contrib/vhost-user-gpu/virgl.c          | 2 +-
 3 files changed, 12 insertions(+), 6 deletions(-)

Comments

Philippe Mathieu-Daudé Feb. 4, 2021, 11:26 a.m. UTC | #1
On 2/4/21 11:52 AM, marcandre.lureau@redhat.com wrote:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
> 
> Introduce a pending state for commands which aren't finished yet, but
> are being handled. See following patch.
> 
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
>  contrib/vhost-user-gpu/vugpu.h          | 8 +++++++-
>  contrib/vhost-user-gpu/vhost-user-gpu.c | 8 ++++----
>  contrib/vhost-user-gpu/virgl.c          | 2 +-
>  3 files changed, 12 insertions(+), 6 deletions(-)
> 
> diff --git a/contrib/vhost-user-gpu/vugpu.h b/contrib/vhost-user-gpu/vugpu.h
> index 86f3ac86aa..04d5615812 100644
> --- a/contrib/vhost-user-gpu/vugpu.h
> +++ b/contrib/vhost-user-gpu/vugpu.h
> @@ -129,12 +129,18 @@ typedef struct VuGpu {
>      QTAILQ_HEAD(, virtio_gpu_ctrl_command) fenceq;
>  } VuGpu;
>  
> +enum {
> +    VG_CMD_STATE_NEW,

Maybe VG_CMD_STATE_STARTING?

> +    VG_CMD_STATE_PENDING,

Maybe introduce VG_CMD_STATE_PENDING in the
patch using it.

> +    VG_CMD_STATE_FINISHED,
> +};

Can we use a typedef ...

> +
>  struct virtio_gpu_ctrl_command {
>      VuVirtqElement elem;
>      VuVirtq *vq;
>      struct virtio_gpu_ctrl_hdr cmd_hdr;
>      uint32_t error;
> -    bool finished;
> +    int state;

... and use it here?

Or directly declare in place:

       enum {
           VG_CMD_STATE_STARTING,
           VG_CMD_STATE_PENDING,
           VG_CMD_STATE_FINISHED,
       } state;

>      QTAILQ_ENTRY(virtio_gpu_ctrl_command) next;
>  };
>  

Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Philippe Mathieu-Daudé Feb. 4, 2021, 1:43 p.m. UTC | #2
On 2/4/21 12:26 PM, Philippe Mathieu-Daudé wrote:
> On 2/4/21 11:52 AM, marcandre.lureau@redhat.com wrote:
>> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>>
>> Introduce a pending state for commands which aren't finished yet, but
>> are being handled. See following patch.
>>
>> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
>> ---
>>  contrib/vhost-user-gpu/vugpu.h          | 8 +++++++-
>>  contrib/vhost-user-gpu/vhost-user-gpu.c | 8 ++++----
>>  contrib/vhost-user-gpu/virgl.c          | 2 +-
>>  3 files changed, 12 insertions(+), 6 deletions(-)
>>
>> diff --git a/contrib/vhost-user-gpu/vugpu.h b/contrib/vhost-user-gpu/vugpu.h
>> index 86f3ac86aa..04d5615812 100644
>> --- a/contrib/vhost-user-gpu/vugpu.h
>> +++ b/contrib/vhost-user-gpu/vugpu.h
>> @@ -129,12 +129,18 @@ typedef struct VuGpu {
>>      QTAILQ_HEAD(, virtio_gpu_ctrl_command) fenceq;
>>  } VuGpu;
>>  
>> +enum {
>> +    VG_CMD_STATE_NEW,
> 
> Maybe VG_CMD_STATE_STARTING?
> 
>> +    VG_CMD_STATE_PENDING,
> 
> Maybe introduce VG_CMD_STATE_PENDING in the
> patch using it.
> 
>> +    VG_CMD_STATE_FINISHED,
>> +};
> 
> Can we use a typedef ...
> 
>> +
>>  struct virtio_gpu_ctrl_command {
>>      VuVirtqElement elem;
>>      VuVirtq *vq;
>>      struct virtio_gpu_ctrl_hdr cmd_hdr;
>>      uint32_t error;
>> -    bool finished;
>> +    int state;
> 
> ... and use it here?
> 
> Or directly declare in place:
> 
>        enum {
>            VG_CMD_STATE_STARTING,
>            VG_CMD_STATE_PENDING,
>            VG_CMD_STATE_FINISHED,
>        } state;
> 
>>      QTAILQ_ENTRY(virtio_gpu_ctrl_command) next;
>>  };
>>  
> 
> Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>

Since Gerd was willing to queue v1, feel free to ignore my
comments at this point. R-b stands.
diff mbox series

Patch

diff --git a/contrib/vhost-user-gpu/vugpu.h b/contrib/vhost-user-gpu/vugpu.h
index 86f3ac86aa..04d5615812 100644
--- a/contrib/vhost-user-gpu/vugpu.h
+++ b/contrib/vhost-user-gpu/vugpu.h
@@ -129,12 +129,18 @@  typedef struct VuGpu {
     QTAILQ_HEAD(, virtio_gpu_ctrl_command) fenceq;
 } VuGpu;
 
+enum {
+    VG_CMD_STATE_NEW,
+    VG_CMD_STATE_PENDING,
+    VG_CMD_STATE_FINISHED,
+};
+
 struct virtio_gpu_ctrl_command {
     VuVirtqElement elem;
     VuVirtq *vq;
     struct virtio_gpu_ctrl_hdr cmd_hdr;
     uint32_t error;
-    bool finished;
+    int state;
     QTAILQ_ENTRY(virtio_gpu_ctrl_command) next;
 };
 
diff --git a/contrib/vhost-user-gpu/vhost-user-gpu.c b/contrib/vhost-user-gpu/vhost-user-gpu.c
index 85c16404fb..7dcc02966c 100644
--- a/contrib/vhost-user-gpu/vhost-user-gpu.c
+++ b/contrib/vhost-user-gpu/vhost-user-gpu.c
@@ -246,7 +246,7 @@  vg_ctrl_response(VuGpu *g,
     }
     vu_queue_push(&g->dev.parent, cmd->vq, &cmd->elem, s);
     vu_queue_notify(&g->dev.parent, cmd->vq);
-    cmd->finished = true;
+    cmd->state = VG_CMD_STATE_FINISHED;
 }
 
 void
@@ -800,7 +800,7 @@  vg_process_cmd(VuGpu *vg, struct virtio_gpu_ctrl_command *cmd)
         cmd->error = VIRTIO_GPU_RESP_ERR_UNSPEC;
         break;
     }
-    if (!cmd->finished) {
+    if (cmd->state == VG_CMD_STATE_NEW) {
         vg_ctrl_response_nodata(vg, cmd, cmd->error ? cmd->error :
                                 VIRTIO_GPU_RESP_OK_NODATA);
     }
@@ -825,7 +825,7 @@  vg_handle_ctrl(VuDev *dev, int qidx)
         }
         cmd->vq = vq;
         cmd->error = 0;
-        cmd->finished = false;
+        cmd->state = VG_CMD_STATE_NEW;
 
         len = iov_to_buf(cmd->elem.out_sg, cmd->elem.out_num,
                          0, &cmd->cmd_hdr, sizeof(cmd->cmd_hdr));
@@ -844,7 +844,7 @@  vg_handle_ctrl(VuDev *dev, int qidx)
             vg_process_cmd(vg, cmd);
         }
 
-        if (!cmd->finished) {
+        if (cmd->state != VG_CMD_STATE_FINISHED) {
             QTAILQ_INSERT_TAIL(&vg->fenceq, cmd, next);
             vg->inflight++;
         } else {
diff --git a/contrib/vhost-user-gpu/virgl.c b/contrib/vhost-user-gpu/virgl.c
index e647278052..8bb3c563d9 100644
--- a/contrib/vhost-user-gpu/virgl.c
+++ b/contrib/vhost-user-gpu/virgl.c
@@ -482,7 +482,7 @@  void vg_virgl_process_cmd(VuGpu *g, struct virtio_gpu_ctrl_command *cmd)
         break;
     }
 
-    if (cmd->finished) {
+    if (cmd->state != VG_CMD_STATE_NEW) {
         return;
     }