All of lore.kernel.org
 help / color / mirror / Atom feed
* Add dma tracepoints to TTM and remove from AMDGPU
@ 2017-08-17 12:29 Tom St Denis
       [not found] ` <20170817122929.3258-1-tom.stdenis-5C7GfCeVMHo@public.gmane.org>
  0 siblings, 1 reply; 4+ messages in thread
From: Tom St Denis @ 2017-08-17 12:29 UTC (permalink / raw)
  To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW

These patches first add DMA map/unmap tracepoints to the TTM
layer.  This is done by adding functions that vendors can
call from their populate/unpopulate callbacks.  Usage is
completely optional.

Second, we remove the tracepoints from the AMDGPU driver
and call the TTM provided tracepoints instead.

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH 1/2] drm/ttm: Add DMA map/unmap tracepoint
       [not found] ` <20170817122929.3258-1-tom.stdenis-5C7GfCeVMHo@public.gmane.org>
@ 2017-08-17 12:29   ` Tom St Denis
       [not found]     ` <20170817122929.3258-2-tom.stdenis-5C7GfCeVMHo@public.gmane.org>
  2017-08-17 12:29   ` [PATCH 2/2] drm/amd/amdgpu: Remove AMDGPU tracepoint and use new TTM tracepoint Tom St Denis
  1 sibling, 1 reply; 4+ messages in thread
From: Tom St Denis @ 2017-08-17 12:29 UTC (permalink / raw)
  To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW; +Cc: 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@amd.com>
---
 drivers/gpu/drm/ttm/Makefile          |   4 +-
 drivers/gpu/drm/ttm/ttm_debug.c       |  75 ++++++++++++++++++++++++
 drivers/gpu/drm/ttm/ttm_trace.h       | 106 ++++++++++++++++++++++++++++++++++
 drivers/gpu/drm/ttm/ttm_tracepoints.c |  46 +++++++++++++++
 include/drm/ttm/ttm_debug.h           |  31 ++++++++++
 5 files changed, 260 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..8a9e3a15d12e
--- /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@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 pci_dev *pci, 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(
+				pci,
+				tt->ttm.pages[i],
+				tt->dma_address[i]);
+		}
+	}
+}
+EXPORT_SYMBOL(ttm_trace_dma_map);
+
+void ttm_trace_dma_unmap(struct pci_dev *pci, 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(
+				pci,
+				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..41d3608711a7
--- /dev/null
+++ b/drivers/gpu/drm/ttm/ttm_trace.h
@@ -0,0 +1,106 @@
+/**************************************************************************
+ *
+ * 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@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 pci_dev *pdev, struct page *page, uint64_t dma_address),
+	    TP_ARGS(pdev, page, dma_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)
+			    ),
+	    TP_fast_assign(
+			   __entry->domain = pci_domain_nr(pdev->bus);
+			   __entry->bus = pdev->bus->number;
+			   __entry->slot = PCI_SLOT(pdev->devfn);
+			   __entry->func = PCI_FUNC(pdev->devfn);
+			   __entry->dma = dma_address;
+			   __entry->phys = page_to_phys(page);
+			   ),
+	    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(ttm_dma_unmap,
+	    TP_PROTO(struct pci_dev *pdev, struct page *page, uint64_t dma_address),
+	    TP_ARGS(pdev, page, dma_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)
+			    ),
+	    TP_fast_assign(
+			   __entry->domain = pci_domain_nr(pdev->bus);
+			   __entry->bus = pdev->bus->number;
+			   __entry->slot = PCI_SLOT(pdev->devfn);
+			   __entry->func = PCI_FUNC(pdev->devfn);
+			   __entry->dma = dma_address;
+			   __entry->phys = page_to_phys(page);
+			   ),
+	    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)
+);
+
+#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@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..1c93b9dbb9ed
--- /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@amd.com>
+ */
+extern void ttm_trace_dma_map(struct pci_dev *pci, struct ttm_dma_tt *tt);
+extern void ttm_trace_dma_unmap(struct pci_dev *pci, struct ttm_dma_tt *tt);
-- 
2.12.0

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH 2/2] drm/amd/amdgpu: Remove AMDGPU tracepoint and use new TTM tracepoint
       [not found] ` <20170817122929.3258-1-tom.stdenis-5C7GfCeVMHo@public.gmane.org>
  2017-08-17 12:29   ` [PATCH 1/2] drm/ttm: Add DMA map/unmap tracepoint Tom St Denis
@ 2017-08-17 12:29   ` Tom St Denis
  1 sibling, 0 replies; 4+ messages in thread
