[Mesa-dev] [PATCH v5 1/2] intel/ppgtt: memory address alignment

Lionel Landwerlin lionel.g.landwerlin at intel.com
Wed Aug 15 11:35:11 UTC 2018


On 15/08/18 12:23, Sergii Romantsov wrote:
> Kernel (for ppgtt) requires memory address to be
> aligned to page size (4096).
>
> -v2: added marking that also fixes initial commit 01058a552294.
> -v3: numbers replaced by PAGE_SIZE; buffer-object size is aligned
> instead of alignment of offsets (Chris Wilson).
> -v4: changes related to PAGE_SIZE moved to separate commit
> -v5: restored alignment to page-size for 0-size.
>
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=106997
> Fixes: a363bb2cd0e2 (i965: Allocate VMA in userspace for full-PPGTT systems.)
> Fixes: 01058a552294 (i965: Add virtual memory allocator infrastructure to brw_bufmgr.)
> Signed-off-by: Sergii Romantsov <sergii.romantsov at globallogic.com>
> ---
>   src/mesa/drivers/dri/i965/brw_bufmgr.c | 7 +++----
>   1 file changed, 3 insertions(+), 4 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_bufmgr.c b/src/mesa/drivers/dri/i965/brw_bufmgr.c
> index 09d45e3..19e2d14 100644
> --- a/src/mesa/drivers/dri/i965/brw_bufmgr.c
> +++ b/src/mesa/drivers/dri/i965/brw_bufmgr.c
> @@ -496,7 +496,6 @@ bo_alloc_internal(struct brw_bufmgr *bufmgr,
>                     uint32_t stride)
>   {
>      struct brw_bo *bo;
> -   unsigned int page_size = getpagesize();
>      int ret;
>      struct bo_cache_bucket *bucket;
>      bool alloc_from_cache;
> @@ -522,12 +521,12 @@ bo_alloc_internal(struct brw_bufmgr *bufmgr,
>       * allocation up.
>       */
>      if (bucket == NULL) {
> -      bo_size = size;
> -      if (bo_size < page_size)
> -         bo_size = page_size;
> +      unsigned int page_size = getpagesize();
> +      bo_size = size == 0 ? page_size : ALIGN(size, page_size);

You could even have :

bo_size = MIN(page_size, ALIGN(size, page_size));

Let me run this through the CI.

Thanks,

-
Lionel

>      } else {
>         bo_size = bucket->size;
>      }
> +   assert(bo_size);
>   
>      mtx_lock(&bufmgr->lock);
>      /* Get a buffer out of the cache if available */




More information about the mesa-dev mailing list