Skip to content

Commit 3f3bc81

Browse files
mairacanalgregkh
authored andcommitted
drm/v3d: Handle error from drm_sched_entity_init()
[ Upstream commit 8cf1bec ] drm_sched_entity_init() can fail but its return value is currently being ignored in v3d_open(). Check the return value and properly unwind on failure by destroying any already-initialized scheduler entities. Fixes: 57692c9 ("drm/v3d: Introduce a new DRM driver for Broadcom V3D V3.x+") Reviewed-by: Iago Toral Quiroga <itoral@igalia.com> Link: https://patch.msgid.link/20260306-v3d-reset-locking-improv-v3-1-49864fe00692@igalia.com Signed-off-by: Maíra Canal <mcanal@igalia.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
1 parent a01d904 commit 3f3bc81

1 file changed

Lines changed: 12 additions & 4 deletions

File tree

drivers/gpu/drm/v3d/v3d_drv.c

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ v3d_open(struct drm_device *dev, struct drm_file *file)
131131
struct v3d_dev *v3d = to_v3d_dev(dev);
132132
struct v3d_file_priv *v3d_priv;
133133
struct drm_gpu_scheduler *sched;
134-
int i;
134+
int i, ret;
135135

136136
v3d_priv = kzalloc_obj(*v3d_priv);
137137
if (!v3d_priv)
@@ -141,9 +141,11 @@ v3d_open(struct drm_device *dev, struct drm_file *file)
141141

142142
for (i = 0; i < V3D_MAX_QUEUES; i++) {
143143
sched = &v3d->queue[i].sched;
144-
drm_sched_entity_init(&v3d_priv->sched_entity[i],
145-
DRM_SCHED_PRIORITY_NORMAL, &sched,
146-
1, NULL);
144+
ret = drm_sched_entity_init(&v3d_priv->sched_entity[i],
145+
DRM_SCHED_PRIORITY_NORMAL, &sched,
146+
1, NULL);
147+
if (ret)
148+
goto err_sched;
147149

148150
memset(&v3d_priv->stats[i], 0, sizeof(v3d_priv->stats[i]));
149151
seqcount_init(&v3d_priv->stats[i].lock);
@@ -153,6 +155,12 @@ v3d_open(struct drm_device *dev, struct drm_file *file)
153155
file->driver_priv = v3d_priv;
154156

155157
return 0;
158+
159+
err_sched:
160+
for (i--; i >= 0; i--)
161+
drm_sched_entity_destroy(&v3d_priv->sched_entity[i]);
162+
kfree(v3d_priv);
163+
return ret;
156164
}
157165

158166
static void

0 commit comments

Comments
 (0)