[igt-dev] [PATCH i-g-t v26 12/35] lib/intel_bufops: Change size from 32->64 bit

Jason Ekstrand jason at jlekstrand.net
Wed Mar 17 21:33:58 UTC 2021


Reviewed-by: Jason Ekstrand <jason at jlekstrand.net>

On Wed, Mar 17, 2021 at 9:46 AM Zbigniew Kempczyński
<zbigniew.kempczynski at intel.com> wrote:
>
> 1. Buffer size from 32 -> 64 bit was changed to be consistent
>    with drm code.
> 2. Remember buffer creation size to avoid recalculation.
>
> Signed-off-by: Zbigniew Kempczyński <zbigniew.kempczynski at intel.com>
> Cc: Dominik Grzegorzek <dominik.grzegorzek at intel.com>
> Cc: Chris Wilson <chris at chris-wilson.co.uk>
> ---
>  lib/intel_bufops.c        | 17 ++++++++---------
>  lib/intel_bufops.h        |  7 +++++--
>  tests/i915/api_intel_bb.c |  6 +++---
>  3 files changed, 16 insertions(+), 14 deletions(-)
>
> diff --git a/lib/intel_bufops.c b/lib/intel_bufops.c
> index a50035e40..eb5ac4dad 100644
> --- a/lib/intel_bufops.c
> +++ b/lib/intel_bufops.c
> @@ -711,7 +711,7 @@ static void __intel_buf_init(struct buf_ops *bops,
>                              uint32_t req_tiling, uint32_t compression)
>  {
>         uint32_t tiling = req_tiling;
> -       uint32_t size;
> +       uint64_t size;
>         uint32_t devid;
>         int tile_width;
>         int align_h = 1;
> @@ -776,6 +776,9 @@ static void __intel_buf_init(struct buf_ops *bops,
>                 size = buf->surface[0].stride * ALIGN(height, align_h);
>         }
>
> +       /* Store real bo size to avoid mistakes in calculating it again */
> +       buf->size = size;
> +
>         if (handle)
>                 buf->handle = handle;
>         else
> @@ -1001,8 +1004,8 @@ void intel_buf_flush_and_unmap(struct intel_buf *buf)
>  void intel_buf_print(const struct intel_buf *buf)
>  {
>         igt_info("[name: %s]\n", buf->name);
> -       igt_info("[%u]: w: %u, h: %u, stride: %u, size: %u, bo-size: %u, "
> -                "bpp: %u, tiling: %u, compress: %u\n",
> +       igt_info("[%u]: w: %u, h: %u, stride: %u, size: %" PRIx64
> +                ", bo-size: %" PRIx64 ", bpp: %u, tiling: %u, compress: %u\n",
>                  buf->handle, intel_buf_width(buf), intel_buf_height(buf),
>                  buf->surface[0].stride, buf->surface[0].size,
>                  intel_buf_bo_size(buf), buf->bpp,
> @@ -1208,13 +1211,9 @@ static void idempotency_selftest(struct buf_ops *bops, uint32_t tiling)
>         buf_ops_set_software_tiling(bops, tiling, false);
>  }
>
> -uint32_t intel_buf_bo_size(const struct intel_buf *buf)
> +uint64_t intel_buf_bo_size(const struct intel_buf *buf)
>  {
> -       int offset = CCS_OFFSET(buf) ?: buf->surface[0].size;
> -       int ccs_size =
> -               buf->compression ? CCS_SIZE(buf->bops->intel_gen, buf) : 0;
> -
> -       return offset + ccs_size;
> +       return buf->size;
>  }
>
>  static struct buf_ops *__buf_ops_create(int fd, bool check_idempotency)
> diff --git a/lib/intel_bufops.h b/lib/intel_bufops.h
> index 8debe7f22..5619fc6fa 100644
> --- a/lib/intel_bufops.h
> +++ b/lib/intel_bufops.h
> @@ -9,10 +9,13 @@ struct buf_ops;
>
>  #define INTEL_BUF_INVALID_ADDRESS (-1ull)
>  #define INTEL_BUF_NAME_MAXSIZE 32
> +#define INVALID_ADDR(x) ((x) == INTEL_BUF_INVALID_ADDRESS)
> +
>  struct intel_buf {
>         struct buf_ops *bops;
>         bool is_owner;
>         uint32_t handle;
> +       uint64_t size;
>         uint32_t tiling;
>         uint32_t bpp;
>         uint32_t compression;
> @@ -23,7 +26,7 @@ struct intel_buf {
>         struct {
>                 uint32_t offset;
>                 uint32_t stride;
> -               uint32_t size;
> +               uint64_t size;
>         } surface[2];
>         struct {
>                 uint32_t offset;
> @@ -88,7 +91,7 @@ intel_buf_ccs_height(int gen, const struct intel_buf *buf)
>         return DIV_ROUND_UP(intel_buf_height(buf), 512) * 32;
>  }
>
> -uint32_t intel_buf_bo_size(const struct intel_buf *buf);
> +uint64_t intel_buf_bo_size(const struct intel_buf *buf);
>
>  struct buf_ops *buf_ops_create(int fd);
>  struct buf_ops *buf_ops_create_with_selftest(int fd);
> diff --git a/tests/i915/api_intel_bb.c b/tests/i915/api_intel_bb.c
> index cc1d1be6e..14bfeadb3 100644
> --- a/tests/i915/api_intel_bb.c
> +++ b/tests/i915/api_intel_bb.c
> @@ -123,9 +123,9 @@ static void print_buf(struct intel_buf *buf, const char *name)
>
>         ptr = gem_mmap__device_coherent(i915, buf->handle, 0,
>                                         buf->surface[0].size, PROT_READ);
> -       igt_debug("[%s] Buf handle: %d, size: %d, v: 0x%02x, presumed_addr: %p\n",
> +       igt_debug("[%s] Buf handle: %d, size: %" PRIx64 ", v: 0x%02x, presumed_addr: %p\n",
>                   name, buf->handle, buf->surface[0].size, ptr[0],
> -                       from_user_pointer(buf->addr.offset));
> +                 from_user_pointer(buf->addr.offset));
>         munmap(ptr, buf->surface[0].size);
>  }
>
> @@ -677,7 +677,7 @@ static int dump_base64(const char *name, struct intel_buf *buf)
>         if (ret != Z_OK) {
>                 igt_warn("error compressing, ret: %d\n", ret);
>         } else {
> -               igt_info("compressed %u -> %lu\n",
> +               igt_info("compressed %" PRIx64 " -> %lu\n",
>                          buf->surface[0].size, outsize);
>
>                 igt_info("--- %s ---\n", name);
> --
> 2.26.0
>


More information about the igt-dev mailing list