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
This commit is contained in:
commit
7c2b134110
|
@ -214,7 +214,6 @@ nouveau_bo_new(struct nouveau_cli *cli, u64 size, int align,
|
|||
INIT_LIST_HEAD(&nvbo->entry);
|
||||
INIT_LIST_HEAD(&nvbo->vma_list);
|
||||
nvbo->bo.bdev = &drm->ttm.bdev;
|
||||
nvbo->cli = cli;
|
||||
|
||||
/* This is confusing, and doesn't actually mean we want an uncached
|
||||
* mapping, but is what NOUVEAU_GEM_DOMAIN_COHERENT gets translated
|
||||
|
|
|
@ -26,8 +26,6 @@ struct nouveau_bo {
|
|||
|
||||
struct list_head vma_list;
|
||||
|
||||
struct nouveau_cli *cli;
|
||||
|
||||
unsigned contig:1;
|
||||
unsigned page:5;
|
||||
unsigned kind:8;
|
||||
|
|
|
@ -63,7 +63,7 @@ nouveau_vram_manager_new(struct ttm_mem_type_manager *man,
|
|||
struct ttm_mem_reg *reg)
|
||||
{
|
||||
struct nouveau_bo *nvbo = nouveau_bo(bo);
|
||||
struct nouveau_drm *drm = nvbo->cli->drm;
|
||||
struct nouveau_drm *drm = nouveau_bdev(bo->bdev);
|
||||
struct nouveau_mem *mem;
|
||||
int ret;
|
||||
|
||||
|
@ -103,7 +103,7 @@ nouveau_gart_manager_new(struct ttm_mem_type_manager *man,
|
|||
struct ttm_mem_reg *reg)
|
||||
{
|
||||
struct nouveau_bo *nvbo = nouveau_bo(bo);
|
||||
struct nouveau_drm *drm = nvbo->cli->drm;
|
||||
struct nouveau_drm *drm = nouveau_bdev(bo->bdev);
|
||||
struct nouveau_mem *mem;
|
||||
int ret;
|
||||
|
||||
|
@ -131,7 +131,7 @@ nv04_gart_manager_new(struct ttm_mem_type_manager *man,
|
|||
struct ttm_mem_reg *reg)
|
||||
{
|
||||
struct nouveau_bo *nvbo = nouveau_bo(bo);
|
||||
struct nouveau_drm *drm = nvbo->cli->drm;
|
||||
struct nouveau_drm *drm = nouveau_bdev(bo->bdev);
|
||||
struct nouveau_mem *mem;
|
||||
int ret;
|
||||
|
||||
|
|
|
@ -3264,10 +3264,11 @@ nv50_mstm_destroy_connector(struct drm_dp_mst_topology_mgr *mgr,
|
|||
|
||||
drm_connector_unregister(&mstc->connector);
|
||||
|
||||
drm_modeset_lock_all(drm->dev);
|
||||
drm_fb_helper_remove_one_connector(&drm->fbcon->helper, &mstc->connector);
|
||||
|
||||
drm_modeset_lock(&drm->dev->mode_config.connection_mutex, NULL);
|
||||
mstc->port = NULL;
|
||||
drm_modeset_unlock_all(drm->dev);
|
||||
drm_modeset_unlock(&drm->dev->mode_config.connection_mutex);
|
||||
|
||||
drm_connector_unreference(&mstc->connector);
|
||||
}
|
||||
|
@ -3277,9 +3278,7 @@ nv50_mstm_register_connector(struct drm_connector *connector)
|
|||
{
|
||||
struct nouveau_drm *drm = nouveau_drm(connector->dev);
|
||||
|
||||
drm_modeset_lock_all(drm->dev);
|
||||
drm_fb_helper_add_one_connector(&drm->fbcon->helper, connector);
|
||||
drm_modeset_unlock_all(drm->dev);
|
||||
|
||||
drm_connector_register(connector);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue