From: "Christian König" <christian.koenig@amd.com>
To: Tvrtko Ursulin <tvrtko.ursulin@igalia.com>,
amd-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org
Cc: kernel-dev@igalia.com,
"Thomas Hellström" <thomas.hellstrom@linux.intel.com>
Subject: Re: [RFC v2 1/5] drm/ttm: Add getter for some pool properties
Date: Mon, 6 Oct 2025 10:38:30 +0200 [thread overview]
Message-ID: <b9a866ea-0f67-4e34-bb30-f8e297ee26f2@amd.com> (raw)
In-Reply-To: <20251003135836.41116-2-tvrtko.ursulin@igalia.com>
On 03.10.25 15:58, Tvrtko Ursulin wrote:
> No functional change but to allow easier refactoring in the future.
>
> Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@igalia.com>
> Cc: Christian König <christian.koenig@amd.com>
> Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
> ---
> drivers/gpu/drm/ttm/ttm_pool.c | 28 ++++++++++++++--------------
> drivers/gpu/drm/ttm/ttm_tt.c | 9 +++++----
> include/drm/ttm/ttm_pool.h | 10 ++++++++++
> 3 files changed, 29 insertions(+), 18 deletions(-)
>
> diff --git a/drivers/gpu/drm/ttm/ttm_pool.c b/drivers/gpu/drm/ttm/ttm_pool.c
> index baf27c70a419..a9430b516fc3 100644
> --- a/drivers/gpu/drm/ttm/ttm_pool.c
> +++ b/drivers/gpu/drm/ttm/ttm_pool.c
> @@ -148,7 +148,7 @@ static struct page *ttm_pool_alloc_page(struct ttm_pool *pool, gfp_t gfp_flags,
> gfp_flags |= __GFP_NOMEMALLOC | __GFP_NORETRY | __GFP_NOWARN |
> __GFP_THISNODE;
>
> - if (!pool->use_dma_alloc) {
> + if (!ttm_pool_uses_dma_alloc(pool)) {
> p = alloc_pages_node(pool->nid, gfp_flags, order);
> if (p)
> p->private = order;
> @@ -200,7 +200,7 @@ static void ttm_pool_free_page(struct ttm_pool *pool, enum ttm_caching caching,
> set_pages_wb(p, 1 << order);
> #endif
>
> - if (!pool || !pool->use_dma_alloc) {
> + if (!pool || !ttm_pool_uses_dma_alloc(pool)) {
> __free_pages(p, order);
> return;
> }
> @@ -243,7 +243,7 @@ static int ttm_pool_map(struct ttm_pool *pool, unsigned int order,
> {
> dma_addr_t addr;
>
> - if (pool->use_dma_alloc) {
> + if (ttm_pool_uses_dma_alloc(pool)) {
> struct ttm_pool_dma *dma = (void *)p->private;
>
> addr = dma->addr;
> @@ -265,7 +265,7 @@ static void ttm_pool_unmap(struct ttm_pool *pool, dma_addr_t dma_addr,
> unsigned int num_pages)
> {
> /* Unmapped while freeing the page */
> - if (pool->use_dma_alloc)
> + if (ttm_pool_uses_dma_alloc(pool))
> return;
>
> dma_unmap_page(pool->dev, dma_addr, (long)num_pages << PAGE_SHIFT,
> @@ -339,7 +339,7 @@ static struct ttm_pool_type *ttm_pool_select_type(struct ttm_pool *pool,
> enum ttm_caching caching,
> unsigned int order)
> {
> - if (pool->use_dma_alloc)
> + if (ttm_pool_uses_dma_alloc(pool))
> return &pool->caching[caching].orders[order];
>
> #ifdef CONFIG_X86
> @@ -348,7 +348,7 @@ static struct ttm_pool_type *ttm_pool_select_type(struct ttm_pool *pool,
> if (pool->nid != NUMA_NO_NODE)
> return &pool->caching[caching].orders[order];
>
> - if (pool->use_dma32)
> + if (ttm_pool_uses_dma32(pool))
> return &global_dma32_write_combined[order];
>
> return &global_write_combined[order];
> @@ -356,7 +356,7 @@ static struct ttm_pool_type *ttm_pool_select_type(struct ttm_pool *pool,
> if (pool->nid != NUMA_NO_NODE)
> return &pool->caching[caching].orders[order];
>
> - if (pool->use_dma32)
> + if (ttm_pool_uses_dma32(pool))
> return &global_dma32_uncached[order];
>
> return &global_uncached[order];
> @@ -396,7 +396,7 @@ static unsigned int ttm_pool_shrink(void)
> /* Return the allocation order based for a page */
> static unsigned int ttm_pool_page_order(struct ttm_pool *pool, struct page *p)
> {
> - if (pool->use_dma_alloc) {
> + if (ttm_pool_uses_dma_alloc(pool)) {
> struct ttm_pool_dma *dma = (void *)p->private;
>
> return dma->vaddr & ~PAGE_MASK;
> @@ -719,7 +719,7 @@ static int __ttm_pool_alloc(struct ttm_pool *pool, struct ttm_tt *tt,
> if (ctx->gfp_retry_mayfail)
> gfp_flags |= __GFP_RETRY_MAYFAIL;
>
> - if (pool->use_dma32)
> + if (ttm_pool_uses_dma32(pool))
> gfp_flags |= GFP_DMA32;
> else
> gfp_flags |= GFP_HIGHUSER;
> @@ -977,7 +977,7 @@ long ttm_pool_backup(struct ttm_pool *pool, struct ttm_tt *tt,
> return -EINVAL;
>
> if ((!ttm_backup_bytes_avail() && !flags->purge) ||
> - pool->use_dma_alloc || ttm_tt_is_backed_up(tt))
> + ttm_pool_uses_dma_alloc(pool) || ttm_tt_is_backed_up(tt))
> return -EBUSY;
>
> #ifdef CONFIG_X86
> @@ -1014,7 +1014,7 @@ long ttm_pool_backup(struct ttm_pool *pool, struct ttm_tt *tt,
> if (flags->purge)
> return shrunken;
>
> - if (pool->use_dma32)
> + if (ttm_pool_uses_dma32(pool))
> gfp = GFP_DMA32;
> else
> gfp = GFP_HIGHUSER;
> @@ -1068,7 +1068,7 @@ void ttm_pool_init(struct ttm_pool *pool, struct device *dev,
> {
> unsigned int i, j;
>
> - WARN_ON(!dev && use_dma_alloc);
> + WARN_ON(!dev && ttm_pool_uses_dma_alloc(pool));
>
> pool->dev = dev;
> pool->nid = nid;
> @@ -1239,7 +1239,7 @@ int ttm_pool_debugfs(struct ttm_pool *pool, struct seq_file *m)
> {
> unsigned int i;
>
> - if (!pool->use_dma_alloc && pool->nid == NUMA_NO_NODE) {
> + if (!ttm_pool_uses_dma_alloc(pool) && pool->nid == NUMA_NO_NODE) {
> seq_puts(m, "unused\n");
> return 0;
> }
> @@ -1250,7 +1250,7 @@ int ttm_pool_debugfs(struct ttm_pool *pool, struct seq_file *m)
> for (i = 0; i < TTM_NUM_CACHING_TYPES; ++i) {
> if (!ttm_pool_select_type(pool, i, 0))
> continue;
> - if (pool->use_dma_alloc)
> + if (ttm_pool_uses_dma_alloc(pool))
> seq_puts(m, "DMA ");
> else
> seq_printf(m, "N%d ", pool->nid);
> diff --git a/drivers/gpu/drm/ttm/ttm_tt.c b/drivers/gpu/drm/ttm/ttm_tt.c
> index 506e257dfba8..3b21ec33c877 100644
> --- a/drivers/gpu/drm/ttm/ttm_tt.c
> +++ b/drivers/gpu/drm/ttm/ttm_tt.c
> @@ -93,7 +93,8 @@ int ttm_tt_create(struct ttm_buffer_object *bo, bool zero_alloc)
> * mapped TT pages need to be decrypted or otherwise the drivers
> * will end up sending encrypted mem to the gpu.
> */
> - if (bdev->pool.use_dma_alloc && cc_platform_has(CC_ATTR_GUEST_MEM_ENCRYPT)) {
> + if (ttm_pool_uses_dma_alloc(&bdev->pool) &&
> + cc_platform_has(CC_ATTR_GUEST_MEM_ENCRYPT)) {
> page_flags |= TTM_TT_FLAG_DECRYPTED;
> drm_info_once(ddev, "TT memory decryption enabled.");
> }
> @@ -378,7 +379,7 @@ int ttm_tt_populate(struct ttm_device *bdev,
>
> if (!(ttm->page_flags & TTM_TT_FLAG_EXTERNAL)) {
> atomic_long_add(ttm->num_pages, &ttm_pages_allocated);
> - if (bdev->pool.use_dma32)
> + if (ttm_pool_uses_dma32(&bdev->pool))
> atomic_long_add(ttm->num_pages,
> &ttm_dma32_pages_allocated);
> }
> @@ -416,7 +417,7 @@ int ttm_tt_populate(struct ttm_device *bdev,
> error:
> if (!(ttm->page_flags & TTM_TT_FLAG_EXTERNAL)) {
> atomic_long_sub(ttm->num_pages, &ttm_pages_allocated);
> - if (bdev->pool.use_dma32)
> + if (ttm_pool_uses_dma32(&bdev->pool))
> atomic_long_sub(ttm->num_pages,
> &ttm_dma32_pages_allocated);
> }
> @@ -439,7 +440,7 @@ void ttm_tt_unpopulate(struct ttm_device *bdev, struct ttm_tt *ttm)
>
> if (!(ttm->page_flags & TTM_TT_FLAG_EXTERNAL)) {
> atomic_long_sub(ttm->num_pages, &ttm_pages_allocated);
> - if (bdev->pool.use_dma32)
> + if (ttm_pool_uses_dma32(&bdev->pool))
> atomic_long_sub(ttm->num_pages,
> &ttm_dma32_pages_allocated);
> }
> diff --git a/include/drm/ttm/ttm_pool.h b/include/drm/ttm/ttm_pool.h
> index 54cd34a6e4c0..22154d84fef9 100644
> --- a/include/drm/ttm/ttm_pool.h
> +++ b/include/drm/ttm/ttm_pool.h
> @@ -100,4 +100,14 @@ int ttm_pool_restore_and_alloc(struct ttm_pool *pool, struct ttm_tt *tt,
> int ttm_pool_mgr_init(unsigned long num_pages);
> void ttm_pool_mgr_fini(void);
>
> +static inline bool ttm_pool_uses_dma_alloc(struct ttm_pool *pool)
> +{
> + return pool->use_dma_alloc;
> +}
> +
> +static inline bool ttm_pool_uses_dma32(struct ttm_pool *pool)
> +{
> + return pool->use_dma32;
> +}
> +
Please not in the header. Neither drivers nor other TTM modules should mess with such properties.
That is all internal to the pool.
Regards,
Christian.
> #endif
next prev parent reply other threads:[~2025-10-06 8:38 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-10-03 13:58 [RFC v2 0/5] Improving the worst case TTM large allocation latency Tvrtko Ursulin
2025-10-03 13:58 ` [RFC v2 1/5] drm/ttm: Add getter for some pool properties Tvrtko Ursulin
2025-10-06 8:38 ` Christian König [this message]
2025-10-07 14:00 ` Tvrtko Ursulin
2025-10-07 14:03 ` Christian König
2025-10-07 14:27 ` Tvrtko Ursulin
2025-10-07 15:04 ` Christian König
2025-10-08 7:34 ` Tvrtko Ursulin
2025-10-08 10:01 ` Christian König
2025-10-03 13:58 ` [RFC v2 2/5] drm/ttm: Replace multiple booleans with flags in pool init Tvrtko Ursulin
2025-10-03 13:58 ` [RFC v2 3/5] drm/ttm: Replace multiple booleans with flags in device init Tvrtko Ursulin
2025-10-03 13:58 ` [RFC v2 4/5] drm/ttm: Allow drivers to specify maximum beneficial TTM pool size Tvrtko Ursulin
2025-10-06 9:49 ` Christian König
2025-10-07 13:57 ` Tvrtko Ursulin
2025-10-07 15:36 ` Christian König
2025-10-03 13:58 ` [RFC v2 5/5] drm/amdgpu: Configure max beneficial TTM pool allocation order Tvrtko Ursulin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=b9a866ea-0f67-4e34-bb30-f8e297ee26f2@amd.com \
--to=christian.koenig@amd.com \
--cc=amd-gfx@lists.freedesktop.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=kernel-dev@igalia.com \
--cc=thomas.hellstrom@linux.intel.com \
--cc=tvrtko.ursulin@igalia.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox