Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d5b75dc0 authored by Dave Airlie's avatar Dave Airlie
Browse files

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
Loading
Loading
Loading
Loading
+6 −2
Original line number Original line Diff line number Diff line
@@ -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);
+8 −31
Original line number Original line Diff line number Diff line
@@ -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,


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,
	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,


	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");
+1 −1
Original line number Original line Diff line number Diff line
@@ -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));