]> www.infradead.org Git - nvme.git/commitdiff
nouveau: find the smallest page allocation to cover a buffer alloc.
authorDave Airlie <airlied@redhat.com>
Fri, 11 Aug 2023 03:15:20 +0000 (13:15 +1000)
committerDanilo Krummrich <dakr@redhat.com>
Wed, 29 Nov 2023 02:03:55 +0000 (03:03 +0100)
With the new uapi we don't have the comp flags on the allocation,
so we shouldn't be using the first size that works, we should be
iterating until we get the correct one.

This reduces allocations from 2MB to 64k in lots of places.

Fixes dEQP-VK.memory.allocation.basic.size_8KiB.forward.count_4000
on my ampere/gsp system.

Cc: stable@vger.kernel.org # v6.6
Signed-off-by: Dave Airlie <airlied@redhat.com>
Reviewed-by: Faith Ekstrand <faith.ekstrand@collabora.com>
Signed-off-by: Danilo Krummrich <dakr@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20230811031520.248341-1-airlied@gmail.com
drivers/gpu/drm/nouveau/nouveau_bo.c

index 0f3bd187ede67d0a8bb6be040956c70436a6aebf..280d1d9a559bad8b4e418615f3789ea821829fda 100644 (file)
@@ -318,8 +318,9 @@ nouveau_bo_alloc(struct nouveau_cli *cli, u64 *size, int *align, u32 domain,
                            (!vmm->page[i].host || vmm->page[i].shift > PAGE_SHIFT))
                                continue;
 
-                       if (pi < 0)
-                               pi = i;
+                       /* pick the last one as it will be smallest. */
+                       pi = i;
+
                        /* Stop once the buffer is larger than the current page size. */
                        if (*size >= 1ULL << vmm->page[i].shift)
                                break;