Hi Christian, Should I wait for comments on dri-devel or can I push the TTM trace patches to our stg-4.12 already? Cheers, Tom On 18/08/17 09:45 AM, Christian König wrote: > Am 18.08.2017 um 15:22 schrieb Tom St Denis: >> Also exports two functions that vendor drivers can call >> to trace DMA mappings. This is meant to help translate >> IOMMU mappings of bus addresses back to physical pages. >> >> Used by the umr amdgpu debugger for instance. >> >> Signed-off-by: Tom St Denis <tom.stdenis at amd.com> > > Reviewed-by: Christian König <christian.koenig at amd.com>. > > Since it is TTM you need to send it to the drm mailing list as well. > > Christian. > >> >> (v2): Use dev_name() to get PCI path instead. >> (v3): Use correct types for dma/phys addresses >> --- >> drivers/gpu/drm/ttm/Makefile | 4 +- >> drivers/gpu/drm/ttm/ttm_debug.c | 75 >> ++++++++++++++++++++++++++++++ >> drivers/gpu/drm/ttm/ttm_trace.h | 87 >> +++++++++++++++++++++++++++++++++++ >> drivers/gpu/drm/ttm/ttm_tracepoints.c | 46 ++++++++++++++++++ >> include/drm/ttm/ttm_debug.h | 31 +++++++++++++ >> 5 files changed, 241 insertions(+), 2 deletions(-) >> create mode 100644 drivers/gpu/drm/ttm/ttm_debug.c >> create mode 100644 drivers/gpu/drm/ttm/ttm_trace.h >> create mode 100644 drivers/gpu/drm/ttm/ttm_tracepoints.c >> create mode 100644 include/drm/ttm/ttm_debug.h >> >> diff --git a/drivers/gpu/drm/ttm/Makefile b/drivers/gpu/drm/ttm/Makefile >> index f92325800f8a..fd3da00c0bf2 100644 >> --- a/drivers/gpu/drm/ttm/Makefile >> +++ b/drivers/gpu/drm/ttm/Makefile >> @@ -1,11 +1,11 @@ >> # >> # Makefile for the drm device driver. This driver provides support >> for the >> -ccflags-y := -Iinclude/drm >> +ccflags-y := -Iinclude/drm -I$(src)/. >> ttm-y := ttm_memory.o ttm_tt.o ttm_bo.o \ >> ttm_bo_util.o ttm_bo_vm.o ttm_module.o \ >> ttm_object.o ttm_lock.o ttm_execbuf_util.o ttm_page_alloc.o \ >> - ttm_bo_manager.o ttm_page_alloc_dma.o >> + ttm_bo_manager.o ttm_page_alloc_dma.o ttm_debug.o ttm_tracepoints.o >> ttm-$(CONFIG_AGP) += ttm_agp_backend.o >> obj-$(CONFIG_DRM_TTM) += ttm.o >> diff --git a/drivers/gpu/drm/ttm/ttm_debug.c >> b/drivers/gpu/drm/ttm/ttm_debug.c >> new file mode 100644 >> index 000000000000..dd158c6ef90d >> --- /dev/null >> +++ b/drivers/gpu/drm/ttm/ttm_debug.c >> @@ -0,0 +1,75 @@ >> +/************************************************************************** >> >> + * >> + * Copyright (c) 2017 Advanced Micro Devices, Inc. >> + * All Rights Reserved. >> + * >> + * Permission is hereby granted, free of charge, to any person >> obtaining a >> + * copy of this software and associated documentation files (the >> + * "Software"), to deal in the Software without restriction, including >> + * without limitation the rights to use, copy, modify, merge, publish, >> + * distribute, sub license, and/or sell copies of the Software, and to >> + * permit persons to whom the Software is furnished to do so, subject to >> + * the following conditions: >> + * >> + * The above copyright notice and this permission notice (including the >> + * next paragraph) shall be included in all copies or substantial >> portions >> + * of the Software. >> + * >> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, >> EXPRESS OR >> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF >> MERCHANTABILITY, >> + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT >> SHALL >> + * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR >> ANY CLAIM, >> + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR >> + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE >> OR THE >> + * USE OR OTHER DEALINGS IN THE SOFTWARE. >> + * >> + >> **************************************************************************/ >> >> +/* >> + * Authors: Tom St Denis <tom.stdenis at amd.com> >> + */ >> +#include <linux/sched.h> >> +#include <linux/highmem.h> >> +#include <linux/pagemap.h> >> +#include <linux/shmem_fs.h> >> +#include <linux/file.h> >> +#include <linux/swap.h> >> +#include <linux/slab.h> >> +#include <linux/export.h> >> +#include <drm/drm_cache.h> >> +#include <drm/drm_mem_util.h> >> +#include <drm/ttm/ttm_module.h> >> +#include <drm/ttm/ttm_bo_driver.h> >> +#include <drm/ttm/ttm_placement.h> >> +#include <drm/ttm/ttm_page_alloc.h> >> +#include "ttm_trace.h" >> + >> +void ttm_trace_dma_map(struct device *dev, struct ttm_dma_tt *tt) >> +{ >> + unsigned i; >> + >> + if (unlikely(trace_ttm_dma_map_enabled())) { >> + for (i = 0; i < tt->ttm.num_pages; i++) { >> + trace_ttm_dma_map( >> + dev, >> + tt->ttm.pages[i], >> + tt->dma_address[i]); >> + } >> + } >> +} >> +EXPORT_SYMBOL(ttm_trace_dma_map); >> + >> +void ttm_trace_dma_unmap(struct device *dev, struct ttm_dma_tt *tt) >> +{ >> + unsigned i; >> + >> + if (unlikely(trace_ttm_dma_unmap_enabled())) { >> + for (i = 0; i < tt->ttm.num_pages; i++) { >> + trace_ttm_dma_unmap( >> + dev, >> + tt->ttm.pages[i], >> + tt->dma_address[i]); >> + } >> + } >> +} >> +EXPORT_SYMBOL(ttm_trace_dma_unmap); >> + >> diff --git a/drivers/gpu/drm/ttm/ttm_trace.h >> b/drivers/gpu/drm/ttm/ttm_trace.h >> new file mode 100644 >> index 000000000000..23279b9b8e64 >> --- /dev/null >> +++ b/drivers/gpu/drm/ttm/ttm_trace.h >> @@ -0,0 +1,87 @@ >> +/************************************************************************** >> >> + * >> + * Copyright (c) 2017 Advanced Micro Devices, Inc. >> + * All Rights Reserved. >> + * >> + * Permission is hereby granted, free of charge, to any person >> obtaining a >> + * copy of this software and associated documentation files (the >> + * "Software"), to deal in the Software without restriction, including >> + * without limitation the rights to use, copy, modify, merge, publish, >> + * distribute, sub license, and/or sell copies of the Software, and to >> + * permit persons to whom the Software is furnished to do so, subject to >> + * the following conditions: >> + * >> + * The above copyright notice and this permission notice (including the >> + * next paragraph) shall be included in all copies or substantial >> portions >> + * of the Software. >> + * >> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, >> EXPRESS OR >> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF >> MERCHANTABILITY, >> + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT >> SHALL >> + * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR >> ANY CLAIM, >> + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR >> + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE >> OR THE >> + * USE OR OTHER DEALINGS IN THE SOFTWARE. >> + * >> + >> **************************************************************************/ >> >> +/* >> + * Authors: Tom St Denis <tom.stdenis at amd.com> >> + */ >> +#if !defined(_TTM_TRACE_H) || defined(TRACE_HEADER_MULTI_READ) >> +#define _TTM_TRACE_H_ >> + >> +#include <linux/stringify.h> >> +#include <linux/types.h> >> +#include <linux/tracepoint.h> >> + >> +#include <drm/drmP.h> >> + >> +#undef TRACE_SYSTEM >> +#define TRACE_SYSTEM ttm >> +#define TRACE_INCLUDE_FILE ttm_trace >> + >> +TRACE_EVENT(ttm_dma_map, >> + TP_PROTO(struct device *dev, struct page *page, dma_addr_t >> dma_address), >> + TP_ARGS(dev, page, dma_address), >> + TP_STRUCT__entry( >> + __string(device, dev_name(dev)) >> + __field(dma_addr_t, dma) >> + __field(phys_addr_t, phys) >> + ), >> + TP_fast_assign( >> + __assign_str(device, dev_name(dev)); >> + __entry->dma = dma_address; >> + __entry->phys = page_to_phys(page); >> + ), >> + TP_printk("%s: %pad => %pa", >> + __get_str(device), >> + &__entry->dma, >> + &__entry->phys) >> +); >> + >> +TRACE_EVENT(ttm_dma_unmap, >> + TP_PROTO(struct device *dev, struct page *page, dma_addr_t >> dma_address), >> + TP_ARGS(dev, page, dma_address), >> + TP_STRUCT__entry( >> + __string(device, dev_name(dev)) >> + __field(dma_addr_t, dma) >> + __field(phys_addr_t, phys) >> + ), >> + TP_fast_assign( >> + __assign_str(device, dev_name(dev)); >> + __entry->dma = dma_address; >> + __entry->phys = page_to_phys(page); >> + ), >> + TP_printk("%s: %pad => %pa", >> + __get_str(device), >> + &__entry->dma, >> + &__entry->phys) >> +); >> + >> +#endif >> + >> +/* This part must be outside protection */ >> +#undef TRACE_INCLUDE_PATH >> +#define TRACE_INCLUDE_PATH . >> +#include <trace/define_trace.h> >> + >> diff --git a/drivers/gpu/drm/ttm/ttm_tracepoints.c >> b/drivers/gpu/drm/ttm/ttm_tracepoints.c >> new file mode 100644 >> index 000000000000..c13b9f5b6496 >> --- /dev/null >> +++ b/drivers/gpu/drm/ttm/ttm_tracepoints.c >> @@ -0,0 +1,46 @@ >> +/************************************************************************** >> >> + * >> + * Copyright (c) 2017 Advanced Micro Devices, Inc. >> + * All Rights Reserved. >> + * >> + * Permission is hereby granted, free of charge, to any person >> obtaining a >> + * copy of this software and associated documentation files (the >> + * "Software"), to deal in the Software without restriction, including >> + * without limitation the rights to use, copy, modify, merge, publish, >> + * distribute, sub license, and/or sell copies of the Software, and to >> + * permit persons to whom the Software is furnished to do so, subject to >> + * the following conditions: >> + * >> + * The above copyright notice and this permission notice (including the >> + * next paragraph) shall be included in all copies or substantial >> portions >> + * of the Software. >> + * >> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, >> EXPRESS OR >> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF >> MERCHANTABILITY, >> + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT >> SHALL >> + * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR >> ANY CLAIM, >> + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR >> + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE >> OR THE >> + * USE OR OTHER DEALINGS IN THE SOFTWARE. >> + * >> + >> **************************************************************************/ >> >> +/* >> + * Authors: Tom St Denis <tom.stdenis at amd.com> >> + */ >> +#include <linux/sched.h> >> +#include <linux/highmem.h> >> +#include <linux/pagemap.h> >> +#include <linux/shmem_fs.h> >> +#include <linux/file.h> >> +#include <linux/swap.h> >> +#include <linux/slab.h> >> +#include <linux/export.h> >> +#include <drm/drm_cache.h> >> +#include <drm/drm_mem_util.h> >> +#include <drm/ttm/ttm_module.h> >> +#include <drm/ttm/ttm_bo_driver.h> >> +#include <drm/ttm/ttm_placement.h> >> +#include <drm/ttm/ttm_page_alloc.h> >> + >> +#define CREATE_TRACE_POINTS >> +#include "ttm_trace.h" >> diff --git a/include/drm/ttm/ttm_debug.h b/include/drm/ttm/ttm_debug.h >> new file mode 100644 >> index 000000000000..b5e460fa5086 >> --- /dev/null >> +++ b/include/drm/ttm/ttm_debug.h >> @@ -0,0 +1,31 @@ >> +/************************************************************************** >> >> + * >> + * Copyright (c) 2017 Advanced Micro Devices, Inc. >> + * All Rights Reserved. >> + * >> + * Permission is hereby granted, free of charge, to any person >> obtaining a >> + * copy of this software and associated documentation files (the >> + * "Software"), to deal in the Software without restriction, including >> + * without limitation the rights to use, copy, modify, merge, publish, >> + * distribute, sub license, and/or sell copies of the Software, and to >> + * permit persons to whom the Software is furnished to do so, subject to >> + * the following conditions: >> + * >> + * The above copyright notice and this permission notice (including the >> + * next paragraph) shall be included in all copies or substantial >> portions >> + * of the Software. >> + * >> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, >> EXPRESS OR >> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF >> MERCHANTABILITY, >> + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT >> SHALL >> + * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR >> ANY CLAIM, >> + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR >> + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE >> OR THE >> + * USE OR OTHER DEALINGS IN THE SOFTWARE. >> + * >> + >> **************************************************************************/ >> >> +/* >> + * Authors: Tom St Denis <tom.stdenis at amd.com> >> + */ >> +extern void ttm_trace_dma_map(struct device *dev, struct ttm_dma_tt >> *tt); >> +extern void ttm_trace_dma_unmap(struct device *dev, struct ttm_dma_tt >> *tt); > >