From: Tom St Denis @ 2017-08-17 12:29 UTC (permalink / raw)
  To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW; +Cc: Tom St Denis

Switches the AMDGPU driver over to the TTM tracepoint and removes
our old one.  Now you can enable traces before loading the module
and trace all mappings.

Signed-off-by: Tom St Denis <tom.stdenis@amd.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h | 56 -------------------------------
 drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c   | 21 ++----------
 2 files changed, 3 insertions(+), 74 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h
index 1c88bd5e29ad..b1f97417241d 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h
@@ -14,62 +14,6 @@
 #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(struct amdgpu_device *adev, uint64_t dma_address, uint64_t phys_address),
-	    TP_ARGS(adev, 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)
-			    ),
-	    TP_fast_assign(
-			   __entry->domain = pci_domain_nr(adev->pdev->bus);
-			   __entry->bus = adev->pdev->bus->number;
-			   __entry->slot = PCI_SLOT(adev->pdev->devfn);
-			   __entry->func = PCI_FUNC(adev->pdev->devfn);
-			   __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_ttm_tt_unpopulate,
-	    TP_PROTO(struct amdgpu_device *adev, uint64_t dma_address, uint64_t phys_address),
-	    TP_ARGS(adev, 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)
-			    ),
-	    TP_fast_assign(
-			   __entry->domain = pci_domain_nr(adev->pdev->bus);
-			   __entry->bus = adev->pdev->bus->number;
-			   __entry->slot = PCI_SLOT(adev->pdev->devfn);
-			   __entry->func = PCI_FUNC(adev->pdev->devfn);
-			   __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 26665b4baf36..71c896b6cac6 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
@@ -34,6 +34,7 @@
 #include <ttm/ttm_placement.h>
 #include <ttm/ttm_module.h>
 #include <ttm/ttm_page_alloc.h>
+#include <ttm/ttm_debug.h>
 #include <drm/drmP.h>
 #include <drm/amdgpu_drm.h>
 #include <linux/seq_file.h>
@@ -667,32 +668,16 @@ static void amdgpu_trace_dma_map(struct ttm_tt *ttm)
 {
 	struct amdgpu_device *adev = amdgpu_ttm_adev(ttm->bdev);
 	struct amdgpu_ttm_tt *gtt = (void *)ttm;
-	unsigned i;
 
-	if (unlikely(trace_amdgpu_ttm_tt_populate_enabled())) {
-		for (i = 0; i < ttm->num_pages; i++) {
-			trace_amdgpu_ttm_tt_populate(
-				adev,
-				gtt->ttm.dma_address[i],
-				page_to_phys(ttm->pages[i]));
-		}
-	}
+	ttm_trace_dma_map(adev->pdev, &gtt->ttm);
 }
 
 static void amdgpu_trace_dma_unmap(struct ttm_tt *ttm)
 {
 	struct amdgpu_device *adev = amdgpu_ttm_adev(ttm->bdev);
 	struct amdgpu_ttm_tt *gtt = (void *)ttm;
-	unsigned i;
 
-	if (unlikely(trace_amdgpu_ttm_tt_unpopulate_enabled())) {
-		for (i = 0; i < ttm->num_pages; i++) {
-			trace_amdgpu_ttm_tt_unpopulate(
-				adev,
-				gtt->ttm.dma_address[i],
-				page_to_phys(ttm->pages[i]));
-		}
-	}
+	ttm_trace_dma_unmap(adev->pdev, &gtt->ttm);
 }
 
 /* prepare the sg table with the user pages */
-- 
2.12.0

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH 1/2] drm/ttm: Add DMA map/unmap tracepoint
       [not found]     ` <20170817122929.3258-2-tom.stdenis-5C7GfCeVMHo@public.gmane.org>
@ 2017-08-18  8:26       ` Christian König
  0 siblings, 0 replies; 4+ messages in thread
