aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2014-12-03 04:35:05 -0500
committerDave Airlie <airlied@redhat.com>2014-12-03 04:35:05 -0500
commitd5b75dc01fa9c699aee5f82f5dbe508da438ff94 (patch)
treea9eca99789d07574a82f03647e73d3e64c7e1ef3
parent4fcd01d0f34645710ac92d5523e26019428b0806 (diff)
parentb8ccd1e490de8d9b9a968f859c003a10882ad8c8 (diff)
Merge branch 'vmwgfx-next' of git://people.freedesktop.org/~thomash/linux into drm-next
some vmware fixes. * 'vmwgfx-next' of git://people.freedesktop.org/~thomash/linux: drm/vmwgfx: (Re)bind shaders to MOBs with the correct offset drm/vmwgfx: Fix fence event code drm/vmwgfx: Don't use memory accounting for kernel-side fence objects drm/vmwgfx: Fix error printout on signals pending
-rw-r--r--drivers/gpu/drm/vmwgfx/vmwgfx_drv.c8
-rw-r--r--drivers/gpu/drm/vmwgfx/vmwgfx_fence.c39
-rw-r--r--drivers/gpu/drm/vmwgfx/vmwgfx_shader.c2
3 files changed, 15 insertions, 34 deletions
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
index db7621828bc7..7b5d22110f25 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
@@ -1062,8 +1062,12 @@ static long vmw_generic_ioctl(struct file *filp, unsigned int cmd,
1062 1062
1063 vmaster = vmw_master_check(dev, file_priv, flags); 1063 vmaster = vmw_master_check(dev, file_priv, flags);
1064 if (unlikely(IS_ERR(vmaster))) { 1064 if (unlikely(IS_ERR(vmaster))) {
1065 DRM_INFO("IOCTL ERROR %d\n", nr); 1065 ret = PTR_ERR(vmaster);
1066 return PTR_ERR(vmaster); 1066
1067 if (ret != -ERESTARTSYS)
1068 DRM_INFO("IOCTL ERROR Command %d, Error %ld.\n",
1069 nr, ret);
1070 return ret;
1067 } 1071 }
1068 1072
1069 ret = ioctl_func(filp, cmd, arg); 1073 ret = ioctl_func(filp, cmd, arg);
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c b/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c
index 197164fd7803..b7594cb758af 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c
@@ -545,35 +545,19 @@ void vmw_fence_obj_flush(struct vmw_fence_obj *fence)
545 545
546static void vmw_fence_destroy(struct vmw_fence_obj *fence) 546static void vmw_fence_destroy(struct vmw_fence_obj *fence)
547{ 547{
548 struct vmw_fence_manager *fman = fman_from_fence(fence);
549
550 fence_free(&fence->base); 548 fence_free(&fence->base);
551
552 /*
553 * Free kernel space accounting.
554 */
555 ttm_mem_global_free(vmw_mem_glob(fman->dev_priv),
556 fman->fence_size);
557} 549}
558 550
559int vmw_fence_create(struct vmw_fence_manager *fman, 551int vmw_fence_create(struct vmw_fence_manager *fman,
560 uint32_t seqno, 552 uint32_t seqno,
561 struct vmw_fence_obj **p_fence) 553 struct vmw_fence_obj **p_fence)
562{ 554{
563 struct ttm_mem_global *mem_glob = vmw_mem_glob(fman->dev_priv);
564 struct vmw_fence_obj *fence; 555 struct vmw_fence_obj *fence;
565 int ret; 556 int ret;
566 557
567 ret = ttm_mem_global_alloc(mem_glob, fman->fence_size,
568 false, false);
569 if (unlikely(ret != 0))
570 return ret;
571
572 fence = kzalloc(sizeof(*fence), GFP_KERNEL); 558 fence = kzalloc(sizeof(*fence), GFP_KERNEL);
573 if (unlikely(fence == NULL)) { 559 if (unlikely(fence == NULL))
574 ret = -ENOMEM; 560 return -ENOMEM;
575 goto out_no_object;
576 }
577 561
578 ret = vmw_fence_obj_init(fman, fence, seqno, 562 ret = vmw_fence_obj_init(fman, fence, seqno,
579 vmw_fence_destroy); 563 vmw_fence_destroy);
@@ -585,8 +569,6 @@ int vmw_fence_create(struct vmw_fence_manager *fman,
585 569
586out_err_init: 570out_err_init:
587 kfree(fence); 571 kfree(fence);
588out_no_object:
589 ttm_mem_global_free(mem_glob, fman->fence_size);
590 return ret; 572 return ret;
591} 573}
592 574
@@ -1105,6 +1087,8 @@ static int vmw_event_fence_action_create(struct drm_file *file_priv,
1105 if (ret != 0) 1087 if (ret != 0)
1106 goto out_no_queue; 1088 goto out_no_queue;
1107 1089
1090 return 0;
1091
1108out_no_queue: 1092out_no_queue:
1109 event->base.destroy(&event->base); 1093 event->base.destroy(&event->base);
1110out_no_event: 1094out_no_event:
@@ -1180,17 +1164,10 @@ int vmw_fence_event_ioctl(struct drm_device *dev, void *data,
1180 1164
1181 BUG_ON(fence == NULL); 1165 BUG_ON(fence == NULL);
1182 1166
1183 if (arg->flags & DRM_VMW_FE_FLAG_REQ_TIME) 1167 ret = vmw_event_fence_action_create(file_priv, fence,
1184 ret = vmw_event_fence_action_create(file_priv, fence, 1168 arg->flags,
1185 arg->flags, 1169 arg->user_data,
1186 arg->user_data, 1170 true);
1187 true);
1188 else
1189 ret = vmw_event_fence_action_create(file_priv, fence,
1190 arg->flags,
1191 arg->user_data,
1192 true);
1193
1194 if (unlikely(ret != 0)) { 1171 if (unlikely(ret != 0)) {
1195 if (ret != -ERESTARTSYS) 1172 if (ret != -ERESTARTSYS)
1196 DRM_ERROR("Failed to attach event to fence.\n"); 1173 DRM_ERROR("Failed to attach event to fence.\n");
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_shader.c b/drivers/gpu/drm/vmwgfx/vmwgfx_shader.c
index 8719fb3cccc9..6a4584a43aa6 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_shader.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_shader.c
@@ -198,7 +198,7 @@ static int vmw_gb_shader_bind(struct vmw_resource *res,
198 cmd->header.size = sizeof(cmd->body); 198 cmd->header.size = sizeof(cmd->body);
199 cmd->body.shid = res->id; 199 cmd->body.shid = res->id;
200 cmd->body.mobid = bo->mem.start; 200 cmd->body.mobid = bo->mem.start;
201 cmd->body.offsetInBytes = 0; 201 cmd->body.offsetInBytes = res->backup_offset;
202 res->backup_dirty = false; 202 res->backup_dirty = false;
203 vmw_fifo_commit(dev_priv, sizeof(*cmd)); 203 vmw_fifo_commit(dev_priv, sizeof(*cmd));
204 204