diff options
| author | Dave Airlie <airlied@redhat.com> | 2014-12-03 04:35:05 -0500 |
|---|---|---|
| committer | Dave Airlie <airlied@redhat.com> | 2014-12-03 04:35:05 -0500 |
| commit | d5b75dc01fa9c699aee5f82f5dbe508da438ff94 (patch) | |
| tree | a9eca99789d07574a82f03647e73d3e64c7e1ef3 | |
| parent | 4fcd01d0f34645710ac92d5523e26019428b0806 (diff) | |
| parent | b8ccd1e490de8d9b9a968f859c003a10882ad8c8 (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.c | 8 | ||||
| -rw-r--r-- | drivers/gpu/drm/vmwgfx/vmwgfx_fence.c | 39 | ||||
| -rw-r--r-- | drivers/gpu/drm/vmwgfx/vmwgfx_shader.c | 2 |
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 | ||
| 546 | static void vmw_fence_destroy(struct vmw_fence_obj *fence) | 546 | static 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 | ||
| 559 | int vmw_fence_create(struct vmw_fence_manager *fman, | 551 | int 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 | ||
| 586 | out_err_init: | 570 | out_err_init: |
| 587 | kfree(fence); | 571 | kfree(fence); |
| 588 | out_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 | |||
| 1108 | out_no_queue: | 1092 | out_no_queue: |
| 1109 | event->base.destroy(&event->base); | 1093 | event->base.destroy(&event->base); |
| 1110 | out_no_event: | 1094 | out_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 | ||
