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

Christian König deathsimple at vodafone.de
Tue Aug 1 11:55:43 UTC 2017


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.

> +	    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.

>   	}
>   	return 0;
>   }




More information about the amd-gfx mailing list