diff options
author | Ben Skeggs <bskeggs@redhat.com> | 2022-06-01 20:46:31 +1000 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2022-07-27 09:05:48 +1000 |
commit | a6fd8f936402c3bcc5ac6aed9cca8e73b5ca08f7 (patch) | |
tree | a672ce34eb30bf18dd356350bc75f54dda6d25e0 /drivers/gpu/drm/nouveau/nvkm/engine/disp/gv100.c | |
parent | 32dd9236698bcd2ffdb69954b167a851fd50182a (diff) |
drm/nouveau/disp: add supervisor mutex
Will be used to protect NVIF_CLASS_OUTP method calls from racing with
in-progress supervisor handling.
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Reviewed-by: Lyude Paul <lyude@redhat.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/nouveau/nvkm/engine/disp/gv100.c')
-rw-r--r-- | drivers/gpu/drm/nouveau/nvkm/engine/disp/gv100.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/gv100.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/gv100.c index 9106743a6368..6b9d49270fa7 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/gv100.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/gv100.c @@ -818,8 +818,10 @@ gv100_disp_super(struct work_struct *work) struct nvkm_subdev *subdev = &disp->engine.subdev; struct nvkm_device *device = subdev->device; struct nvkm_head *head; - u32 stat = nvkm_rd32(device, 0x6107a8); - u32 mask[4]; + u32 stat, mask[4]; + + mutex_lock(&disp->super.mutex); + stat = nvkm_rd32(device, 0x6107a8); nvkm_debug(subdev, "supervisor %d: %08x\n", ffs(disp->super.pending), stat); list_for_each_entry(head, &disp->heads, head) { @@ -864,7 +866,9 @@ gv100_disp_super(struct work_struct *work) list_for_each_entry(head, &disp->heads, head) nvkm_wr32(device, 0x6107ac + (head->id * 4), 0x00000000); + nvkm_wr32(device, 0x6107a8, 0x80000000); + mutex_unlock(&disp->super.mutex); } static void |