[PATCH] drm/ttm: prevent grabbing page references
Christian König
ckoenig.leichtzumerken at gmail.com
Thu Aug 18 09:35:04 UTC 2022
Am 18.08.22 um 00:20 schrieb Dmitry Osipenko:
> 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?
Lack of sleep :)
Going to fix that, thanks.
Christian.
>
More information about the dri-devel
mailing list