From nobody Wed Apr 8 10:01:56 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9AF62C00140 for ; Sun, 21 Aug 2022 08:06:34 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229885AbiHUIG3 (ORCPT ); Sun, 21 Aug 2022 04:06:29 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45616 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229799AbiHUIGV (ORCPT ); Sun, 21 Aug 2022 04:06:21 -0400 Received: from ams.source.kernel.org (ams.source.kernel.org [145.40.68.75]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 050BF1A385 for ; Sun, 21 Aug 2022 01:06:19 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id 7BB3AB80B87 for ; Sun, 21 Aug 2022 08:06:18 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id ECC20C433C1; Sun, 21 Aug 2022 08:06:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1661069177; bh=dY8LHUVIja4HPuVDN76CpARIU1ikxp+3ytP8QwkWi4w=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=unQjdLghyl5M04pIvOPQzV6qTI5d+9MEZh7hJZ9uqJRma8mvTs9CNZBWEhFVDajCs R5SSF3+8KXV2eOXi6wRQJuspn1W+2ToYPdKseXL4J25+upY5mKuRJPOACqkCSexu5F i7AqE52Xmss5hU4k49iG1E/AU9z4z3KQmVpPPdBF/czGY75zI2t9u93WmSOxDwEdWc T/V1M6tNcTvPlRL14/h4k7kteP9xvxfEL85J/8dCTRNe9VwQHaN3uW8nvnOUpOnbZw EIm/QdQg0K4tW9nNMtgRz/g/w85K9gRk20G6dUY8tOzoB0YEk7iLD0DCxiD4kBoo7/ sQN1GXXOmX7Ew== From: Oded Gabbay To: rostedt@goodmis.org Cc: linux-kernel@vger.kernel.org, gregkh@linuxfoundation.org, Ohad Sharabi Subject: [PATCH v2 1/3] habanalabs: define trace events Date: Sun, 21 Aug 2022 11:06:06 +0300 Message-Id: <20220821080608.27486-2-ogabbay@kernel.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220821080608.27486-1-ogabbay@kernel.org> References: <20220821080608.27486-1-ogabbay@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: Ohad Sharabi This patch adds trace events for habanalabs driver to gain all the benefits such an infrastructure can supply. The following events were added: - MMU map/unmap: to be able to track driver's memory allocations - DMA alloc/free: to track our DMA allocation the above trace points in conjunction will help us map the device memory usage as well as to be able to track memory violations. Signed-off-by: Ohad Sharabi Acked-by: Oded Gabbay Reviewed-by: Steven Rostedt (Google) Signed-off-by: Oded Gabbay --- Changes in v2: - don't specify 1 or 0 when assigning to bool - print string of true/false instead of 1/0 =20 MAINTAINERS | 1 + .../misc/habanalabs/common/habanalabs_drv.c | 3 + include/trace/events/habanalabs.h | 90 +++++++++++++++++++ 3 files changed, 94 insertions(+) create mode 100644 include/trace/events/habanalabs.h diff --git a/MAINTAINERS b/MAINTAINERS index 8a5012ba6ff9..5ce91ab67cb4 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -8883,6 +8883,7 @@ T: git https://git.kernel.org/pub/scm/linux/kernel/gi= t/ogabbay/linux.git F: Documentation/ABI/testing/debugfs-driver-habanalabs F: Documentation/ABI/testing/sysfs-driver-habanalabs F: drivers/misc/habanalabs/ +F: include/trace/events/habanalabs.h F: include/uapi/misc/habanalabs.h =20 HACKRF MEDIA DRIVER diff --git a/drivers/misc/habanalabs/common/habanalabs_drv.c b/drivers/misc= /habanalabs/common/habanalabs_drv.c index 8026793d9083..e12148428731 100644 --- a/drivers/misc/habanalabs/common/habanalabs_drv.c +++ b/drivers/misc/habanalabs/common/habanalabs_drv.c @@ -14,6 +14,9 @@ #include #include =20 +#define CREATE_TRACE_POINTS +#include + #define HL_DRIVER_AUTHOR "HabanaLabs Kernel Driver Team" =20 #define HL_DRIVER_DESC "Driver for HabanaLabs's AI Accelerators" diff --git a/include/trace/events/habanalabs.h b/include/trace/events/haban= alabs.h new file mode 100644 index 000000000000..09ca516e1624 --- /dev/null +++ b/include/trace/events/habanalabs.h @@ -0,0 +1,90 @@ +/* SPDX-License-Identifier: GPL-2.0 + * + * Copyright 2016-2021 HabanaLabs, Ltd. + * All Rights Reserved. + * + */ + +#undef TRACE_SYSTEM +#define TRACE_SYSTEM habanalabs + +#if !defined(_TRACE_HABANALABS_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_HABANALABS_H + +#include + +DECLARE_EVENT_CLASS(habanalabs_mmu_template, + TP_PROTO(struct device *dev, u64 virt_addr, u64 phys_addr, u32 page_size,= bool flush_pte), + + TP_ARGS(dev, virt_addr, phys_addr, page_size, flush_pte), + + TP_STRUCT__entry( + __string(dname, dev_name(dev)) + __field(u64, virt_addr) + __field(u64, phys_addr) + __field(u32, page_size) + __field(u8, flush_pte) + ), + + TP_fast_assign( + __assign_str(dname, dev_name(dev)); + __entry->virt_addr =3D virt_addr; + __entry->phys_addr =3D phys_addr; + __entry->page_size =3D page_size; + __entry->flush_pte =3D flush_pte; + ), + + TP_printk("%s: vaddr: %#llx, paddr: %#llx, psize: %#x, flush: %s", + __get_str(dname), + __entry->virt_addr, + __entry->phys_addr, + __entry->page_size, + __entry->flush_pte ? "true" : "false") +); + +DEFINE_EVENT(habanalabs_mmu_template, habanalabs_mmu_map, + TP_PROTO(struct device *dev, u64 virt_addr, u64 phys_addr, u32 page_size,= bool flush_pte), + TP_ARGS(dev, virt_addr, phys_addr, page_size, flush_pte)); + +DEFINE_EVENT(habanalabs_mmu_template, habanalabs_mmu_unmap, + TP_PROTO(struct device *dev, u64 virt_addr, u64 phys_addr, u32 page_size,= bool flush_pte), + TP_ARGS(dev, virt_addr, phys_addr, page_size, flush_pte)); + +DECLARE_EVENT_CLASS(habanalabs_dma_alloc_template, + TP_PROTO(struct device *dev, u64 cpu_addr, u64 dma_addr, size_t size), + + TP_ARGS(dev, cpu_addr, dma_addr, size), + + TP_STRUCT__entry( + __string(dname, dev_name(dev)) + __field(u64, cpu_addr) + __field(u64, dma_addr) + __field(u32, size) + ), + + TP_fast_assign( + __assign_str(dname, dev_name(dev)); + __entry->cpu_addr =3D cpu_addr; + __entry->dma_addr =3D dma_addr; + __entry->size =3D size; + ), + + TP_printk("%s: cpu_addr: %#llx, dma_addr: %#llx, size: %#x", + __get_str(dname), + __entry->cpu_addr, + __entry->dma_addr, + __entry->size) +); + +DEFINE_EVENT(habanalabs_dma_alloc_template, habanalabs_dma_alloc, + TP_PROTO(struct device *dev, u64 cpu_addr, u64 dma_addr, size_t size), + TP_ARGS(dev, cpu_addr, dma_addr, size)); + +DEFINE_EVENT(habanalabs_dma_alloc_template, habanalabs_dma_free, + TP_PROTO(struct device *dev, u64 cpu_addr, u64 dma_addr, size_t size), + TP_ARGS(dev, cpu_addr, dma_addr, size)); + +#endif /* if !defined(_TRACE_HABANALABS_H) || defined(TRACE_HEADER_MULTI_R= EAD) */ + +/* This part must be outside protection */ +#include --=20 2.25.1 From nobody Wed Apr 8 10:01:56 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9AABCC00140 for ; Sun, 21 Aug 2022 08:06:26 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229593AbiHUIGY (ORCPT ); Sun, 21 Aug 2022 04:06:24 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45614 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229820AbiHUIGV (ORCPT ); Sun, 21 Aug 2022 04:06:21 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5B3301A3A7 for ; Sun, 21 Aug 2022 01:06:20 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id AEDA260DB9 for ; Sun, 21 Aug 2022 08:06:19 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id C6221C433D6; Sun, 21 Aug 2022 08:06:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1661069179; bh=mqXsFwh+05iiPRNW7M9j0aSWVfB/2J8LNjTrDN/eDxQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=NYMd1UzzNphHb8iRHDLims0gh3V8ZnccAgVHIX+a/FMXEKwQX6AXzezVIg/zpwDPL V6aDvilMWFzpqtbcH1QgvKkqefCM3Pq0HB4p2KW6TRpPvBwkbjTV186S1EzMRQUqXX tqLuEub+vxrR0jV7isyQROn9uj3lXGApoG7Z9B6ogZrav/oJOER74zH/Y5ZnIpyWZ1 qd/LcdFad2is3htvMkvWmwR8XVt6Elit4eVJdhGPIVvEWKfhUQUIYK7YdzMoEISjbR TObhMR/WwN1taCdDti5AggERsPc0X770H8C/Aj0oUSbON1YM3tFYyHYPhVeDm/YRx/ PLHuIxDnLKZkQ== From: Oded Gabbay To: rostedt@goodmis.org Cc: linux-kernel@vger.kernel.org, gregkh@linuxfoundation.org, Ohad Sharabi Subject: [PATCH v2 2/3] habanalabs: trace MMU map/unmap page Date: Sun, 21 Aug 2022 11:06:07 +0300 Message-Id: <20220821080608.27486-3-ogabbay@kernel.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220821080608.27486-1-ogabbay@kernel.org> References: <20220821080608.27486-1-ogabbay@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: Ohad Sharabi This patch utilize the defined tracepoint to trace the MMU's pages map/unmap operations. Signed-off-by: Ohad Sharabi Reviewed-by: Oded Gabbay Reviewed-by: Steven Rostedt (Google) Signed-off-by: Oded Gabbay --- Changes in v2: - Avoid check the return code in case tracing is disabled drivers/misc/habanalabs/common/mmu/mmu.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/misc/habanalabs/common/mmu/mmu.c b/drivers/misc/habana= labs/common/mmu/mmu.c index 60740de47b34..f901e668a468 100644 --- a/drivers/misc/habanalabs/common/mmu/mmu.c +++ b/drivers/misc/habanalabs/common/mmu/mmu.c @@ -9,6 +9,8 @@ =20 #include "../habanalabs.h" =20 +#include + /** * hl_mmu_get_funcs() - get MMU functions structure * @hdev: habanalabs device structure. @@ -259,6 +261,9 @@ int hl_mmu_unmap_page(struct hl_ctx *ctx, u64 virt_addr= , u32 page_size, bool flu if (flush_pte) mmu_funcs->flush(ctx); =20 + if (trace_habanalabs_mmu_unmap_enabled() && !rc) + trace_habanalabs_mmu_unmap(hdev->dev, virt_addr, 0, page_size, flush_pte= ); + return rc; } =20 @@ -344,6 +349,8 @@ int hl_mmu_map_page(struct hl_ctx *ctx, u64 virt_addr, = u64 phys_addr, u32 page_s if (flush_pte) mmu_funcs->flush(ctx); =20 + trace_habanalabs_mmu_map(hdev->dev, virt_addr, phys_addr, page_size, flus= h_pte); + return 0; =20 err: --=20 2.25.1 From nobody Wed Apr 8 10:01:56 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id A4F8CC00140 for ; Sun, 21 Aug 2022 08:06:37 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229884AbiHUIGf (ORCPT ); Sun, 21 Aug 2022 04:06:35 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45644 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229787AbiHUIGY (ORCPT ); Sun, 21 Aug 2022 04:06:24 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2CD601A385 for ; Sun, 21 Aug 2022 01:06:22 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id BAAC160C93 for ; Sun, 21 Aug 2022 08:06:21 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 9EFABC433D7; Sun, 21 Aug 2022 08:06:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1661069181; bh=KGLjvgZnXQOFUVGltKbS7dMihA1dC3pDWqrnJZ/juMU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ZFz86GiJ7fa+hzQZNERgJQUjghMMLvXfKJmNiuEOlIuFw90rJcgSSHT34kK+Oy6jg uW4/3kD7xlFh8i+rUEf00v3yP1N86Lo6R/5NN/6P1gLk4jblkf3U5gLRUEHLkwOUF2 j+n3noDUUW+28nZO64RibT+aiiS1jAglO9k94bAU1NEBKZOsn/EdWLC6P7dF9xV6uP Chgq703dWdwQ0ld6c6E6EbQlHaZTREwVtdzbvMCQIDvs7r2XO5t3Vl3v/bhIIRWwuV G0qdP1+Pn7zz2R/juGQIFzv+2Or9Tz+RVmb1Q2uWZBfYbneJOptalkZa1mSNvAbMCg Fai0V76i6vrFA== From: Oded Gabbay To: rostedt@goodmis.org Cc: linux-kernel@vger.kernel.org, gregkh@linuxfoundation.org, Ohad Sharabi Subject: [PATCH v2 3/3] habanalabs: trace DMA allocations Date: Sun, 21 Aug 2022 11:06:08 +0300 Message-Id: <20220821080608.27486-4-ogabbay@kernel.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220821080608.27486-1-ogabbay@kernel.org> References: <20220821080608.27486-1-ogabbay@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: Ohad Sharabi This patch add tracepoints in the code for DMA allocation. The main purpose is to be able to cross data with the map operations and determine whether memory violation occurred, for example free DMA allocation before unmapping it from device memory. To achieve this the DMA alloc/free code flows were refactored so that a single DMA tracepoint will catch many flows. To get better understanding of what happened in the DMA allocations the real allocating function is added to the trace as well. Signed-off-by: Ohad Sharabi Reviewed-by: Oded Gabbay Reviewed-by: Steven Rostedt (Google) Signed-off-by: Oded Gabbay --- Changes in v2: - Avoid checking pointer is NULL in case tracing is disabled drivers/misc/habanalabs/common/device.c | 49 +++++++++++++-------- drivers/misc/habanalabs/common/habanalabs.h | 40 +++++++++++++---- include/trace/events/habanalabs.h | 19 ++++---- 3 files changed, 73 insertions(+), 35 deletions(-) diff --git a/drivers/misc/habanalabs/common/device.c b/drivers/misc/habanal= abs/common/device.c index ab2497b6d164..d4ba67bfbb2e 100644 --- a/drivers/misc/habanalabs/common/device.c +++ b/drivers/misc/habanalabs/common/device.c @@ -13,6 +13,8 @@ #include #include =20 +#include + #define HL_RESET_DELAY_USEC 10000 /* 10ms */ =20 enum dma_alloc_type { @@ -97,9 +99,10 @@ static int hl_access_sram_dram_region(struct hl_device *= hdev, u64 addr, u64 *val } =20 static void *hl_dma_alloc_common(struct hl_device *hdev, size_t size, dma_= addr_t *dma_handle, - gfp_t flag, enum dma_alloc_type alloc_type) + gfp_t flag, enum dma_alloc_type alloc_type, + const char *caller) { - void *ptr; + void *ptr =3D NULL; =20 switch (alloc_type) { case DMA_ALLOC_COHERENT: @@ -113,11 +116,16 @@ static void *hl_dma_alloc_common(struct hl_device *hd= ev, size_t size, dma_addr_t break; } =20 + if (trace_habanalabs_dma_alloc_enabled() && !ZERO_OR_NULL_PTR(ptr)) + trace_habanalabs_dma_alloc(hdev->dev, (u64) (uintptr_t) ptr, *dma_handle= , size, + caller); + return ptr; } =20 static void hl_asic_dma_free_common(struct hl_device *hdev, size_t size, v= oid *cpu_addr, - dma_addr_t dma_handle, enum dma_alloc_type alloc_type) + dma_addr_t dma_handle, enum dma_alloc_type alloc_type, + const char *caller) { switch (alloc_type) { case DMA_ALLOC_COHERENT: @@ -130,39 +138,44 @@ static void hl_asic_dma_free_common(struct hl_device = *hdev, size_t size, void *c hdev->asic_funcs->asic_dma_pool_free(hdev, cpu_addr, dma_handle); break; } + + trace_habanalabs_dma_free(hdev->dev, (u64) (uintptr_t) cpu_addr, dma_hand= le, size, caller); } =20 -void *hl_asic_dma_alloc_coherent(struct hl_device *hdev, size_t size, dma_= addr_t *dma_handle, - gfp_t flag) +void *hl_asic_dma_alloc_coherent_caller(struct hl_device *hdev, size_t siz= e, dma_addr_t *dma_handle, + gfp_t flag, const char *caller) { - return hl_dma_alloc_common(hdev, size, dma_handle, flag, DMA_ALLOC_COHERE= NT); + return hl_dma_alloc_common(hdev, size, dma_handle, flag, DMA_ALLOC_COHERE= NT, caller); } =20 -void hl_asic_dma_free_coherent(struct hl_device *hdev, size_t size, void *= cpu_addr, - dma_addr_t dma_handle) +void hl_asic_dma_free_coherent_caller(struct hl_device *hdev, size_t size,= void *cpu_addr, + dma_addr_t dma_handle, const char *caller) { - hl_asic_dma_free_common(hdev, size, cpu_addr, dma_handle, DMA_ALLOC_COHER= ENT); + hl_asic_dma_free_common(hdev, size, cpu_addr, dma_handle, DMA_ALLOC_COHER= ENT, caller); } =20 -void *hl_cpu_accessible_dma_pool_alloc(struct hl_device *hdev, size_t size= , dma_addr_t *dma_handle) +void *hl_cpu_accessible_dma_pool_alloc_caller(struct hl_device *hdev, size= _t size, + dma_addr_t *dma_handle, const char *caller) { - return hl_dma_alloc_common(hdev, size, dma_handle, 0, DMA_ALLOC_CPU_ACCES= SIBLE); + return hl_dma_alloc_common(hdev, size, dma_handle, 0, DMA_ALLOC_CPU_ACCES= SIBLE, caller); } =20 -void hl_cpu_accessible_dma_pool_free(struct hl_device *hdev, size_t size, = void *vaddr) +void hl_cpu_accessible_dma_pool_free_caller(struct hl_device *hdev, size_t= size, void *vaddr, + const char *caller) { - hl_asic_dma_free_common(hdev, size, vaddr, 0, DMA_ALLOC_CPU_ACCESSIBLE); + hl_asic_dma_free_common(hdev, size, vaddr, 0, DMA_ALLOC_CPU_ACCESSIBLE, c= aller); } =20 -void *hl_asic_dma_pool_zalloc(struct hl_device *hdev, size_t size, gfp_t m= em_flags, - dma_addr_t *dma_handle) +void *hl_asic_dma_pool_zalloc_caller(struct hl_device *hdev, size_t size, = gfp_t mem_flags, + dma_addr_t *dma_handle, const char *caller) { - return hl_dma_alloc_common(hdev, size, dma_handle, mem_flags, DMA_ALLOC_P= OOL); + return hl_dma_alloc_common(hdev, size, dma_handle, mem_flags, DMA_ALLOC_P= OOL, caller); } =20 -void hl_asic_dma_pool_free(struct hl_device *hdev, void *vaddr, dma_addr_t= dma_addr) +void hl_asic_dma_pool_free_caller(struct hl_device *hdev, void *vaddr, dma= _addr_t dma_addr, + const char *caller) { - hl_asic_dma_free_common(hdev, 0, vaddr, dma_addr, DMA_ALLOC_POOL); + hl_asic_dma_free_common(hdev, 0, vaddr, dma_addr, DMA_ALLOC_POOL, caller); } =20 int hl_dma_map_sgtable(struct hl_device *hdev, struct sg_table *sgt, enum = dma_data_direction dir) diff --git a/drivers/misc/habanalabs/common/habanalabs.h b/drivers/misc/hab= analabs/common/habanalabs.h index 237a887b3a43..6e65ca05a1a0 100644 --- a/drivers/misc/habanalabs/common/habanalabs.h +++ b/drivers/misc/habanalabs/common/habanalabs.h @@ -143,6 +143,25 @@ enum hl_mmu_enablement { =20 #define HL_MAX_DCORES 8 =20 +/* DMA alloc/free wrappers */ +#define hl_asic_dma_alloc_coherent(hdev, size, dma_handle, flags) \ + hl_asic_dma_alloc_coherent_caller(hdev, size, dma_handle, flags, __func__) + +#define hl_cpu_accessible_dma_pool_alloc(hdev, size, dma_handle) \ + hl_cpu_accessible_dma_pool_alloc_caller(hdev, size, dma_handle, __func__) + +#define hl_asic_dma_pool_zalloc(hdev, size, mem_flags, dma_handle) \ + hl_asic_dma_pool_zalloc_caller(hdev, size, mem_flags, dma_handle, __func_= _) + +#define hl_asic_dma_free_coherent(hdev, size, cpu_addr, dma_handle) \ + hl_asic_dma_free_coherent_caller(hdev, size, cpu_addr, dma_handle, __func= __) + +#define hl_cpu_accessible_dma_pool_free(hdev, size, vaddr) \ + hl_cpu_accessible_dma_pool_free_caller(hdev, size, vaddr, __func__) + +#define hl_asic_dma_pool_free(hdev, vaddr, dma_addr) \ + hl_asic_dma_pool_free_caller(hdev, vaddr, dma_addr, __func__) + /* * Reset Flags * @@ -3444,15 +3463,18 @@ static inline bool hl_mem_area_crosses_range(u64 ad= dress, u32 size, } =20 uint64_t hl_set_dram_bar_default(struct hl_device *hdev, u64 addr); -void *hl_asic_dma_alloc_coherent(struct hl_device *hdev, size_t size, dma_= addr_t *dma_handle, - gfp_t flag); -void hl_asic_dma_free_coherent(struct hl_device *hdev, size_t size, void *= cpu_addr, - dma_addr_t dma_handle); -void *hl_cpu_accessible_dma_pool_alloc(struct hl_device *hdev, size_t size= , dma_addr_t *dma_handle); -void hl_cpu_accessible_dma_pool_free(struct hl_device *hdev, size_t size, = void *vaddr); -void *hl_asic_dma_pool_zalloc(struct hl_device *hdev, size_t size, gfp_t m= em_flags, - dma_addr_t *dma_handle); -void hl_asic_dma_pool_free(struct hl_device *hdev, void *vaddr, dma_addr_t= dma_addr); +void *hl_asic_dma_alloc_coherent_caller(struct hl_device *hdev, size_t siz= e, dma_addr_t *dma_handle, + gfp_t flag, const char *caller); +void hl_asic_dma_free_coherent_caller(struct hl_device *hdev, size_t size,= void *cpu_addr, + dma_addr_t dma_handle, const char *caller); +void *hl_cpu_accessible_dma_pool_alloc_caller(struct hl_device *hdev, size= _t size, + dma_addr_t *dma_handle, const char *caller); +void hl_cpu_accessible_dma_pool_free_caller(struct hl_device *hdev, size_t= size, void *vaddr, + const char *caller); +void *hl_asic_dma_pool_zalloc_caller(struct hl_device *hdev, size_t size, = gfp_t mem_flags, + dma_addr_t *dma_handle, const char *caller); +void hl_asic_dma_pool_free_caller(struct hl_device *hdev, void *vaddr, dma= _addr_t dma_addr, + const char *caller); int hl_dma_map_sgtable(struct hl_device *hdev, struct sg_table *sgt, enum = dma_data_direction dir); void hl_dma_unmap_sgtable(struct hl_device *hdev, struct sg_table *sgt, enum dma_data_direction dir); diff --git a/include/trace/events/habanalabs.h b/include/trace/events/haban= alabs.h index 09ca516e1624..f05c5fa668a2 100644 --- a/include/trace/events/habanalabs.h +++ b/include/trace/events/habanalabs.h @@ -51,15 +51,16 @@ DEFINE_EVENT(habanalabs_mmu_template, habanalabs_mmu_un= map, TP_ARGS(dev, virt_addr, phys_addr, page_size, flush_pte)); =20 DECLARE_EVENT_CLASS(habanalabs_dma_alloc_template, - TP_PROTO(struct device *dev, u64 cpu_addr, u64 dma_addr, size_t size), + TP_PROTO(struct device *dev, u64 cpu_addr, u64 dma_addr, size_t size, con= st char *caller), =20 - TP_ARGS(dev, cpu_addr, dma_addr, size), + TP_ARGS(dev, cpu_addr, dma_addr, size, caller), =20 TP_STRUCT__entry( __string(dname, dev_name(dev)) __field(u64, cpu_addr) __field(u64, dma_addr) __field(u32, size) + __field(const char *, caller) ), =20 TP_fast_assign( @@ -67,22 +68,24 @@ DECLARE_EVENT_CLASS(habanalabs_dma_alloc_template, __entry->cpu_addr =3D cpu_addr; __entry->dma_addr =3D dma_addr; __entry->size =3D size; + __entry->caller =3D caller; ), =20 - TP_printk("%s: cpu_addr: %#llx, dma_addr: %#llx, size: %#x", + TP_printk("%s: cpu_addr: %#llx, dma_addr: %#llx, size: %#x, caller: %s", __get_str(dname), __entry->cpu_addr, __entry->dma_addr, - __entry->size) + __entry->size, + __entry->caller) ); =20 DEFINE_EVENT(habanalabs_dma_alloc_template, habanalabs_dma_alloc, - TP_PROTO(struct device *dev, u64 cpu_addr, u64 dma_addr, size_t size), - TP_ARGS(dev, cpu_addr, dma_addr, size)); + TP_PROTO(struct device *dev, u64 cpu_addr, u64 dma_addr, size_t size, con= st char *caller), + TP_ARGS(dev, cpu_addr, dma_addr, size, caller)); =20 DEFINE_EVENT(habanalabs_dma_alloc_template, habanalabs_dma_free, - TP_PROTO(struct device *dev, u64 cpu_addr, u64 dma_addr, size_t size), - TP_ARGS(dev, cpu_addr, dma_addr, size)); + TP_PROTO(struct device *dev, u64 cpu_addr, u64 dma_addr, size_t size, con= st char *caller), + TP_ARGS(dev, cpu_addr, dma_addr, size, caller)); =20 #endif /* if !defined(_TRACE_HABANALABS_H) || defined(TRACE_HEADER_MULTI_R= EAD) */ =20 --=20 2.25.1