From patchwork Wed Jul 31 06:26:42 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Huan Yang X-Patchwork-Id: 13748147 Received: from APC01-TYZ-obe.outbound.protection.outlook.com (mail-tyzapc01on2061.outbound.protection.outlook.com [40.107.117.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E2F2116D4EF; Wed, 31 Jul 2024 06:26:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.117.61 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722407221; cv=fail; b=m3OZbL1688vkeFFRD7MSYjHVgatb7aZqtdFa4fJGuV1JYYlXK3rZzmnSi70RyF5RaYkhSytRmE+GLUy06svgG3QUzxNnVMB+O0q9CaLIpY/NBc/M6aI4tVhKpPLhHFK19HNZe8mYz8FT6FehQ/yoZtrEg/Vx9D1AJsEVTCyfz+I= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722407221; c=relaxed/simple; bh=3S8fUKgvOoAJ6ilK7+5LLibE1JN4dhfGhG5+jLYydM4=; h=From:To:Cc:Subject:Date:Message-ID:Content-Type:MIME-Version; b=bkjcdv17H64/JTT0xUQc/ZIVk2RECahs/MXP1oUgqwUrJkqQ5QyxrfG7NWh8EdcHNzEYM9oZuLjBAfH8ZQj6EJ2Br7uG4as+EOODBpdFwpkDYJkXZIPicYzOTzXaodiCdyYa4QZ1tL/LJP3umF/uc/gN9dnLf/hS4wZAjeBn4og= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=vivo.com; spf=pass smtp.mailfrom=vivo.com; dkim=pass (2048-bit key) header.d=vivo.com header.i=@vivo.com header.b=ZJnFzIL4; arc=fail smtp.client-ip=40.107.117.61 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=vivo.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=vivo.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=vivo.com header.i=@vivo.com header.b="ZJnFzIL4" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=s1rAW7S2vVMgTBJb0sFzJuTplqU1HK8MfeCNmjRXsc5103PaLGO4OZd3KAzxxfcIqTk64xbgijEUHOPUy7ajT0XFVsqGRev+51bXpuQmJGahdaEhJT785lbgUnv9s4vwksqe75eHCbgf4KLPCEpBrd88P17ycQKvfsSr6xSgLmOIvnwPEqsplVll8vBoPnB8jTe7XaE0Gb2Xrb8BD5dNZzimY50QfxVKTpE2E9T4UcNEIWxhyWKsjgXe8kGrEJr4E9raZxl8cc8q/3ZR4Ov1PdVpqwuUUbhBRqMy4RVDBwKgpHaGPy72uFIHaqfFL8N/lTIkAyJkzVkvVw4cdqQMmA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=f5qh3ztOAiwwoA98nzSe8h2NnoEfP1iipqo4UkErlLE=; b=VeSyka8vbHnBHLU24mE2muXHBtH4rAolygCcAotPpZNs4JrhnP7OGPUB0vMURSG+a0iH3K3ngD+xgj24Dy4dMj57SomzxqhmfwroGVQjaBSWllMFwEnojqOl/Biw/gflxyHMrvlhbC5nSwdNyN6GYhf1Z9dIfhN6JrWlK0p2sQ9Hj6pLJ9SfxfYT77jddwwDryw995NzxTd3Q0xJTzW6/U5dXmGPiAb58fI58KV9i/FL8V/YsHIvsyOJWisAbAYoyfLqCChFs0CgKaeT+XF/IOxIQSc3U2bbf2eizk0ceL4Pj1Ww8OjxheNzm0pTjrPimEHuYA0X1xI3yywk/nJlkw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=vivo.com; dmarc=pass action=none header.from=vivo.com; dkim=pass header.d=vivo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vivo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=f5qh3ztOAiwwoA98nzSe8h2NnoEfP1iipqo4UkErlLE=; b=ZJnFzIL4DDgZIZ8S05k9FsDSWhI0h7jBUTg3o/7MIQWXybyq7/8CcGTMZDoR8vhGWZiAEJpljrpnrBAJVe6ToExNOLn4sbdCDWyfPIwmLHkcUQybQ1xZwkIa2GOLTa+nudOhfQ7PlTM2d5Qfq2n1abSz26cGFov4rvc+cvkedRqzTi8eDqmhjrSyXhSXg8BJlMJUS1noD0/fj+ssK2wBZoqyEns4vjlUAdoZTAqgeu9lNnjfBruLRuu3ScPtpjzEcFPOu7EUIzeHA3txmtHhO7rOHsBvvTR1PGfEFRjOAc3yVLaxdD4xTVV/gxoridTt1COSK2dCmHSXbtKsTHD1XA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=vivo.com; Received: from PUZPR06MB5676.apcprd06.prod.outlook.com (2603:1096:301:f8::10) by SG2PR06MB5084.apcprd06.prod.outlook.com (2603:1096:4:1cb::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7807.27; Wed, 31 Jul 2024 06:26:53 +0000 Received: from PUZPR06MB5676.apcprd06.prod.outlook.com ([fe80::a00b:f422:ac44:636f]) by PUZPR06MB5676.apcprd06.prod.outlook.com ([fe80::a00b:f422:ac44:636f%6]) with mapi id 15.20.7807.026; Wed, 31 Jul 2024 06:26:53 +0000 From: Huan Yang To: Gerd Hoffmann , Sumit Semwal , =?utf-8?q?Christian_K=C3=B6nig?= , dri-devel@lists.freedesktop.org, linux-media@vger.kernel.org, linaro-mm-sig@lists.linaro.org, linux-kernel@vger.kernel.org Cc: opensource.kernel@vivo.com, Huan Yang Subject: [PATCH v2] udmabuf: use kmem_cache to alloc udmabuf folio Date: Wed, 31 Jul 2024 14:26:42 +0800 Message-ID: <20240731062642.1164140-1-link@vivo.com> X-Mailer: git-send-email 2.45.2 X-ClientProxiedBy: SI2PR06CA0017.apcprd06.prod.outlook.com (2603:1096:4:186::15) To PUZPR06MB5676.apcprd06.prod.outlook.com (2603:1096:301:f8::10) Precedence: bulk X-Mailing-List: linux-media@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PUZPR06MB5676:EE_|SG2PR06MB5084:EE_ X-MS-Office365-Filtering-Correlation-Id: c39cd229-bd3c-4fd2-fd92-08dcb129c499 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|52116014|366016|376014|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: dQYRm0xhcRTNH+LOGF0oweOquNVO4n+yAna2ESh42Je5iyWUjDBJissYvUM4+WNtbE5blRBs36oXOtmVue/EqyDWqLrib8P8+Zpy1KQ8Ib8XAF7XSflh4U0vY/VWSwPPJ1mQ0FHSI8+J1A6JYOSzrwyBZ3qcCW6+Vzm0r0ysrAA/SOCCAhBLqSM3RPU4NBxdBsBW0VkF8WlPhFw51KmhnQ3cnd/jYI+DAJD9vRRcK+O20V8cNE2XMKb5UgNysSPuvdtRDQojbpqQ2I6XP4RuSaMps9OcCdfZJeaRPy8mlbwvpEuM4LcDBVYAyXMnvcUNUDfwTcjhebpDoo4OEvS7FDIF7psIGKFsgySqpoVv7BadR0lCr/f25l+i3arp8WH096utKU1iX+5wQFXc6gMkv/KZbXKW421xdxBsBOAfoTC/hgLnLNC3s9+FAHdhuxZvs3po72vxNTpc/g+RKmVtks6AQ/9Cck7XTt0M8fyyZQakyoVq+JivFNamiYqxr+TiRXkbhkGx+wl/N0rY0Ni8Vg+ytDg/36chVGIvomyihLdO0s5BTyxAEJ+ZBX0broqN+NSYjZFzJ3KteoD+gG//AUcrv+kh75FjXGXukKBPrFwqMTDudatDxjcAhe+BRHeyqimIzwLMFXISPmHKaowXPBTj2LB1tz8mfz+RNDaLV/ciH6mOkZewu4KykxhAITsmaHuQOzYn47sjoYr8wNVFeT4rCnvTbuXBGVA+1XlSYRldlhtnLRV0SNKk53/1stzC2urLqnXQIzp6g+xDTx1mOXrP9thDnANoNJwepWQ+o7dE6fNE7BL1uYRclFf8HLM693zUflkCKheQbRWbh7AUKQCMEL20k/4KTgU4FSMZHQFRgoFS0wLnsLcke0U5BlsjLz/pDkqydgPAFp9/nsVjAm9vyAtb5aRm0JSoF8r6igrJJFezyYdOWvHX8VkQv+6tJ2oimrQqbcOaTJZGX+OPiaVfQlCF5UYrigW1/Vnwogr28r9F0301DOmjrfiYKjuwxp5zqTzwW9vSH40EgITwDJRUOMLWKPvxVckQS+YWDUMRaXCUT4cYvmeuH1MJjEItLQEkP4CPdIk8/Sgx8yTcuvTMu9ifXNIZO6pohUrLSGcSMgVNgPDW/6wdZpZaCfQTBJcJnxDwpO8oAdiC4NzskjUqNNLqs7z2UVl4NTLAs4y/4SSYktwqbIKC0kagWYRvmGDEkZUCZdc0P7YOvlhcKwwfYRdoXeGjEeCjWtpsR/X9yuPXViG6ymPksCjbLqpalGHDKrW7EEfjSuwTpZiECTRmbDMMi1qhgf1K7ITyTgtzo/wEbsra5czFIIYCY19/5kKpGGHvYAkvBD55zdP0XCYpOE35y/S7b6ROIqioGNhPBeMIM3hCVsfYMoVlnkTZg5oc5nPyYDuJSHPtvDC2uA== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PUZPR06MB5676.apcprd06.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(52116014)(366016)(376014)(1800799024)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 6qwY2bFQIBXopiEQhgNwzSqtyXHKQjrHDwLOlP61p4TfupSoA09kbIwlbexkR3JZtSRiyAKsLwzlALUEd1x6RBwAEvs+dBI4O489GNfi9MW4BdGFk14UmqVAClc1MZOL9p84mtWUCDGk148OVcZEimw03HVUecMnl80r7y9lT2KAgtQ3vHBi4z+xh9ddEB+rGHWxzWeIN1UM2hYffqjRMYPkDiTCOLSWNMQJh+Hh6UMTPyD23mOYgFRaUs8sU4rnY13ej7Ia5SAaBvPi2tD7vjC6Sx2OIaTPWG38Xth2pZaKrM/Az1+GC5Xhx4LFig3LOdj4+iVUqrYGdJjFs0QWqJffv8TGjFrzgF3wZ8TRY9NcuZXkb5pHVC91g9bY0r5rEmlDHSsBjoZlq2XW6vLtd0TX8T7ICVVzNBY6as/0LzmAo4JWPC0gc+EvOTZm7g05n63VB8a1RA2Ql+wrq/Mnj8yUffCZQdUsfmXtmGk95Ip6hX4PhtJm1oPziwTAWxcQGr8vEBOfQPDFAO7gxUP580g7BFOPYGiJgLlOsoKXQZ1LeG6I+HTuPlnFB7YcSaSS28pO+uCeTHvkXScxBNASRaQQpmHpv1bQkEQiKX4WLCGUQ5xIfjXWn5vZBxwDhxCquoqhp1tGNKqdu9X3uInEngb6RhuxuOTI0uxQVKOmCq98JRnOssXCBVnM+ZPCqwKdxXjf56LONFkAW/JsMXA59g10nkiZD4POfNi7n+4IuFq+Uo2wnz1kFEltoXVn4jOG45QUNhHILKGktA1CYzyzUF5VDPjSk4uqTX1wNDPZtbJToxH9RbabsHvgRXfKv34wKGv0AKK2dUAnhjafZYvwEuD+w9PP8NHKH9wzwueR6SUHzCD8dFM51Jqgqr9MFy2sCPrGPL5+BJDFOl/LMhvpklLFRtuOcbrHI+AOdxiof+Dn+j1HkJHG8aKF5PKoQE5uf6hGNX2W9DNN4tmC45LSJxu25zwH5RjKjaPmFhhrpdmLun7oDMDpdmSuf3J3LYRcYSKdz+hutQZwvSyy5FXI6Ff9KiACBt/LZ3fh7wJGEdEorn+9tx++rudf/Jp4HrpaubxLKpz1fZ9bKsdhT2SjXlJosV2TmaMpcBWTgjLWnKVT3GI3CL+Gm0Pd9iM80F8W64+rZ9KgSoeP9mFEInPTs+Kn47XpAi5WGGWnZdOUjnDZlz+ZnYMrsRhhWqoELvFYkVxH+wKBoQEJelxHNsgnb8AlOWWXysCEzatExjXaJLG0JWbVDlkJTOXb3GidUa1ZjQqbw/y+nRkdJhYSO0m4ynJioA+hhrObdj5ztNPM4RLQr7YfirSbYvJKHOA46CxD+oAcD8c26pgajfw1/JIYowIQApUvszizrbaPZfE4f0uz1/Jgq8NIoAu7gKTSOJMJROqVHKlJcgIi1M38BOfHNav1XFM56l/7Dfq56jfFndI6Zj4P6K9Dj+Y2s7BdqV9xVVWUYLfYh1QDqJ+dQGWsO7qZ7T0laDU9M7NqX4XqrLmrPimSSzCbupRBCB1IEMYLP4DsIlA8w6sTO2zysrOeAzaDY/a2YWYtXDu+UXOnTQR+pqU4IixHmbhNRJM4WHU7 X-OriginatorOrg: vivo.com X-MS-Exchange-CrossTenant-Network-Message-Id: c39cd229-bd3c-4fd2-fd92-08dcb129c499 X-MS-Exchange-CrossTenant-AuthSource: PUZPR06MB5676.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Jul 2024 06:26:53.2803 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 923e42dc-48d5-4cbe-b582-1a797a6412ed X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Bq/hGQpwXEj41YKdKhy0r6vwTttYwsExRzXdIA0HAv2/W8Fb+lFs3BNNUwSkRujhqm96/JNSXbIaeZp/XGGvoQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SG2PR06MB5084 The current udmabuf_folio contains a list_head and the corresponding folio pointer, with a size of 24 bytes. udmabuf_folio uses kmalloc to allocate memory. However, kmalloc is a public pool, starting from 64 bytes. This means that each udmabuf_folio allocation will waste 40 bytes. Considering that each udmabuf creates a folio corresponding to a udmabuf_folio, the wasted memory can be significant in the case of memory fragmentation. Furthermore, if udmabuf is frequently used, the allocation and deallocation of udmabuf_folio will also be frequent. Therefore, this patch adds a kmem_cache dedicated to the allocation and deallocation of udmabuf_folio.This is expected to improve the performance of allocation and deallocation within the expected range, while also avoiding memory waste. Signed-off-by: Huan Yang --- v2 -> v1: fix double unregister, remove unlikely drivers/dma-buf/udmabuf.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) base-commit: cd19ac2f903276b820f5d0d89de0c896c27036ed diff --git a/drivers/dma-buf/udmabuf.c b/drivers/dma-buf/udmabuf.c index 047c3cd2ceff..c112c58ef09a 100644 --- a/drivers/dma-buf/udmabuf.c +++ b/drivers/dma-buf/udmabuf.c @@ -24,6 +24,8 @@ static int size_limit_mb = 64; module_param(size_limit_mb, int, 0644); MODULE_PARM_DESC(size_limit_mb, "Max size of a dmabuf, in megabytes. Default is 64."); +static struct kmem_cache *udmabuf_folio_cachep; + struct udmabuf { pgoff_t pagecount; struct folio **folios; @@ -169,7 +171,7 @@ static void unpin_all_folios(struct list_head *unpin_list) unpin_folio(ubuf_folio->folio); list_del(&ubuf_folio->list); - kfree(ubuf_folio); + kmem_cache_free(udmabuf_folio_cachep, ubuf_folio); } } @@ -178,7 +180,7 @@ static int add_to_unpin_list(struct list_head *unpin_list, { struct udmabuf_folio *ubuf_folio; - ubuf_folio = kzalloc(sizeof(*ubuf_folio), GFP_KERNEL); + ubuf_folio = kmem_cache_alloc(udmabuf_folio_cachep, GFP_KERNEL); if (!ubuf_folio) return -ENOMEM; @@ -491,11 +493,20 @@ static int __init udmabuf_dev_init(void) DMA_BIT_MASK(64)); if (ret < 0) { pr_err("Could not setup DMA mask for udmabuf device\n"); - misc_deregister(&udmabuf_misc); - return ret; + goto err; + } + + udmabuf_folio_cachep = KMEM_CACHE(udmabuf_folio, 0); + if (!udmabuf_folio_cachep) { + ret = -ENOMEM; + goto err; } return 0; + +err: + misc_deregister(&udmabuf_misc); + return ret; } static void __exit udmabuf_dev_exit(void)