drm/nouveau/bar: prevent BAR2 mapping of objects during destructor
authorBen Skeggs <bskeggs@redhat.com>
Tue, 31 Oct 2017 17:56:19 +0000 (03:56 +1000)
committerBen Skeggs <bskeggs@redhat.com>
Thu, 2 Nov 2017 03:32:18 +0000 (13:32 +1000)
GP100's page table nests a lot more deeply than the GF100-compatible
layout we're currently using, which means our hackish-but-simple way
of dealing with BAR2 VMM teardown won't work anymore.

In order to sanely handle the chicken-and-egg (BAR2's PTs get mapped
into themselves) problem, we need prevent page tables getting mapped
back into BAR2 during the destruction of its VMM.

To do this, we simply key off the state that's now maintained by the
BAR2 init/fini functions.

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
drivers/gpu/drm/nouveau/nvkm/subdev/bar/base.c

index d600aafae315df1074b53f638f11afb5f6d59996..c8cb8b8b132323b4db5c8ae2bdd1eef2bc3b3c13 100644 (file)
@@ -43,7 +43,7 @@ nvkm_bar_bar2_vmm(struct nvkm_device *device)
         * to know when object access needs to go through the BAR0 window.
         */
        struct nvkm_bar *bar = device->bar;
-       if (bar && bar->func->bar2.vmm && bar->subdev.oneinit)
+       if (bar && bar->bar2)
                return bar->func->bar2.vmm(bar);
        return NULL;
 }