Skip to content

Commit 7c2b134

Browse files
committed
Merge branch 'linux-4.17' of git://github.com/skeggsb/linux into drm-fixes
Two nouveau crasher/deadlock fixes. * 'linux-4.17' of git://github.com/skeggsb/linux: drm/nouveau: Fix deadlock in nv50_mstm_register_connector() drm/nouveau/ttm: don't dereference nvbo::cli, it can outlive client
2 parents 5c0e0b4 + 352672d commit 7c2b134

File tree

4 files changed

+6
-10
lines changed

4 files changed

+6
-10
lines changed

drivers/gpu/drm/nouveau/nouveau_bo.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,6 @@ nouveau_bo_new(struct nouveau_cli *cli, u64 size, int align,
214214
INIT_LIST_HEAD(&nvbo->entry);
215215
INIT_LIST_HEAD(&nvbo->vma_list);
216216
nvbo->bo.bdev = &drm->ttm.bdev;
217-
nvbo->cli = cli;
218217

219218
/* This is confusing, and doesn't actually mean we want an uncached
220219
* mapping, but is what NOUVEAU_GEM_DOMAIN_COHERENT gets translated

drivers/gpu/drm/nouveau/nouveau_bo.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,6 @@ struct nouveau_bo {
2626

2727
struct list_head vma_list;
2828

29-
struct nouveau_cli *cli;
30-
3129
unsigned contig:1;
3230
unsigned page:5;
3331
unsigned kind:8;

drivers/gpu/drm/nouveau/nouveau_ttm.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ nouveau_vram_manager_new(struct ttm_mem_type_manager *man,
6363
struct ttm_mem_reg *reg)
6464
{
6565
struct nouveau_bo *nvbo = nouveau_bo(bo);
66-
struct nouveau_drm *drm = nvbo->cli->drm;
66+
struct nouveau_drm *drm = nouveau_bdev(bo->bdev);
6767
struct nouveau_mem *mem;
6868
int ret;
6969

@@ -103,7 +103,7 @@ nouveau_gart_manager_new(struct ttm_mem_type_manager *man,
103103
struct ttm_mem_reg *reg)
104104
{
105105
struct nouveau_bo *nvbo = nouveau_bo(bo);
106-
struct nouveau_drm *drm = nvbo->cli->drm;
106+
struct nouveau_drm *drm = nouveau_bdev(bo->bdev);
107107
struct nouveau_mem *mem;
108108
int ret;
109109

@@ -131,7 +131,7 @@ nv04_gart_manager_new(struct ttm_mem_type_manager *man,
131131
struct ttm_mem_reg *reg)
132132
{
133133
struct nouveau_bo *nvbo = nouveau_bo(bo);
134-
struct nouveau_drm *drm = nvbo->cli->drm;
134+
struct nouveau_drm *drm = nouveau_bdev(bo->bdev);
135135
struct nouveau_mem *mem;
136136
int ret;
137137

drivers/gpu/drm/nouveau/nv50_display.c

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3264,10 +3264,11 @@ nv50_mstm_destroy_connector(struct drm_dp_mst_topology_mgr *mgr,
32643264

32653265
drm_connector_unregister(&mstc->connector);
32663266

3267-
drm_modeset_lock_all(drm->dev);
32683267
drm_fb_helper_remove_one_connector(&drm->fbcon->helper, &mstc->connector);
3268+
3269+
drm_modeset_lock(&drm->dev->mode_config.connection_mutex, NULL);
32693270
mstc->port = NULL;
3270-
drm_modeset_unlock_all(drm->dev);
3271+
drm_modeset_unlock(&drm->dev->mode_config.connection_mutex);
32713272

32723273
drm_connector_unreference(&mstc->connector);
32733274
}
@@ -3277,9 +3278,7 @@ nv50_mstm_register_connector(struct drm_connector *connector)
32773278
{
32783279
struct nouveau_drm *drm = nouveau_drm(connector->dev);
32793280

3280-
drm_modeset_lock_all(drm->dev);
32813281
drm_fb_helper_add_one_connector(&drm->fbcon->helper, connector);
3282-
drm_modeset_unlock_all(drm->dev);
32833282

32843283
drm_connector_register(connector);
32853284
}

0 commit comments

Comments
 (0)