From: Christian König @ 2017-08-18  8:26 UTC (permalink / raw)
  To: Tom St Denis, amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW

Am 17.08.2017 um 14:29 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@amd.com>
> ---
>   drivers/gpu/drm/ttm/Makefile          |   4 +-
>   drivers/gpu/drm/ttm/ttm_debug.c       |  75 ++++++++++++++++++++++++
>   drivers/gpu/drm/ttm/ttm_trace.h       | 106 ++++++++++++++++++++++++++++++++++
>   drivers/gpu/drm/ttm/ttm_tracepoints.c |  46 +++++++++++++++
>   include/drm/ttm/ttm_debug.h           |  31 ++++++++++
>   5 files changed, 260 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..8a9e3a15d12e
> --- /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@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 pci_dev *pci, 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(
> +				pci,
> +				tt->ttm.pages[i],
> +				tt->dma_address[i]);
> +		}
> +	}
> +}
> +EXPORT_SYMBOL(ttm_trace_dma_map);
> +
> +void ttm_trace_dma_unmap(struct pci_dev *pci, 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(
> +				pci,
> +				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..41d3608711a7
> --- /dev/null
> +++ b/drivers/gpu/drm/ttm/ttm_trace.h
> @@ -0,0 +1,106 @@
> +/**************************************************************************
> + *
> + * 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@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 pci_dev *pdev, struct page *page, uint64_t dma_address),
> +	    TP_ARGS(pdev, page, dma_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)
> +			    ),
> +	    TP_fast_assign(
> +			   __entry->domain = pci_domain_nr(pdev->bus);
> +			   __entry->bus = pdev->bus->number;
> +			   __entry->slot = PCI_SLOT(pdev->devfn);
> +			   __entry->func = PCI_FUNC(pdev->devfn);

We need something better here. Searching a bit what other drivers do a 
common solution seems to be:

__string(dname, dev_name(dev))

And then during the print:

             TP_printk("[%s] ....", __get_str(dname), ....

dev in this case is a struct device if I'm not completely mistaken.

Apart from that the change looks good to me.

Christian.

> +			   __entry->dma = dma_address;
> +			   __entry->phys = page_to_phys(page);
> +			   ),
> +	    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(ttm_dma_unmap,
> +	    TP_PROTO(struct pci_dev *pdev, struct page *page, uint64_t dma_address),
> +	    TP_ARGS(pdev, page, dma_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)
> +			    ),
> +	    TP_fast_assign(
> +			   __entry->domain = pci_domain_nr(pdev->bus);
> +			   __entry->bus = pdev->bus->number;
> +			   __entry->slot = PCI_SLOT(pdev->devfn);
> +			   __entry->func = PCI_FUNC(pdev->devfn);
> +			   __entry->dma = dma_address;
> +			   __entry->phys = page_to_phys(page);
> +			   ),
> +	    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)
> +);
> +
> +#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@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..1c93b9dbb9ed
> --- /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@amd.com>
> + */
> +extern void ttm_trace_dma_map(struct pci_dev *pci, struct ttm_dma_tt *tt);
> +extern void ttm_trace_dma_unmap(struct pci_dev *pci, struct ttm_dma_tt *tt);


_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2017-08-18  8:26 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-08-17 12:29 Add dma tracepoints to TTM and remove from AMDGPU Tom St Denis
     [not found] ` <20170817122929.3258-1-tom.stdenis-5C7GfCeVMHo@public.gmane.org>
2017-08-17 12:29   ` [PATCH 1/2] drm/ttm: Add DMA map/unmap tracepoint Tom St Denis
     [not found]     ` <20170817122929.3258-2-tom.stdenis-5C7GfCeVMHo@public.gmane.org>
2017-08-18  8:26       ` Christian König
2017-08-17 12:29   ` [PATCH 2/2] drm/amd/amdgpu: Remove AMDGPU tracepoint and use new TTM tracepoint Tom St Denis

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.