winsys/virgl: always memset prior to ioctl
authorEmil Velikov <emil.l.velikov@gmail.com>
Wed, 28 Oct 2015 12:49:08 +0000 (12:49 +0000)
committerEmil Velikov <emil.l.velikov@gmail.com>
Fri, 30 Oct 2015 17:37:09 +0000 (17:37 +0000)
Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Reviewed-by: Dave Airlie <airlied@redhat.com>
src/gallium/winsys/virgl/drm/virgl_drm_winsys.c

index 11542f57962107d31b5cfa86280cd5f6333eeb69..d9b4d5810e620af0f922383a777f5bc1a266990d 100644 (file)
@@ -55,6 +55,7 @@ static void virgl_hw_res_destroy(struct virgl_drm_winsys *qdws,
       if (res->ptr)
          os_munmap(res->ptr, res->size);
 
+      memset(&args, 0, sizeof(args));
       args.handle = res->bo_handle;
       drmIoctl(qdws->fd, DRM_IOCTL_GEM_CLOSE, &args);
       FREE(res);
@@ -65,6 +66,7 @@ static boolean virgl_drm_resource_is_busy(struct virgl_drm_winsys *qdws, struct
    struct drm_virtgpu_3d_wait waitcmd;
    int ret;
 
+   memset(&waitcmd, 0, sizeof(waitcmd));
    waitcmd.handle = res->bo_handle;
    waitcmd.flags = VIRTGPU_WAIT_NOWAIT;
 
@@ -174,6 +176,7 @@ static struct virgl_hw_res *virgl_drm_winsys_resource_create(struct virgl_winsys
    if (!res)
       return NULL;
 
+   memset(&createcmd, 0, sizeof(createcmd));
    createcmd.target = target;
    createcmd.format = format;
    createcmd.bind = bind;
@@ -183,10 +186,8 @@ static struct virgl_hw_res *virgl_drm_winsys_resource_create(struct virgl_winsys
    createcmd.array_size = array_size;
    createcmd.last_level = last_level;
    createcmd.nr_samples = nr_samples;
-   createcmd.res_handle = 0;
    createcmd.stride = stride;
    createcmd.size = size;
-   createcmd.flags = 0;
 
    ret = drmIoctl(qdws->fd, DRM_IOCTL_VIRTGPU_RESOURCE_CREATE, &createcmd);
    if (ret != 0) {
@@ -237,6 +238,7 @@ virgl_bo_transfer_put(struct virgl_winsys *vws,
    struct drm_virtgpu_3d_transfer_to_host tohostcmd;
    int ret;
 
+   memset(&tohostcmd, 0, sizeof(tohostcmd));
    tohostcmd.bo_handle = res->bo_handle;
    tohostcmd.box = *(struct drm_virtgpu_3d_box *)box;
    tohostcmd.offset = buf_offset;
@@ -258,6 +260,7 @@ virgl_bo_transfer_get(struct virgl_winsys *vws,
    struct drm_virtgpu_3d_transfer_from_host fromhostcmd;
    int ret;
 
+   memset(&fromhostcmd, 0, sizeof(fromhostcmd));
    fromhostcmd.bo_handle = res->bo_handle;
    fromhostcmd.level = level;
    fromhostcmd.offset = buf_offset;
@@ -430,10 +433,10 @@ static boolean virgl_drm_winsys_resource_get_handle(struct virgl_winsys *qws,
 
    if (!res)
        return FALSE;
-   memset(&flink, 0, sizeof(flink));
 
    if (whandle->type == DRM_API_HANDLE_TYPE_SHARED) {
       if (!res->flinked) {
+         memset(&flink, 0, sizeof(flink));
          flink.handle = res->bo_handle;
 
          if (drmIoctl(qdws->fd, DRM_IOCTL_GEM_FLINK, &flink)) {
@@ -474,6 +477,7 @@ static void *virgl_drm_resource_map(struct virgl_winsys *qws, struct virgl_hw_re
    if (res->ptr)
       return res->ptr;
 
+   memset(&mmap_arg, 0, sizeof(mmap_arg));
    mmap_arg.handle = res->bo_handle;
    if (drmIoctl(qdws->fd, DRM_IOCTL_VIRTGPU_MAP, &mmap_arg))
       return NULL;
@@ -494,8 +498,8 @@ static void virgl_drm_resource_wait(struct virgl_winsys *qws, struct virgl_hw_re
    struct drm_virtgpu_3d_wait waitcmd;
    int ret;
 
+   memset(&waitcmd, 0, sizeof(waitcmd));
    waitcmd.handle = res->bo_handle;
-   waitcmd.flags = 0;
  again:
    ret = drmIoctl(qdws->fd, DRM_IOCTL_VIRTGPU_WAIT, &waitcmd);
    if (ret == -EAGAIN)