drm/nouveau/nvkm: fini object children in reverse order
authorBen Skeggs <bskeggs@redhat.com>
Thu, 25 May 2023 00:30:57 +0000 (10:30 +1000)
committerKarol Herbst <kherbst@redhat.com>
Thu, 6 Jul 2023 15:22:32 +0000 (17:22 +0200)
Turns out, we're currently tearing down the disp core channel *before*
the satellite channels (wndw, etc) during suspend.

This makes RM return NV_ERR_NOT_SUPPORTED on attempting to reallocate
the core channel on resume for some reason, but we probably shouldn't
be doing it on HW either.

Tear down children in the reverse of allocation order instead.

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Reviewed-by: Karol Herbst <kherbst@redhat.com>
Reviewed-by: Lyude Paul <lyude@redhat.com>
Signed-off-by: Karol Herbst <kherbst@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20230525003106.3853741-1-skeggsb@gmail.com
drivers/gpu/drm/nouveau/nvkm/core/object.c

index 301a5e5b5f7f9ca94b2a1817f05107cc9cdc490c..7c554c14e8841da1bb0374f25d9a47512c6f3765 100644 (file)
@@ -185,7 +185,7 @@ nvkm_object_fini(struct nvkm_object *object, bool suspend)
 
        nvif_debug(object, "%s children...\n", action);
        time = ktime_to_us(ktime_get());
-       list_for_each_entry(child, &object->tree, head) {
+       list_for_each_entry_reverse(child, &object->tree, head) {
                ret = nvkm_object_fini(child, suspend);
                if (ret && suspend)
                        goto fail_child;