Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

drm/v3d: Handle error from drm_sched_entity_init()

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: 57692c94dcbe ("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>

+12 -4
+12 -4
drivers/gpu/drm/v3d/v3d_drv.c
··· 131 131 struct v3d_dev *v3d = to_v3d_dev(dev); 132 132 struct v3d_file_priv *v3d_priv; 133 133 struct drm_gpu_scheduler *sched; 134 - int i; 134 + int i, ret; 135 135 136 136 v3d_priv = kzalloc_obj(*v3d_priv); 137 137 if (!v3d_priv) ··· 141 141 142 142 for (i = 0; i < V3D_MAX_QUEUES; i++) { 143 143 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; 147 149 148 150 memset(&v3d_priv->stats[i], 0, sizeof(v3d_priv->stats[i])); 149 151 seqcount_init(&v3d_priv->stats[i].lock); ··· 155 153 file->driver_priv = v3d_priv; 156 154 157 155 return 0; 156 + 157 + err_sched: 158 + for (i--; i >= 0; i--) 159 + drm_sched_entity_destroy(&v3d_priv->sched_entity[i]); 160 + kfree(v3d_priv); 161 + return ret; 158 162 } 159 163 160 164 static void