drm/nouveau: fix null pointer deref on pre-nv50 chipsets
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
This commit is contained in:
parent
24f246ac10
commit
bf08bcc6b7
1 changed files with 11 additions and 5 deletions
|
@ -870,16 +870,22 @@ void
|
||||||
nouveau_gpuobj_channel_takedown(struct nouveau_channel *chan)
|
nouveau_gpuobj_channel_takedown(struct nouveau_channel *chan)
|
||||||
{
|
{
|
||||||
struct drm_device *dev = chan->dev;
|
struct drm_device *dev = chan->dev;
|
||||||
|
struct drm_nouveau_private *dev_priv = dev->dev_private;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
NV_DEBUG(dev, "ch%d\n", chan->id);
|
NV_DEBUG(dev, "ch%d\n", chan->id);
|
||||||
|
|
||||||
|
if (dev_priv->card_type >= NV_50) {
|
||||||
|
struct nv50_display *disp = nv50_display(dev);
|
||||||
|
|
||||||
for (i = 0; i < 2; i++) {
|
for (i = 0; i < 2; i++) {
|
||||||
struct nv50_display_crtc *dispc = &nv50_display(dev)->crtc[i];
|
struct nv50_display_crtc *dispc = &disp->crtc[i];
|
||||||
nouveau_bo_vma_del(dispc->sem.bo, &chan->dispc_vma[i]);
|
nouveau_bo_vma_del(dispc->sem.bo, &chan->dispc_vma[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
nouveau_vm_ref(NULL, &chan->vm, chan->vm_pd);
|
nouveau_vm_ref(NULL, &chan->vm, chan->vm_pd);
|
||||||
nouveau_gpuobj_ref(NULL, &chan->vm_pd);
|
nouveau_gpuobj_ref(NULL, &chan->vm_pd);
|
||||||
|
}
|
||||||
|
|
||||||
if (drm_mm_initialized(&chan->ramin_heap))
|
if (drm_mm_initialized(&chan->ramin_heap))
|
||||||
drm_mm_takedown(&chan->ramin_heap);
|
drm_mm_takedown(&chan->ramin_heap);
|
||||||
|
|
Loading…
Add table
Reference in a new issue