Message ID | 20230811031520.248341-1-airlied@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | nouveau: find the smallest page allocation to cover a buffer alloc. | expand |
On Thu, Aug 10, 2023 at 10:15 PM Dave Airlie <airlied@gmail.com> wrote: > From: Dave Airlie <airlied@redhat.com> > > 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. > > Signed-off-by: Dave Airlie <airlied@redhat.com> > Reviewed-by: Faith Ekstrand <faith.ekstrand@collabora.com> > --- > drivers/gpu/drm/nouveau/nouveau_bo.c | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/nouveau/nouveau_bo.c > b/drivers/gpu/drm/nouveau/nouveau_bo.c > index 949195d5d782..a6993c7807b6 100644 > --- a/drivers/gpu/drm/nouveau/nouveau_bo.c > +++ b/drivers/gpu/drm/nouveau/nouveau_bo.c > @@ -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; > -- > 2.41.0 > >
diff --git a/drivers/gpu/drm/nouveau/nouveau_bo.c b/drivers/gpu/drm/nouveau/nouveau_bo.c index 949195d5d782..a6993c7807b6 100644 --- a/drivers/gpu/drm/nouveau/nouveau_bo.c +++ b/drivers/gpu/drm/nouveau/nouveau_bo.c @@ -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;