Skip to content

Commit 984f010

Browse files
committed
Merge tag 'drm-misc-fixes-2020-02-07' of git://anongit.freedesktop.org/drm/drm-misc into drm-fixes
Fixes for v5.6: - Revert allow_fb_modifiers in sun4i, as it causes a regression for DE2 and DE3. - Fix null pointer deref in drm_dp_mst_process_up_req(). Signed-off-by: Dave Airlie <[email protected]> From: Maarten Lankhorst <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
2 parents bb6d3fb + 7e0cf7e commit 984f010

File tree

6 files changed

+18
-3
lines changed

6 files changed

+18
-3
lines changed

drivers/gpu/drm/drm_dp_mst_topology.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3838,7 +3838,8 @@ drm_dp_mst_process_up_req(struct drm_dp_mst_topology_mgr *mgr,
38383838
else if (msg->req_type == DP_RESOURCE_STATUS_NOTIFY)
38393839
guid = msg->u.resource_stat.guid;
38403840

3841-
mstb = drm_dp_get_mst_branch_device_by_guid(mgr, guid);
3841+
if (guid)
3842+
mstb = drm_dp_get_mst_branch_device_by_guid(mgr, guid);
38423843
} else {
38433844
mstb = drm_dp_get_mst_branch_device(mgr, hdr->lct, hdr->rad);
38443845
}

drivers/gpu/drm/panfrost/panfrost_drv.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,7 @@ panfrost_lookup_bos(struct drm_device *dev,
166166
break;
167167
}
168168

169+
atomic_inc(&bo->gpu_usecount);
169170
job->mappings[i] = mapping;
170171
}
171172

drivers/gpu/drm/panfrost/panfrost_gem.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,12 @@ struct panfrost_gem_object {
3030
struct mutex lock;
3131
} mappings;
3232

33+
/*
34+
* Count the number of jobs referencing this BO so we don't let the
35+
* shrinker reclaim this object prematurely.
36+
*/
37+
atomic_t gpu_usecount;
38+
3339
bool noexec :1;
3440
bool is_heap :1;
3541
};

drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,9 @@ static bool panfrost_gem_purge(struct drm_gem_object *obj)
4141
struct drm_gem_shmem_object *shmem = to_drm_gem_shmem_obj(obj);
4242
struct panfrost_gem_object *bo = to_panfrost_bo(obj);
4343

44+
if (atomic_read(&bo->gpu_usecount))
45+
return false;
46+
4447
if (!mutex_trylock(&shmem->pages_lock))
4548
return false;
4649

drivers/gpu/drm/panfrost/panfrost_job.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -269,8 +269,13 @@ static void panfrost_job_cleanup(struct kref *ref)
269269
dma_fence_put(job->render_done_fence);
270270

271271
if (job->mappings) {
272-
for (i = 0; i < job->bo_count; i++)
272+
for (i = 0; i < job->bo_count; i++) {
273+
if (!job->mappings[i])
274+
break;
275+
276+
atomic_dec(&job->mappings[i]->obj->gpu_usecount);
273277
panfrost_gem_mapping_put(job->mappings[i]);
278+
}
274279
kvfree(job->mappings);
275280
}
276281

drivers/gpu/drm/sun4i/sun4i_drv.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,6 @@ static int sun4i_drv_bind(struct device *dev)
8585
}
8686

8787
drm_mode_config_init(drm);
88-
drm->mode_config.allow_fb_modifiers = true;
8988

9089
ret = component_bind_all(drm->dev, drm);
9190
if (ret) {

0 commit comments

Comments
 (0)