Commit a6419360 authored by Ben Skeggs's avatar Ben Skeggs
Browse files

drm/nouveau/fifo: private mutex



nvkm_subdev.mutex is going away.

Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
Reviewed-by: default avatarLyude Paul <lyude@redhat.com>
parent bfa7f6a6
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -40,6 +40,7 @@ struct nvkm_fifo {
	int nr;
	struct list_head chan;
	spinlock_t lock;
	struct mutex mutex;

	struct nvkm_event uevent; /* async user trigger */
	struct nvkm_event cevent; /* channel creation event */
+2 −0
Original line number Diff line number Diff line
@@ -334,6 +334,7 @@ nvkm_fifo_dtor(struct nvkm_engine *engine)
	nvkm_event_fini(&fifo->kevent);
	nvkm_event_fini(&fifo->cevent);
	nvkm_event_fini(&fifo->uevent);
	mutex_destroy(&fifo->mutex);
	return data;
}

@@ -358,6 +359,7 @@ nvkm_fifo_ctor(const struct nvkm_fifo_func *func, struct nvkm_device *device,
	fifo->func = func;
	INIT_LIST_HEAD(&fifo->chan);
	spin_lock_init(&fifo->lock);
	mutex_init(&fifo->mutex);

	if (WARN_ON(fifo->nr > NVKM_FIFO_CHID_NR))
		fifo->nr = NVKM_FIFO_CHID_NR;
+4 −4
Original line number Diff line number Diff line
@@ -38,9 +38,9 @@ nv04_fifo_dma_object_dtor(struct nvkm_fifo_chan *base, int cookie)
	struct nv04_fifo_chan *chan = nv04_fifo_chan(base);
	struct nvkm_instmem *imem = chan->fifo->base.engine.subdev.device->imem;

	mutex_lock(&chan->fifo->base.engine.subdev.mutex);
	mutex_lock(&chan->fifo->base.mutex);
	nvkm_ramht_remove(imem->ramht, cookie);
	mutex_unlock(&chan->fifo->base.engine.subdev.mutex);
	mutex_unlock(&chan->fifo->base.mutex);
}

static int
@@ -63,10 +63,10 @@ nv04_fifo_dma_object_ctor(struct nvkm_fifo_chan *base,
		return -EINVAL;
	}

	mutex_lock(&chan->fifo->base.engine.subdev.mutex);
	mutex_lock(&chan->fifo->base.mutex);
	hash = nvkm_ramht_insert(imem->ramht, object, chan->base.chid, 4,
				 handle, context);
	mutex_unlock(&chan->fifo->base.engine.subdev.mutex);
	mutex_unlock(&chan->fifo->base.mutex);
	return hash;
}

+2 −2
Original line number Diff line number Diff line
@@ -159,10 +159,10 @@ nv40_fifo_dma_object_ctor(struct nvkm_fifo_chan *base,
		return -EINVAL;
	}

	mutex_lock(&chan->fifo->base.engine.subdev.mutex);
	mutex_lock(&chan->fifo->base.mutex);
	hash = nvkm_ramht_insert(imem->ramht, object, chan->base.chid, 4,
				 handle, context);
	mutex_unlock(&chan->fifo->base.engine.subdev.mutex);
	mutex_unlock(&chan->fifo->base.mutex);
	return hash;
}

+7 −7
Original line number Diff line number Diff line
@@ -57,7 +57,7 @@ gf100_fifo_runlist_commit(struct gf100_fifo *fifo)
	int nr = 0;
	int target;

	mutex_lock(&subdev->mutex);
	mutex_lock(&fifo->base.mutex);
	cur = fifo->runlist.mem[fifo->runlist.active];
	fifo->runlist.active = !fifo->runlist.active;

@@ -73,7 +73,7 @@ gf100_fifo_runlist_commit(struct gf100_fifo *fifo)
	case NVKM_MEM_TARGET_VRAM: target = 0; break;
	case NVKM_MEM_TARGET_NCOH: target = 3; break;
	default:
		mutex_unlock(&subdev->mutex);
		mutex_unlock(&fifo->base.mutex);
		WARN_ON(1);
		return;
	}
@@ -86,23 +86,23 @@ gf100_fifo_runlist_commit(struct gf100_fifo *fifo)
			       !(nvkm_rd32(device, 0x00227c) & 0x00100000),
			       msecs_to_jiffies(2000)) == 0)
		nvkm_error(subdev, "runlist update timeout\n");
	mutex_unlock(&subdev->mutex);
	mutex_unlock(&fifo->base.mutex);
}

void
gf100_fifo_runlist_remove(struct gf100_fifo *fifo, struct gf100_fifo_chan *chan)
{
	mutex_lock(&fifo->base.engine.subdev.mutex);
	mutex_lock(&fifo->base.mutex);
	list_del_init(&chan->head);
	mutex_unlock(&fifo->base.engine.subdev.mutex);
	mutex_unlock(&fifo->base.mutex);
}

void
gf100_fifo_runlist_insert(struct gf100_fifo *fifo, struct gf100_fifo_chan *chan)
{
	mutex_lock(&fifo->base.engine.subdev.mutex);
	mutex_lock(&fifo->base.mutex);
	list_add_tail(&chan->head, &fifo->chan);
	mutex_unlock(&fifo->base.engine.subdev.mutex);
	mutex_unlock(&fifo->base.mutex);
}

static inline int
Loading