Dave Airlie
2023-Aug-11 03:15 UTC
[Nouveau] [PATCH] nouveau: find the smallest page allocation to cover a buffer alloc.
From: Dave Airlie <airlied at 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 at redhat.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
Faith Ekstrand
2023-Aug-12 14:53 UTC
[Nouveau] [PATCH] nouveau: find the smallest page allocation to cover a buffer alloc.
On Thu, Aug 10, 2023 at 10:15?PM Dave Airlie <airlied at gmail.com> wrote:> From: Dave Airlie <airlied at 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 at redhat.com> >Reviewed-by: Faith Ekstrand <faith.ekstrand at 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 > >-------------- next part -------------- An HTML attachment was scrubbed... URL: <https://lists.freedesktop.org/archives/nouveau/attachments/20230812/ee6a11af/attachment.htm>