Skip to content

Commit 6d16e47

Browse files
pelwellmairacanal
authored andcommitted
drm/v3d: Fix race-condition between DRM scheduler and IRQs
Link: #6624 Fixes: e4b5ccd ("drm/v3d: Ensure job pointer is set to NULL after job completion") Signed-off-by: Maíra Canal <[email protected]> Co-authored-by: Maíra Canal <[email protected]>
1 parent 527ec1f commit 6d16e47

File tree

1 file changed

+12
-4
lines changed

1 file changed

+12
-4
lines changed

Diff for: drivers/gpu/drm/v3d/v3d_irq.c

+12-4
Original file line numberDiff line numberDiff line change
@@ -105,8 +105,10 @@ v3d_irq(int irq, void *arg)
105105
v3d->gpu_queue_stats[V3D_BIN].last_exec_end = local_clock();
106106

107107
trace_v3d_bcl_irq(&v3d->drm, fence->seqno);
108-
dma_fence_signal(&fence->base);
108+
109109
v3d->bin_job = NULL;
110+
dma_fence_signal(&fence->base);
111+
110112
status = IRQ_HANDLED;
111113
}
112114

@@ -116,8 +118,10 @@ v3d_irq(int irq, void *arg)
116118
v3d->gpu_queue_stats[V3D_RENDER].last_exec_end = local_clock();
117119

118120
trace_v3d_rcl_irq(&v3d->drm, fence->seqno);
119-
dma_fence_signal(&fence->base);
121+
120122
v3d->render_job = NULL;
123+
dma_fence_signal(&fence->base);
124+
121125
status = IRQ_HANDLED;
122126
}
123127

@@ -128,8 +132,10 @@ v3d_irq(int irq, void *arg)
128132
v3d->gpu_queue_stats[V3D_CSD].last_exec_end = local_clock();
129133

130134
trace_v3d_csd_irq(&v3d->drm, fence->seqno);
131-
dma_fence_signal(&fence->base);
135+
132136
v3d->csd_job = NULL;
137+
dma_fence_signal(&fence->base);
138+
133139
status = IRQ_HANDLED;
134140
}
135141

@@ -166,8 +172,10 @@ v3d_hub_irq(int irq, void *arg)
166172
v3d->gpu_queue_stats[V3D_TFU].last_exec_end = local_clock();
167173

168174
trace_v3d_tfu_irq(&v3d->drm, fence->seqno);
169-
dma_fence_signal(&fence->base);
175+
170176
v3d->tfu_job = NULL;
177+
dma_fence_signal(&fence->base);
178+
171179
status = IRQ_HANDLED;
172180
}
173181

0 commit comments

Comments
 (0)