Unverified Commit 014ea91f authored by openeuler-ci-bot's avatar openeuler-ci-bot Committed by Gitee
Browse files

!11726 drm/vmwgfx: Fix a deadlock in dma buf fence polling

parents b3982366 8aa35f43
Loading
Loading
Loading
Loading
+7 −9
Original line number Diff line number Diff line
@@ -32,7 +32,6 @@
#define VMW_FENCE_WRAP (1 << 31)

struct vmw_fence_manager {
	int num_fence_objects;
	struct vmw_private *dev_priv;
	spinlock_t lock;
	struct list_head fence_list;
@@ -113,13 +112,13 @@ static void vmw_fence_obj_destroy(struct dma_fence *f)
{
	struct vmw_fence_obj *fence =
		container_of(f, struct vmw_fence_obj, base);

	struct vmw_fence_manager *fman = fman_from_fence(fence);

	if (!list_empty(&fence->head)) {
		spin_lock(&fman->lock);
		list_del_init(&fence->head);
	--fman->num_fence_objects;
		spin_unlock(&fman->lock);
	}
	fence->destroy(fence);
}

@@ -353,7 +352,6 @@ static int vmw_fence_obj_init(struct vmw_fence_manager *fman,
		goto out_unlock;
	}
	list_add_tail(&fence->head, &fman->fence_list);
	++fman->num_fence_objects;

out_unlock:
	spin_unlock(&fman->lock);
@@ -402,7 +400,7 @@ static bool vmw_fence_goal_new_locked(struct vmw_fence_manager *fman,
{
	u32 goal_seqno;
	u32 *fifo_mem;
	struct vmw_fence_obj *fence;
	struct vmw_fence_obj *fence, *next_fence;

	if (likely(!fman->seqno_valid))
		return false;
@@ -413,7 +411,7 @@ static bool vmw_fence_goal_new_locked(struct vmw_fence_manager *fman,
		return false;

	fman->seqno_valid = false;
	list_for_each_entry(fence, &fman->fence_list, head) {
	list_for_each_entry_safe(fence, next_fence, &fman->fence_list, head) {
		if (!list_empty(&fence->seq_passed_actions)) {
			fman->seqno_valid = true;
			vmw_mmio_write(fence->base.seqno,