diff --git a/src/panfrost/vulkan/csf/panvk_vX_gpu_queue.c b/src/panfrost/vulkan/csf/panvk_vX_gpu_queue.c index 7dcc8417bc1..df5f505ea7e 100644 --- a/src/panfrost/vulkan/csf/panvk_vX_gpu_queue.c +++ b/src/panfrost/vulkan/csf/panvk_vX_gpu_queue.c @@ -190,7 +190,7 @@ finish_subqueue_tracing(struct panvk_gpu_queue *queue, struct panvk_subqueue *subq = &queue->subqueues[subqueue]; if (subq->tracebuf.addr.dev) { - size_t pgsize = getpagesize(); + uint64_t pgsize = panvk_get_gpu_page_size(dev); pandecode_inject_free(dev->debug.decode_ctx, subq->tracebuf.addr.dev, subq->tracebuf.size); @@ -265,7 +265,7 @@ init_subqueue_tracing(struct panvk_gpu_queue *queue, } /* Add a guard page. */ - size_t pgsize = getpagesize(); + uint64_t pgsize = panvk_get_gpu_page_size(dev); dev_addr = panvk_as_alloc(dev, subq->tracebuf.size + pgsize, pgsize); if (!dev_addr) diff --git a/src/panfrost/vulkan/panvk_device.h b/src/panfrost/vulkan/panvk_device.h index 0174ce39331..b97bb1cb006 100644 --- a/src/panfrost/vulkan/panvk_device.h +++ b/src/panfrost/vulkan/panvk_device.h @@ -151,6 +151,12 @@ panvk_device_adjust_bo_flags(const struct panvk_device *device, return bo_flags; } +static inline uint64_t +panvk_get_gpu_page_size(const struct panvk_device *device) +{ + return (uint64_t)1 << (ffsll(device->kmod.vm->pgsize_bitmap) - 1); +} + static inline uint64_t panvk_as_alloc(struct panvk_device *device, uint64_t size, uint64_t alignment) { diff --git a/src/panfrost/vulkan/panvk_mempool.c b/src/panfrost/vulkan/panvk_mempool.c index 491bc9afcc9..998d9b2d70b 100644 --- a/src/panfrost/vulkan/panvk_mempool.c +++ b/src/panfrost/vulkan/panvk_mempool.c @@ -23,6 +23,7 @@ * */ +#include "panvk_device.h" #include "panvk_mempool.h" #include "panvk_priv_bo.h" @@ -55,7 +56,8 @@ panvk_bo_pool_cleanup(struct panvk_bo_pool *bo_pool) static struct panvk_priv_bo * panvk_pool_alloc_backing(struct panvk_pool *pool, size_t sz) { - size_t bo_sz = ALIGN_POT(MAX2(pool->base.slab_size, sz), 4096); + size_t bo_sz = ALIGN_POT(MAX2(pool->base.slab_size, sz), + panvk_get_gpu_page_size(pool->dev)); struct panvk_priv_bo *bo = NULL; /* If there's a free BO in our BO pool, let's pick it. */