[PATCH] drm/ttm: prevent grabbing page references
Dmitry Osipenko
dmitry.osipenko at collabora.com
Wed Aug 17 22:20:05 UTC 2022
On 8/15/22 16:08, Christian König wrote:
> TTM owns the pages it uses for backing buffer objects with system
> memory. Because of this it is absolutely illegal to mess around with
> the reference count of those pages.
>
> So make sure that nobody ever tries to grab an extra reference on
> pages allocated through the page pool.
>
> Signed-off-by: Christian König <christian.koenig at amd.com>
> ---
> drivers/gpu/drm/ttm/ttm_pool.c | 14 +++++++++++++-
> 1 file changed, 13 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/ttm/ttm_pool.c b/drivers/gpu/drm/ttm/ttm_pool.c
> index 1bba0a0ed3f9..cbca84dbd83f 100644
> --- a/drivers/gpu/drm/ttm/ttm_pool.c
> +++ b/drivers/gpu/drm/ttm/ttm_pool.c
> @@ -93,8 +93,17 @@ static struct page *ttm_pool_alloc_page(struct ttm_pool *pool, gfp_t gfp_flags,
>
> if (!pool->use_dma_alloc) {
> p = alloc_pages(gfp_flags, order);
> - if (p)
> + if (p) {
> p->private = order;
> +
> + /* The pages are fully owned by TTM and because of this
> + * it's illegal to grab extra references to it or
> + * otherwise we corrupt TTMs internal state. Make sure
> + * nobody tries to ever increase the reference count of
> + * those pages.
> + */
> + set_page_count(p, 0);
> + }
> return p;
> }
>
> @@ -144,6 +153,9 @@ static void ttm_pool_free_page(struct ttm_pool *pool, enum ttm_caching caching,
> #endif
>
> if (!pool || !pool->use_dma_alloc) {
> + /* See alloc why references to TTMs pages are illegal */
> + WARN_ON(page_count(p));
> + set_page_count(p, 1);
> __free_pages(p, order);
> return;
> }
Could you please explain why you're skipping the DMA pages?
--
Best regards,
Dmitry
More information about the dri-devel
mailing list