mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 18:18:06 +02:00
panvk: introduce panvk_get_gpu_page_size
This function returns the page size of the VM that we're using. The GPU page size might be different from what the host process uses. Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/37288>
This commit is contained in:
parent
19daf0c4b1
commit
2c5f88a074
3 changed files with 11 additions and 3 deletions
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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. */
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue