[PATCH v3 04/12] drm/ttm: Set dma addr to null after freee

Christian König ckoenig.leichtzumerken at gmail.com
Mon Nov 23 08:04:49 UTC 2020


Am 23.11.20 um 06:15 schrieb Andrey Grodzovsky:
>
> On 11/21/20 9:13 AM, Christian König wrote:
>> Am 21.11.20 um 06:21 schrieb Andrey Grodzovsky:
>>> Fixes oops.
>>
>> That file doesn't even exist any more. What oops should this fix?
>
>
> Which file ?

ttm_page_alloc.c

I've rewritten the whole page pool from scratch upstream.

> We set dma_address to NULL in every other place after unmap. This is 
> so that
> if dma address was already unmapped we skip it next time we enter 
> ttm_unmap_and_unpopulate_pages
> with same tt for some reason.

Dave and I already fixed that as well by having a flag preventing double 
unpopulate.

> The oops happens with IOMMU enabled. The device is removed from it's 
> IOMMU group
> during PCI remove but the BOs are all still alive if user mode client 
> holds reference to drm file.
> Later when the refernece is droppped and device fini happens i get 
> oops in
> ttm_unmap_and_unpopulate_pages->dma_unmap_page becaue of IOMMU group 
> structures being gone already.
> Patch  [11/12] drm/amdgpu: Register IOMMU topology notifier per device 
> together with this patch solve the oops.

It should be sufficient to unpopulate all BOs now.

Maybe you should rebase the patches on drm-misc-next.

Christian.

>
> Andrey
>
>
>>> Signed-off-by: Andrey Grodzovsky <andrey.grodzovsky at amd.com>
>>> ---
>>>   drivers/gpu/drm/ttm/ttm_page_alloc.c | 2 ++
>>>   1 file changed, 2 insertions(+)
>>>
>>> diff --git a/drivers/gpu/drm/ttm/ttm_page_alloc.c 
>>> b/drivers/gpu/drm/ttm/ttm_page_alloc.c
>>> index b40a467..b0df328 100644
>>> --- a/drivers/gpu/drm/ttm/ttm_page_alloc.c
>>> +++ b/drivers/gpu/drm/ttm/ttm_page_alloc.c
>>> @@ -1160,6 +1160,8 @@ void ttm_unmap_and_unpopulate_pages(struct 
>>> device *dev, struct ttm_dma_tt *tt)
>>>           dma_unmap_page(dev, tt->dma_address[i], num_pages * 
>>> PAGE_SIZE,
>>>                      DMA_BIDIRECTIONAL);
>>>   +        tt->dma_address[i] = 0;
>>> +
>>>           i += num_pages;
>>>       }
>>>       ttm_pool_unpopulate(&tt->ttm);
>>
>> _______________________________________________
>> amd-gfx mailing list
>> amd-gfx at lists.freedesktop.org
>> https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Flists.freedesktop.org%2Fmailman%2Flistinfo%2Famd-gfx&data=04%7C01%7Candrey.grodzovsky%40amd.com%7C1c70eb602a49497aff3508d88e27ad1a%7C3dd8961fe4884e608e11a82d994e183d%7C0%7C0%7C637415648381338288%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=p8HjrEfydKrspsFCp1v8KCdT6lKr1OEKXdF3%2BSoh4zk%3D&reserved=0 
>>
> _______________________________________________
> amd-gfx mailing list
> amd-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx



More information about the amd-gfx mailing list