提交 9d59e8a1 编写于 作者: B Ben Skeggs

drm/nouveau: require explicit unmap of kmapped bos

Signed-off-by: NBen Skeggs <bskeggs@redhat.com>
上级 e694438d
...@@ -58,8 +58,6 @@ nouveau_bo_del_ttm(struct ttm_buffer_object *bo) ...@@ -58,8 +58,6 @@ nouveau_bo_del_ttm(struct ttm_buffer_object *bo)
struct drm_device *dev = dev_priv->dev; struct drm_device *dev = dev_priv->dev;
struct nouveau_bo *nvbo = nouveau_bo(bo); struct nouveau_bo *nvbo = nouveau_bo(bo);
ttm_bo_kunmap(&nvbo->kmap);
if (unlikely(nvbo->gem)) if (unlikely(nvbo->gem))
DRM_ERROR("bo %p still attached to GEM object\n", bo); DRM_ERROR("bo %p still attached to GEM object\n", bo);
...@@ -305,7 +303,8 @@ nouveau_bo_map(struct nouveau_bo *nvbo) ...@@ -305,7 +303,8 @@ nouveau_bo_map(struct nouveau_bo *nvbo)
void void
nouveau_bo_unmap(struct nouveau_bo *nvbo) nouveau_bo_unmap(struct nouveau_bo *nvbo)
{ {
ttm_bo_kunmap(&nvbo->kmap); if (nvbo)
ttm_bo_kunmap(&nvbo->kmap);
} }
u16 u16
......
...@@ -310,6 +310,7 @@ nouveau_channel_free(struct nouveau_channel *chan) ...@@ -310,6 +310,7 @@ nouveau_channel_free(struct nouveau_channel *chan)
/* Release the channel's resources */ /* Release the channel's resources */
nouveau_gpuobj_ref_del(dev, &chan->pushbuf); nouveau_gpuobj_ref_del(dev, &chan->pushbuf);
if (chan->pushbuf_bo) { if (chan->pushbuf_bo) {
nouveau_bo_unmap(chan->pushbuf_bo);
nouveau_bo_unpin(chan->pushbuf_bo); nouveau_bo_unpin(chan->pushbuf_bo);
nouveau_bo_ref(NULL, &chan->pushbuf_bo); nouveau_bo_ref(NULL, &chan->pushbuf_bo);
} }
......
...@@ -718,6 +718,7 @@ static void nv_crtc_destroy(struct drm_crtc *crtc) ...@@ -718,6 +718,7 @@ static void nv_crtc_destroy(struct drm_crtc *crtc)
drm_crtc_cleanup(crtc); drm_crtc_cleanup(crtc);
nouveau_bo_unmap(nv_crtc->cursor.nvbo);
nouveau_bo_ref(NULL, &nv_crtc->cursor.nvbo); nouveau_bo_ref(NULL, &nv_crtc->cursor.nvbo);
kfree(nv_crtc); kfree(nv_crtc);
} }
......
...@@ -338,7 +338,9 @@ nv50_crtc_destroy(struct drm_crtc *crtc) ...@@ -338,7 +338,9 @@ nv50_crtc_destroy(struct drm_crtc *crtc)
nv50_cursor_fini(nv_crtc); nv50_cursor_fini(nv_crtc);
nouveau_bo_unmap(nv_crtc->lut.nvbo);
nouveau_bo_ref(NULL, &nv_crtc->lut.nvbo); nouveau_bo_ref(NULL, &nv_crtc->lut.nvbo);
nouveau_bo_unmap(nv_crtc->cursor.nvbo);
nouveau_bo_ref(NULL, &nv_crtc->cursor.nvbo); nouveau_bo_ref(NULL, &nv_crtc->cursor.nvbo);
kfree(nv_crtc->mode); kfree(nv_crtc->mode);
kfree(nv_crtc); kfree(nv_crtc);
......
...@@ -42,6 +42,7 @@ nv50_evo_channel_del(struct nouveau_channel **pchan) ...@@ -42,6 +42,7 @@ nv50_evo_channel_del(struct nouveau_channel **pchan)
*pchan = NULL; *pchan = NULL;
nouveau_gpuobj_channel_takedown(chan); nouveau_gpuobj_channel_takedown(chan);
nouveau_bo_unmap(chan->pushbuf_bo);
nouveau_bo_ref(NULL, &chan->pushbuf_bo); nouveau_bo_ref(NULL, &chan->pushbuf_bo);
if (chan->user) if (chan->user)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册