[PATCH 0/3] Fix GPU virtual address collosion when CPU page size != GPU page size

Sui Jingfeng posted 3 patches 1 month, 3 weeks ago
drivers/gpu/drm/etnaviv/etnaviv_gem.c |  8 +++--
drivers/gpu/drm/etnaviv/etnaviv_gem.h |  1 +
drivers/gpu/drm/etnaviv/etnaviv_mmu.c | 42 ++++++++++++---------------
3 files changed, 24 insertions(+), 27 deletions(-)
[PATCH 0/3] Fix GPU virtual address collosion when CPU page size != GPU page size
Posted by Sui Jingfeng 1 month, 3 weeks ago
Etnaviv assumes that GPU page size is 4KiB, however, when using
softpin capable GPUs on a different CPU page size configuration.
Userspace still doing the allocation with 4KiB page as unit. This
results in userspace allocated GPU virtual address ranges collision
and therefore unable to be inserted to the specified hole exactly.

The root cause is that kernel side BO takes up bigger address space
than userspace assumes when the size of it is not CPU page size aligned.

To solve it with no GPU VA range space wasting, we first track the size
of a buffer that userspace/GPU think of it is, then partially map and/or
unmap the tail physical page with respect to this 'user size'. Ensure
that GPU VA is fully mapped and/or unmapped.

Sui Jingfeng (3):
  drm/etnaviv: Track GPU VA size separately
  drm/etnaviv: Map and unmap the GPU VA range with respect to its user
    size
  drm/etnaviv: Print an error message if inserting IOVA range fails

 drivers/gpu/drm/etnaviv/etnaviv_gem.c |  8 +++--
 drivers/gpu/drm/etnaviv/etnaviv_gem.h |  1 +
 drivers/gpu/drm/etnaviv/etnaviv_mmu.c | 42 ++++++++++++---------------
 3 files changed, 24 insertions(+), 27 deletions(-)

-- 
2.34.1
Re: [PATCH 0/3] Fix GPU virtual address collosion when CPU page size != GPU page size
Posted by Lucas Stach 1 month ago
Hi Sui,

Am Samstag, dem 05.10.2024 um 03:42 +0800 schrieb Sui Jingfeng:
> Etnaviv assumes that GPU page size is 4KiB, however, when using
> softpin capable GPUs on a different CPU page size configuration.
> Userspace still doing the allocation with 4KiB page as unit. This
> results in userspace allocated GPU virtual address ranges collision
> and therefore unable to be inserted to the specified hole exactly.
> 
> The root cause is that kernel side BO takes up bigger address space
> than userspace assumes when the size of it is not CPU page size aligned.
> 
> To solve it with no GPU VA range space wasting, we first track the size
> of a buffer that userspace/GPU think of it is, then partially map and/or
> unmap the tail physical page with respect to this 'user size'. Ensure
> that GPU VA is fully mapped and/or unmapped.
> 
Would you be able to get me a updated series with the feedback taken
care of? I would like to add this series to the next upstream pull
request, if possible.

Regards,
Lucas

> Sui Jingfeng (3):
>   drm/etnaviv: Track GPU VA size separately
>   drm/etnaviv: Map and unmap the GPU VA range with respect to its user
>     size
>   drm/etnaviv: Print an error message if inserting IOVA range fails
> 
>  drivers/gpu/drm/etnaviv/etnaviv_gem.c |  8 +++--
>  drivers/gpu/drm/etnaviv/etnaviv_gem.h |  1 +
>  drivers/gpu/drm/etnaviv/etnaviv_mmu.c | 42 ++++++++++++---------------
>  3 files changed, 24 insertions(+), 27 deletions(-)
>