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 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);
	if (unlikely(IS_ERR(vmaster))) {
		DRM_INFO("IOCTL ERROR %d\n", nr);
		return PTR_ERR(vmaster);
		ret = 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);
+8 −31
Original line number 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)
{
	struct vmw_fence_manager *fman = fman_from_fence(fence);

	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,
		     uint32_t seqno,
		     struct vmw_fence_obj **p_fence)
{
	struct ttm_mem_global *mem_glob = vmw_mem_glob(fman->dev_priv);
	struct vmw_fence_obj *fence;
	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);
	if (unlikely(fence == NULL)) {
		ret = -ENOMEM;
		goto out_no_object;
	}
	if (unlikely(fence == NULL))
		return -ENOMEM;

	ret = vmw_fence_obj_init(fman, fence, seqno,
				 vmw_fence_destroy);
@@ -585,8 +569,6 @@ int vmw_fence_create(struct vmw_fence_manager *fman,

out_err_init:
	kfree(fence);
out_no_object:
	ttm_mem_global_free(mem_glob, fman->fence_size);
	return ret;
}

@@ -1105,6 +1087,8 @@ static int vmw_event_fence_action_create(struct drm_file *file_priv,
	if (ret != 0)
		goto out_no_queue;

	return 0;

out_no_queue:
	event->base.destroy(&event->base);
out_no_event:
@@ -1180,17 +1164,10 @@ int vmw_fence_event_ioctl(struct drm_device *dev, void *data,

	BUG_ON(fence == NULL);

	if (arg->flags & DRM_VMW_FE_FLAG_REQ_TIME)
	ret = vmw_event_fence_action_create(file_priv, fence,
					    arg->flags,
					    arg->user_data,
					    true);
	else
		ret = vmw_event_fence_action_create(file_priv, fence,
						    arg->flags,
						    arg->user_data,
						    true);

	if (unlikely(ret != 0)) {
		if (ret != -ERESTARTSYS)
			DRM_ERROR("Failed to attach event to fence.\n");
+1 −1
Original line number 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->body.shid = res->id;
	cmd->body.mobid = bo->mem.start;
	cmd->body.offsetInBytes = 0;
	cmd->body.offsetInBytes = res->backup_offset;
	res->backup_dirty = false;
	vmw_fifo_commit(dev_priv, sizeof(*cmd));