Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp10257014imu; Wed, 5 Dec 2018 20:00:57 -0800 (PST) X-Google-Smtp-Source: AFSGD/WFBfyqfD49bPzaUorV7reyUzGPkzRWaJt45Yxb1fJbxq2xHHUi3Byo7nXRKiBGL3Sy3a+t X-Received: by 2002:a63:b81a:: with SMTP id p26mr23246336pge.433.1544068856061; Wed, 05 Dec 2018 20:00:56 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1544068856; cv=none; d=google.com; s=arc-20160816; b=M3yiopNQD789F+GAj/l4o+aEpr9Jdk+O4gOqj4gVmWENo2S3G/gqJVOLo/+OJrWYCG m8BV8bc7bbfmpWViLEQ0c6SqK4VEfuYoXKUQS134amkcmc5cNNGF04NQTtlH60IouKhi N52dnRxcBVisJzXI3nVRtMldojAQ+gH5bZDvIsDs3B9iO/+cj18hXT1DBOREqXBEyS1S i7TlwLgAFX5iZ78HGpuCX4bI9V/dHyvUy92xsa4f3eRDxofR4kPKpIma3tFwWMcv348/ MXHAkw8QEDNAh9OYlDRZ/jJXOpiDmjtrQwh0Ws5AIF8x4ezHC3cgIjRjsmBZEqCOLFpo jvLA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :dkim-signature; bh=NlRLkCwiOA7f6mtyYzVHnLMr2b9B2jZqdxk3AnAyazI=; b=F9rtVTlsnFKeuf68TcZeqT488QI1cU1+adRRZVWcZxi0A0LRB9LxHfygM4qf9p5JCf SqlRGxatLNa0tUzC5Z7xGGmyxoko4lyh3i6Tm4hn0P895+n79fdLeQe0eqpLVtN6Yxfd VT1n1kGEjWlBiGkIKIMvrLgY1wSdCldky11GUti7tAw3djVrYnD2dXz/+IgL4PRyBXEK Mh648ZNAXZG+cL/ICZNqXcw6OE4xSJ4uulo9fh9QBzQwfdin+74KPwR+rd+Um2wYwve9 R5oktWcOLogKLGj13acXBvA67AhyBTrWjaQuAQ8BVZplgFSmAhDgOMLZQ1C6bReMdnY5 s+RA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@oracle.com header.s=corp-2018-07-02 header.b=R5GK1bKS; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=oracle.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id w14si21648812plq.145.2018.12.05.20.00.34; Wed, 05 Dec 2018 20:00:56 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@oracle.com header.s=corp-2018-07-02 header.b=R5GK1bKS; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=oracle.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728929AbeLFD6D (ORCPT + 99 others); Wed, 5 Dec 2018 22:58:03 -0500 Received: from aserp2130.oracle.com ([141.146.126.79]:55126 "EHLO aserp2130.oracle.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728489AbeLFD6C (ORCPT ); Wed, 5 Dec 2018 22:58:02 -0500 Received: from pps.filterd (aserp2130.oracle.com [127.0.0.1]) by aserp2130.oracle.com (8.16.0.22/8.16.0.22) with SMTP id wB63smIT107904; Thu, 6 Dec 2018 03:57:50 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id; s=corp-2018-07-02; bh=NlRLkCwiOA7f6mtyYzVHnLMr2b9B2jZqdxk3AnAyazI=; b=R5GK1bKSE6S07aQ4pzAy/xS6A7HqXizt3cuf04dGdRPi+q8SeSMnriHrL/bSdGnmPmAD v83u8zqMyuQgLtSHs5unYrfCnhFrXemAgmJ5q1QAenehxjMiThh4H6MthZmfkz5JCEJh 16rsEY30IdVaelfXx3uFazcX0Y0eM+f/jNOBX4kmgnm8tTCmCd5Nukbgi7P2ChoTPgxh f3g5vmUaZT0nHiEXOXqYrofdGgc/tIz7DxjZIeFgkluWtQHtOAbFxYcbduHnZq2V3d6f MMVAXBTaSEIy2DZHaUt5zJiedc47yDv+AKQjQpGcjV7crGe/GWtHSUPkCmZfA+S8s97n Qw== Received: from userv0021.oracle.com (userv0021.oracle.com [156.151.31.71]) by aserp2130.oracle.com with ESMTP id 2p3ftf9ycf-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 06 Dec 2018 03:57:50 +0000 Received: from userv0121.oracle.com (userv0121.oracle.com [156.151.31.72]) by userv0021.oracle.com (8.14.4/8.14.4) with ESMTP id wB63viv8032419 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 6 Dec 2018 03:57:44 GMT Received: from abhmp0008.oracle.com (abhmp0008.oracle.com [141.146.116.14]) by userv0121.oracle.com (8.14.4/8.13.8) with ESMTP id wB63vh1J015730; Thu, 6 Dec 2018 03:57:44 GMT Received: from linux.cn.oracle.com (/10.182.71.9) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Wed, 05 Dec 2018 19:57:43 -0800 From: Dongli Zhang To: iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org Cc: konrad.wilk@oracle.com, hch@lst.de, m.szyprowski@samsung.com, robin.murphy@arm.com, joe.jin@oracle.com, dongli.zhang@oracle.com Subject: [PATCH RFC 1/1] swiotlb: add debugfs to track swiotlb buffer usage Date: Thu, 6 Dec 2018 11:59:45 +0800 Message-Id: <1544068785-20399-1-git-send-email-dongli.zhang@oracle.com> X-Mailer: git-send-email 2.7.4 X-Proofpoint-Virus-Version: vendor=nai engine=5900 definitions=9098 signatures=668679 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=2 malwarescore=0 phishscore=0 bulkscore=0 spamscore=0 mlxscore=0 mlxlogscore=999 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1810050000 definitions=main-1812060034 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The device driver will not be able to do dma operations once swiotlb buffer is full, either because the driver is using so many IO TLB blocks inflight, or because there is memory leak issue in device driver. To export the swiotlb buffer usage via debugfs would help the user estimate the size of swiotlb buffer to pre-allocate or analyze device driver memory leak issue. As the swiotlb can be initialized at very early stage when debugfs cannot register successfully, this patch creates the debugfs entry on demand. Signed-off-by: Dongli Zhang --- kernel/dma/swiotlb.c | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/kernel/dma/swiotlb.c b/kernel/dma/swiotlb.c index 045930e..d3c8aa4 100644 --- a/kernel/dma/swiotlb.c +++ b/kernel/dma/swiotlb.c @@ -35,6 +35,9 @@ #include #include #include +#ifdef CONFIG_DEBUG_FS +#include +#endif #include #include @@ -73,6 +76,13 @@ static phys_addr_t io_tlb_start, io_tlb_end; */ static unsigned long io_tlb_nslabs; +#ifdef CONFIG_DEBUG_FS +/* + * The number of used IO TLB block + */ +static unsigned long io_tlb_used; +#endif + /* * This is a free list describing the number of free entries available from * each index @@ -100,6 +110,41 @@ static DEFINE_SPINLOCK(io_tlb_lock); static int late_alloc; +#ifdef CONFIG_DEBUG_FS + +static struct dentry *d_swiotlb_usage; + +static int swiotlb_usage_show(struct seq_file *m, void *v) +{ + seq_printf(m, "%lu\n%lu\n", io_tlb_used, io_tlb_nslabs); + return 0; +} + +static int swiotlb_usage_open(struct inode *inode, struct file *filp) +{ + return single_open(filp, swiotlb_usage_show, NULL); +} + +static const struct file_operations swiotlb_usage_fops = { + .open = swiotlb_usage_open, + .read = seq_read, + .llseek = seq_lseek, + .release = single_release, +}; + +void swiotlb_create_debugfs(void) +{ + d_swiotlb_usage = debugfs_create_dir("swiotlb", NULL); + + if (!d_swiotlb_usage) + return; + + debugfs_create_file("usage", 0600, d_swiotlb_usage, + NULL, &swiotlb_usage_fops); +} + +#endif + static int __init setup_io_tlb_npages(char *str) { @@ -449,6 +494,11 @@ phys_addr_t swiotlb_tbl_map_single(struct device *hwdev, pr_warn_once("%s is active and system is using DMA bounce buffers\n", sme_active() ? "SME" : "SEV"); +#ifdef CONFIG_DEBUG_FS + if (unlikely(!d_swiotlb_usage)) + swiotlb_create_debugfs(); +#endif + mask = dma_get_seg_boundary(hwdev); tbl_dma_addr &= mask; @@ -528,6 +578,9 @@ phys_addr_t swiotlb_tbl_map_single(struct device *hwdev, dev_warn(hwdev, "swiotlb buffer is full (sz: %zd bytes)\n", size); return SWIOTLB_MAP_ERROR; found: +#ifdef CONFIG_DEBUG_FS + io_tlb_used += nslots; +#endif spin_unlock_irqrestore(&io_tlb_lock, flags); /* @@ -588,6 +641,10 @@ void swiotlb_tbl_unmap_single(struct device *hwdev, phys_addr_t tlb_addr, */ for (i = index - 1; (OFFSET(i, IO_TLB_SEGSIZE) != IO_TLB_SEGSIZE -1) && io_tlb_list[i]; i--) io_tlb_list[i] = ++count; + +#ifdef CONFIG_DEBUG_FS + io_tlb_used -= nslots; +#endif } spin_unlock_irqrestore(&io_tlb_lock, flags); } -- 2.7.4