2018-12-19 13:00:30

by Gerd Hoffmann

[permalink] [raw]
Subject: [PATCH 01/10] drm/virtio: log error responses

If we got an error response code from the host, print it to the log.

Signed-off-by: Gerd Hoffmann <[email protected]>
---
drivers/gpu/drm/virtio/virtgpu_vq.c | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/virtio/virtgpu_vq.c b/drivers/gpu/drm/virtio/virtgpu_vq.c
index e27c4aedb8..6bc2008b0d 100644
--- a/drivers/gpu/drm/virtio/virtgpu_vq.c
+++ b/drivers/gpu/drm/virtio/virtgpu_vq.c
@@ -192,8 +192,16 @@ void virtio_gpu_dequeue_ctrl_func(struct work_struct *work)

list_for_each_entry_safe(entry, tmp, &reclaim_list, list) {
resp = (struct virtio_gpu_ctrl_hdr *)entry->resp_buf;
- if (resp->type != cpu_to_le32(VIRTIO_GPU_RESP_OK_NODATA))
- DRM_DEBUG("response 0x%x\n", le32_to_cpu(resp->type));
+ if (resp->type != cpu_to_le32(VIRTIO_GPU_RESP_OK_NODATA)) {
+ if (resp->type >= cpu_to_le32(VIRTIO_GPU_RESP_ERR_UNSPEC)) {
+ struct virtio_gpu_ctrl_hdr *cmd;
+ cmd = (struct virtio_gpu_ctrl_hdr *)entry->buf;
+ DRM_ERROR("response 0x%x (command 0x%x)\n",
+ le32_to_cpu(resp->type),
+ le32_to_cpu(cmd->type));
+ } else
+ DRM_DEBUG("response 0x%x\n", le32_to_cpu(resp->type));
+ }
if (resp->flags & cpu_to_le32(VIRTIO_GPU_FLAG_FENCE)) {
u64 f = le64_to_cpu(resp->fence_id);

--
2.9.3



2018-12-21 16:06:37

by Oleksandr Andrushchenko

[permalink] [raw]
Subject: Re: [PATCH 01/10] drm/virtio: log error responses

On 12/19/18 2:26 PM, Gerd Hoffmann wrote:
> If we got an error response code from the host, print it to the log.
>
> Signed-off-by: Gerd Hoffmann <[email protected]>
Reviewed-by: Oleksandr Andrushchenko <[email protected]>
> ---
> drivers/gpu/drm/virtio/virtgpu_vq.c | 12 ++++++++++--
> 1 file changed, 10 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/virtio/virtgpu_vq.c b/drivers/gpu/drm/virtio/virtgpu_vq.c
> index e27c4aedb8..6bc2008b0d 100644
> --- a/drivers/gpu/drm/virtio/virtgpu_vq.c
> +++ b/drivers/gpu/drm/virtio/virtgpu_vq.c
> @@ -192,8 +192,16 @@ void virtio_gpu_dequeue_ctrl_func(struct work_struct *work)
>
> list_for_each_entry_safe(entry, tmp, &reclaim_list, list) {
> resp = (struct virtio_gpu_ctrl_hdr *)entry->resp_buf;
> - if (resp->type != cpu_to_le32(VIRTIO_GPU_RESP_OK_NODATA))
> - DRM_DEBUG("response 0x%x\n", le32_to_cpu(resp->type));
> + if (resp->type != cpu_to_le32(VIRTIO_GPU_RESP_OK_NODATA)) {
> + if (resp->type >= cpu_to_le32(VIRTIO_GPU_RESP_ERR_UNSPEC)) {
> + struct virtio_gpu_ctrl_hdr *cmd;
> + cmd = (struct virtio_gpu_ctrl_hdr *)entry->buf;
> + DRM_ERROR("response 0x%x (command 0x%x)\n",
> + le32_to_cpu(resp->type),
> + le32_to_cpu(cmd->type));
> + } else
> + DRM_DEBUG("response 0x%x\n", le32_to_cpu(resp->type));
> + }
> if (resp->flags & cpu_to_le32(VIRTIO_GPU_FLAG_FENCE)) {
> u64 f = le64_to_cpu(resp->fence_id);
>