[PATCH] drm/amd/amdgpu: Add tracepoint for DMA page mapping

Tom St Denis tom.stdenis at amd.com
Tue Aug 1 12:29:01 UTC 2017


On 01/08/17 07:55 AM, Christian König wrote:
> Am 01.08.2017 um 13:51 schrieb Tom St Denis:
>> This helps map DMA addresses back to physical addresses.
>>
>> Signed-off-by: Tom St Denis <tom.stdenis at amd.com>
>> ---
>>   drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h | 28 
>> ++++++++++++++++++++++++++++
>>   drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c   |  8 ++++++++
>>   2 files changed, 36 insertions(+)
>>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h 
>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h
>> index 509f7a63d40c..5b2bb28da504 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h
>> @@ -14,6 +14,34 @@
>>   #define AMDGPU_JOB_GET_TIMELINE_NAME(job) \
>>        
>> job->base.s_fence->finished.ops->get_timeline_name(&job->base.s_fence->finished) 
>>
>> +TRACE_EVENT(amdgpu_ttm_tt_populate,
>> +        TP_PROTO(uint16_t domain, uint8_t bus, uint8_t slot, uint8_t 
>> func, uint64_t dma_address, uint64_t phys_address),
>> +        TP_ARGS(domain, bus, slot, func, dma_address, phys_address),
>> +        TP_STRUCT__entry(
>> +                __field(uint16_t, domain)
>> +                __field(uint8_t, bus)
>> +                __field(uint8_t, slot)
>> +                __field(uint8_t, func)
>> +                __field(uint64_t, dma)
>> +                __field(uint64_t, phys)
>> +                ),
> 
> Better just give adev here and extract the values during the fast assign.

Easy enough, I've done this now.

> 
>> +        TP_fast_assign(
>> +               __entry->domain = domain;
>> +               __entry->bus = bus;
>> +               __entry->slot = slot;
>> +               __entry->func = func;
>> +               __entry->dma = dma_address;
>> +               __entry->phys = phys_address;
>> +               ),
>> +        TP_printk("%04x:%02x:%02x.%x: 0x%llx => 0x%llx",
>> +              (unsigned)__entry->domain,
>> +              (unsigned)__entry->bus,
>> +              (unsigned)__entry->slot,
>> +              (unsigned)__entry->func,
>> +              (unsigned long long)__entry->dma,
>> +              (unsigned long long)__entry->phys)
>> +);
>> +
>>   TRACE_EVENT(amdgpu_mm_rreg,
>>           TP_PROTO(unsigned did, uint32_t reg, uint32_t value),
>>           TP_ARGS(did, reg, value),
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c 
>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
>> index 8da59d212b3b..1cf274603476 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
>> @@ -43,6 +43,7 @@
>>   #include <linux/pagemap.h>
>>   #include <linux/debugfs.h>
>>   #include "amdgpu.h"
>> +#include "amdgpu_trace.h"
>>   #include "bif/bif_4_1_d.h"
>>   #define DRM_FILE_PAGE_OFFSET (0x100000000ULL >> PAGE_SHIFT)
>> @@ -944,6 +945,13 @@ static int amdgpu_ttm_tt_populate(struct ttm_tt 
>> *ttm)
>>               ttm_pool_unpopulate(ttm);
>>               return -EFAULT;
>>           }
>> +        trace_amdgpu_ttm_tt_populate(
>> +            pci_domain_nr(adev->pdev->bus),
>> +            adev->pdev->bus->number,
>> +            PCI_SLOT(adev->pdev->devfn),
>> +            PCI_FUNC(adev->pdev->devfn),
>> +            gtt->ttm.dma_address[i],
>> +            page_to_phys(ttm->pages[i]));
> 
> Please add that tracing for the dma pool path as well.
> 
> With that fixed the change looks good to me,
> Christian.

Unsure what you mean here.  The ttm_pool_populate() seems to be 
preparing the page list to back the request.

Tom


More information about the amd-gfx mailing list