drm/nouveau/ltc: serialise cbc operations with private mutex
authorBen Skeggs <bskeggs@redhat.com>
Wed, 2 Dec 2020 06:43:49 +0000 (16:43 +1000)
committerBen Skeggs <bskeggs@redhat.com>
Thu, 11 Feb 2021 00:14:12 +0000 (10:14 +1000)
nvkm_subdev.mutex is going away.

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Reviewed-by: Lyude Paul <lyude@redhat.com>
drivers/gpu/drm/nouveau/include/nvkm/subdev/ltc.h
drivers/gpu/drm/nouveau/nvkm/subdev/ltc/base.c

index d76f60d..18fc5ea 100644 (file)
@@ -13,6 +13,7 @@ struct nvkm_ltc {
        u32 ltc_nr;
        u32 lts_nr;
 
+       struct mutex mutex; /* serialises CBC operations */
        u32 num_tags;
        u32 tag_base;
        struct nvkm_memory *tag_ram;
index 2324217..d54957f 100644 (file)
@@ -33,10 +33,10 @@ nvkm_ltc_tags_clear(struct nvkm_device *device, u32 first, u32 count)
 
        BUG_ON((first > limit) || (limit >= ltc->num_tags));
 
-       mutex_lock(&ltc->subdev.mutex);
+       mutex_lock(&ltc->mutex);
        ltc->func->cbc_clear(ltc, first, limit);
        ltc->func->cbc_wait(ltc);
-       mutex_unlock(&ltc->subdev.mutex);
+       mutex_unlock(&ltc->mutex);
 }
 
 int
@@ -113,6 +113,7 @@ nvkm_ltc_dtor(struct nvkm_subdev *subdev)
 {
        struct nvkm_ltc *ltc = nvkm_ltc(subdev);
        nvkm_memory_unref(&ltc->tag_ram);
+       mutex_destroy(&ltc->mutex);
        return ltc;
 }
 
@@ -135,6 +136,7 @@ nvkm_ltc_new_(const struct nvkm_ltc_func *func, struct nvkm_device *device,
 
        nvkm_subdev_ctor(&nvkm_ltc, device, index, &ltc->subdev);
        ltc->func = func;
+       mutex_init(&ltc->mutex);
        ltc->zbc_min = 1; /* reserve 0 for disabled */
        ltc->zbc_max = min(func->zbc, NVKM_LTC_MAX_ZBC_CNT) - 1;
        return 0;