Commit d5b75dc0 authored by Dave Airlie's avatar Dave Airlie

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
parents 4fcd01d0 b8ccd1e4
...@@ -1062,8 +1062,12 @@ static long vmw_generic_ioctl(struct file *filp, unsigned int cmd, ...@@ -1062,8 +1062,12 @@ static long vmw_generic_ioctl(struct file *filp, unsigned int cmd,
vmaster = vmw_master_check(dev, file_priv, flags); vmaster = vmw_master_check(dev, file_priv, flags);
if (unlikely(IS_ERR(vmaster))) { if (unlikely(IS_ERR(vmaster))) {
DRM_INFO("IOCTL ERROR %d\n", nr); ret = PTR_ERR(vmaster);
return PTR_ERR(vmaster);
if (ret != -ERESTARTSYS)
DRM_INFO("IOCTL ERROR Command %d, Error %ld.\n",
nr, ret);
return ret;
} }
ret = ioctl_func(filp, cmd, arg); ret = ioctl_func(filp, cmd, arg);
......
...@@ -545,35 +545,19 @@ void vmw_fence_obj_flush(struct vmw_fence_obj *fence) ...@@ -545,35 +545,19 @@ void vmw_fence_obj_flush(struct vmw_fence_obj *fence)
static void vmw_fence_destroy(struct vmw_fence_obj *fence) static void vmw_fence_destroy(struct vmw_fence_obj *fence)
{ {
struct vmw_fence_manager *fman = fman_from_fence(fence);
fence_free(&fence->base); fence_free(&fence->base);
/*
* Free kernel space accounting.
*/
ttm_mem_global_free(vmw_mem_glob(fman->dev_priv),
fman->fence_size);
} }
int vmw_fence_create(struct vmw_fence_manager *fman, int vmw_fence_create(struct vmw_fence_manager *fman,
uint32_t seqno, uint32_t seqno,
struct vmw_fence_obj **p_fence) struct vmw_fence_obj **p_fence)
{ {
struct ttm_mem_global *mem_glob = vmw_mem_glob(fman->dev_priv);
struct vmw_fence_obj *fence; struct vmw_fence_obj *fence;
int ret; int ret;
ret = ttm_mem_global_alloc(mem_glob, fman->fence_size,
false, false);
if (unlikely(ret != 0))
return ret;
fence = kzalloc(sizeof(*fence), GFP_KERNEL); fence = kzalloc(sizeof(*fence), GFP_KERNEL);
if (unlikely(fence == NULL)) { if (unlikely(fence == NULL))
ret = -ENOMEM; return -ENOMEM;
goto out_no_object;
}
ret = vmw_fence_obj_init(fman, fence, seqno, ret = vmw_fence_obj_init(fman, fence, seqno,
vmw_fence_destroy); vmw_fence_destroy);
...@@ -585,8 +569,6 @@ int vmw_fence_create(struct vmw_fence_manager *fman, ...@@ -585,8 +569,6 @@ int vmw_fence_create(struct vmw_fence_manager *fman,
out_err_init: out_err_init:
kfree(fence); kfree(fence);
out_no_object:
ttm_mem_global_free(mem_glob, fman->fence_size);
return ret; return ret;
} }
...@@ -1105,6 +1087,8 @@ static int vmw_event_fence_action_create(struct drm_file *file_priv, ...@@ -1105,6 +1087,8 @@ static int vmw_event_fence_action_create(struct drm_file *file_priv,
if (ret != 0) if (ret != 0)
goto out_no_queue; goto out_no_queue;
return 0;
out_no_queue: out_no_queue:
event->base.destroy(&event->base); event->base.destroy(&event->base);
out_no_event: out_no_event:
...@@ -1180,17 +1164,10 @@ int vmw_fence_event_ioctl(struct drm_device *dev, void *data, ...@@ -1180,17 +1164,10 @@ int vmw_fence_event_ioctl(struct drm_device *dev, void *data,
BUG_ON(fence == NULL); BUG_ON(fence == NULL);
if (arg->flags & DRM_VMW_FE_FLAG_REQ_TIME) ret = vmw_event_fence_action_create(file_priv, fence,
ret = vmw_event_fence_action_create(file_priv, fence, arg->flags,
arg->flags, arg->user_data,
arg->user_data, true);
true);
else
ret = vmw_event_fence_action_create(file_priv, fence,
arg->flags,
arg->user_data,
true);
if (unlikely(ret != 0)) { if (unlikely(ret != 0)) {
if (ret != -ERESTARTSYS) if (ret != -ERESTARTSYS)
DRM_ERROR("Failed to attach event to fence.\n"); DRM_ERROR("Failed to attach event to fence.\n");
......
...@@ -198,7 +198,7 @@ static int vmw_gb_shader_bind(struct vmw_resource *res, ...@@ -198,7 +198,7 @@ static int vmw_gb_shader_bind(struct vmw_resource *res,
cmd->header.size = sizeof(cmd->body); cmd->header.size = sizeof(cmd->body);
cmd->body.shid = res->id; cmd->body.shid = res->id;
cmd->body.mobid = bo->mem.start; cmd->body.mobid = bo->mem.start;
cmd->body.offsetInBytes = 0; cmd->body.offsetInBytes = res->backup_offset;
res->backup_dirty = false; res->backup_dirty = false;
vmw_fifo_commit(dev_priv, sizeof(*cmd)); vmw_fifo_commit(dev_priv, sizeof(*cmd));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment