From patchwork Thu Mar 27 09:28:28 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Huan Yang X-Patchwork-Id: 14030879 Received: from HK3PR03CU002.outbound.protection.outlook.com (mail-eastasiaazon11011015.outbound.protection.outlook.com [52.101.129.15]) (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 D51DA20D4E3; Thu, 27 Mar 2025 09:30:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.129.15 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743067803; cv=fail; b=kzHak3ZPdQvA/aWZPfQF8801qTMtMQHac30i3rTVG68LLuFmCnRg+zYQNfOcOaiOCujqwksilGq6LdXG9Rt979p/YInlJhXUwT4CP+J6INUZXPczhc7pwq3Psh+fI6ycuLtDJZqp433Ms45Oo/axFvdKRjeTpLITJ6KWlD/6Gxs= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743067803; c=relaxed/simple; bh=ys+xteQV3Naj2P+OufJfKvELyTzJWe0Rlc//ydd1lVI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=JOlI7kayfSOKItEG98ebMzE9K+7+Q5lHyXhwyqH6XcJDzVoh0KFHJ0omQNDz62dFzlmMbOHPQ9f0UDbjYT4iiV0acUONHTP4AOJgVTm4bFB7nPQDNPaaaCc0HyiNLb6DV6VWwPna+MbGKjvPg65nzoOBTozIIGKd7LwQnI3Bf/A= 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=hCHq2mCr; arc=fail smtp.client-ip=52.101.129.15 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="hCHq2mCr" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Tfo35pDeEKGnZkHdM+D11T3KUNUDzr5IThu9OWNYrNbr+ujQz4ENnche16XNnZMyCG4DLgdnycsTWfgn3L9pUMUIMzkiCoegAwywuwxR1JFabFY4bNfsGbTPaaaQtAbQTAAFJEdvl7Hs+vYaO3SlTEF3zTuCT8zyYS5H4ui0Q88KAyaomMFwEJJP2RZ2xrhqmiExfzgEDqN4TQN507oAsQnb9MaCzfqVV+Gtqzt6J2mF81ta3BdXuU/GV3umE4iW/tfcKhy1f/FoQOjnnMBtudjIhX+l8hnU7wf60ufNuuZdVtdIDpHTIqjl5NZj0ppLMYKKeuDJJCNjFl+/8lv4jw== 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=4UKPkJkXQcpTYFRYJI8oQc3rq8StnSPcEHSqw78HvWw=; b=q0ZQyl+KrxfZH8f5FmMxzsGNEhMSP/t+TWP/tgfOZJJrUNFmkpFjTvcTGZah4zq08NPv6GOGkWj0DU9Ql4G1Wfc/o8AUWesd6MWIri9pbIag+mVDhC9HIf3Mm6CahDSgWNiLWXRXV2E7w0Qd48Ra2bsU2YCSgEJsvu/3J/gmAbEUuA3DWDQuxHMSZ3d0jsg/8gq6kGyZppMh1WU44HjVgeKbpsZPETzPIPnXqeZLPfMgUNrco71+bdxEf7a1ROFiw+7O9gVnKoowZdLGl3iNZ34gDsEPJqIuCfe/6+vI4++hpI926ZWGo8xNdZP4+e6VlSJBRi7LMmnyfH2GdThECA== 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=4UKPkJkXQcpTYFRYJI8oQc3rq8StnSPcEHSqw78HvWw=; b=hCHq2mCr7QKrrJYH1wN3kgeH6M1JN+wqFzPahFy/kZukdFJdRwLDSd7pr3YMLQhYhMFHhFaiEsN3KsN0UK30GIpk1hWL2ZgWyG1KV438BJjnfD3sgPWA+OywTOaKDXsU9iWKyerIT+TUBdv07K4urqHg4BEAUTcszFW6Gb4WpjzcsYw4CFe2Yd1Nfe+N6FgrzWCbBTIAKbVCNYy7xMfbgjqCRQUuPK/c71eixQVteVtpM3s+yCwsU4adH2rJzDQ0BQ2cU+Siry0/CnJyu95oe18A2peTjfBSxdWkepz37hqkusVqnwv9ar7riPxYBN9EBrhOO2zZka7LxF/OImAhiw== 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 SEZPR06MB7238.apcprd06.prod.outlook.com (2603:1096:101:226::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8534.44; Thu, 27 Mar 2025 09:29:58 +0000 Received: from PUZPR06MB5676.apcprd06.prod.outlook.com ([fe80::a00b:f422:ac44:636f]) by PUZPR06MB5676.apcprd06.prod.outlook.com ([fe80::a00b:f422:ac44:636f%3]) with mapi id 15.20.8534.043; Thu, 27 Mar 2025 09:29:58 +0000 From: Huan Yang To: bingbu.cao@linux.intel.com, Matthew Wilcox , Christoph Hellwig , Gerd Hoffmann , Vivek Kasireddy , Sumit Semwal , =?utf-8?q?Christian_K=C3=B6nig?= , Andrew Morton , Uladzislau Rezki , Shuah Khan , Huan Yang , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-media@vger.kernel.org, linaro-mm-sig@lists.linaro.org, linux-mm@kvack.org, linux-kselftest@vger.kernel.org Cc: opensource.kernel@vivo.com Subject: [RFC PATCH 1/6] udmabuf: try fix udmabuf vmap Date: Thu, 27 Mar 2025 17:28:28 +0800 Message-ID: <20250327092922.536-2-link@vivo.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250327092922.536-1-link@vivo.com> References: <20250327092922.536-1-link@vivo.com> X-ClientProxiedBy: TY2PR02CA0041.apcprd02.prod.outlook.com (2603:1096:404:a6::29) To PUZPR06MB5676.apcprd06.prod.outlook.com (2603:1096:301:f8::10) Precedence: bulk X-Mailing-List: linux-kselftest@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PUZPR06MB5676:EE_|SEZPR06MB7238:EE_ X-MS-Office365-Filtering-Correlation-Id: 03ab361d-f090-4e61-fc2f-08dd6d11f12e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|376014|7416014|52116014|921020|38350700014; X-Microsoft-Antispam-Message-Info: uICxjpcRpGGmBCQyl4t3TIAEH4EwqwE+luzLAg9hJn+ArXhvnKrLCmBujgAf7m1AwF5pv+QTel/eLVp/ZekMvkFJgPfF6OV/rswByj+M9PuBDOmLEnEnS/FWB4nppNNS4gww1640SBRf/7ulXPYbuprbli4CAcrC1Wv5hq8PZkwCidKd7WzKKNLrr88N21xYgkVt1Xc9ZOof/gFONcMYqLL7cgrOWoHMIA/EmODt+QkeJiuhYosxg6r7BtO6ILw+FVuJXiMr/zCHABOSf+IO9Vvgb2bXpy+wki2PT9eh/CNkEHNie8ZlVzWT8j+Q2nJ4YjZyZuN4T7KZqvLN0Ib5oaBgXr7O4gEFDTuzJzTEWmMCWD2NrwYErNi7d8Dz2S6bBYocqqDLR34pGUX8N1WlZDM0I086dw58+S4tbicZXHR08ndkY7tOxpCr3X1TfOlslxMUedMM9v+oJ1xh1Q5ACS6uSjFIK4F1GHn94DgQtwShy5+4cpXGVJoCWUEsOhttttomJownt2ITNq/SLnS1zqsT/bdqn+LjUT1+7Hux6PHshn0g1cF6PFAmDkrbwIiyqoPnhDQGOGdQdjmIIOf+4ZfMhIwSXU5gKGVE79VjuTZRIMkKW5wbQe3pqQaW9wcwSjf4YuCkLr8D76gsw3zwrPG9uNBXXbAzkHoI6LOH3dueeTbPhXc0sxweo5ZaCElxn1gFLslg/FArNasAy78DOSxWEIsA0L1rFd5rSw28Ur8H8RoZpGEtnTcv9HZtrR8PIxS3L3FwJ6UKlqff8HolaNSjW/FtImBJ9OvOP3cbAM+Zq0XDTltA+iySepWHYcgjY3g1thaRLsIcvc3rbCSMkNvtMx2UxJkDYT2L2HQNrlbw4JeTn2mN8R6yOu688DEA2YzPd+pltpgJNsvh6WvGPeYUYMd49knawoxWHMaNySqOZ+GXEMfToznOxRtHbKbwkalMfXZs5oHAaJHRttKiQOP85DLSuwdb0SDSVNjroLyFuyV976ZBRKJrvqXaL06253Ikl6QvF6oi5tzUKRznJfDPZCvQhkTtB0eAx0X1zzHQFndyX7lrw9Mm5VX2ybh2lbF+e6sJ5Uk4vCtuj12583VHclMQmhVrT+demCU3EDu7rdbHpOyfRYK2iZzhaX04D8baP/82WarPq8dLPnM1QdhVtSNMmkrFKPI+PpFh2ExlTp0P1bz8BTE9z9qUfGPuGhkoAMXFQIK3buQhUAp/SNcG+rjvLI0pg1ee8Ibce5jIWnRNsWCLYYOD4vgyPYYRaVT9FSVSZVCF2L3GVAi9uldyF3i5W33qXOAvNPiyhfHJJbPx8Z1fzn6lzkn6iqS1bLdmiWkFGMgxiBHBDVvj5W8dY1zxF+DaStKL4Og2DCzt65ldOL5dfsZ3yui1ax8AnTqYQdEJGXiA5cl/fL6bO7QflM/Wv6mH0Y6OGL+HYd4N0Zh20qiW82ISBjDvqklm6usrpK48X/OtUUOrC39UWQ== 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)(1800799024)(366016)(376014)(7416014)(52116014)(921020)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 2kXJHhKbG/nL+hPM9quvjchCwbBQS/llE5B2oAZTthwFLnAKlE7y+Fh7Bt7XtCqwG+UApkWHWbEys1etXgjlvB2L7VWqq6Srg1kT53YHOojE26Jy0SipcYusI5rWdwgdqqX0AgRqk9aUia7fv62gOqoFwE4l/IXiUzr9vseFbadfrmMeCQ3u0Y1hD8YGFDw+k81cgdlKJ+nvU3btdP763+ywGurXin2mxzWTqbxzCu7FbdgR7kkoxmWa1rgr47dV7qyCG7AlH2LoLZbIgZH20vPtITDd/WxClECSDo52Ie27X76tTs2IYVQDM4p9/BY5BhxWlX6Uf+QcOobGZSJszm7Ts65E/BTw9TV9DACTShcZRqf+aXEA71BcMsWIKqT42RIzhtRZrWNDDF5g6VzDYhbtSBDq2sdzasTqfty0z9DI1+a5Y4knHpObY/FMyj0M0mp3y0LsMkzudy5E8QVKpP32rI/GEq+fSJ+2pYh5bHwg7B80FIg8Q7vjnQg5Gi1liR6dsLw3HEbolGvG5GVhaxJw93GBemuDeCoBCH70kwBJKCTkJ+rN8Bm350lpT0PW7ndDFLsPK7caSl51InPnEba64gPSAQUxqo8udUGe0meubbeLSDUoFzRq29yGKDiwS8scK8HdfMQq1sopUKEDyUSvURb2i/a6W551nO/f+IECKJbnRQ+SoNVG/mMLcMY1KVGmwebx6UArCaN9PbXWmYLZxzX2HBSgl1OFA+OOtdutxf7Y4964T6VS2VptwZR4HzKBzgXZi2cnvof0Feeh/VJcALp+9xLLAtC18XTLqzpcsjyvw+5dwFbtB2qBJzWfKPfE+Qhj2siYmcoprk5uUgV9SgPTKvFf9DX8atkVXo+BBb3MPTmkYedZzexv/ilq/Ob6B70vLU/yNKfJDdO1R5D92QRTdaaV7HjZFYah1JWwMIpXr3UqdZmW1QY0FeiJxgLl2ZvAjY/Y+b2QHOVgTNXLEib8a2jVTPxWthmpqwGdB4ZDbyZZLV1PZv+we4jLtq/D5CdFT7Z0l+yVLDX0o4oqkbbJbdvZI0UGzWwoeSKP/f+tGz4PSFKm1XwXBDER9PtrM2yNdS2ozS2DlshUrMP7Gfip8sp6ncOnceC/Bkngy6Zyx5cAYnOnm6bHfgcs/H46TDiiTCX6MvpJ6FMR845wOyyF82LwOkydD1QoOjshCIhgIPTbz+ir0Wmung07r8mGdOj20IGURmeU4idcxe1JjFLAKl85I3gqA4RS36wxp2FIydxx/gH8I9aOH/wgQg6l6OE68wh182foo5X9N9HK46MTfEtsoyt6VFudklJxtkK9x1/BdvqYyxWbwIsuFpfmHb8F33w1v8ajZRyoWRboTFqj6FaucDEVk972dZZL5aKHN7Il0Bj1zJZTJZWbXB12x3uJJ1dPWQj3E28BoRVaQayCipr+egzDxU6w/Xab899r99/r7KSkFQirTN7bWGbiJp0Rao/w75Stb7ynCS4xhAXiHDRJJ8EJOK5xAAhpTaY6seIzgi2f8n75owboaPF639scUhcCZBZi/y3qiTzrW9eS+wwM5guY+3xBfJhbw2Pl8/VZRy+F+CdRVCyd X-OriginatorOrg: vivo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 03ab361d-f090-4e61-fc2f-08dd6d11f12e X-MS-Exchange-CrossTenant-AuthSource: PUZPR06MB5676.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Mar 2025 09:29:58.7636 (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: uKmYFyDrV+V4sLIocOHpikwZQaZ6p//m1+wbrnIBK1MKEmC+iqUUDUth6FGMaPJb7tCkt9hsfG58XfGn0J9hDg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SEZPR06MB7238 vmap_pfn design to only allow none page based pfn map. This patch try simple copy pfn vmap code to fix it. Fix vunmap_udmabuf fix match with vmap_udmabuf, use vunmap. Signed-off-by: Huan Yang --- drivers/dma-buf/udmabuf.c | 49 +++++++++++++++++++++++++++++++++++---- 1 file changed, 45 insertions(+), 4 deletions(-) diff --git a/drivers/dma-buf/udmabuf.c b/drivers/dma-buf/udmabuf.c index cc7398cc17d6..2dfe639230dc 100644 --- a/drivers/dma-buf/udmabuf.c +++ b/drivers/dma-buf/udmabuf.c @@ -106,6 +106,49 @@ static int mmap_udmabuf(struct dma_buf *buf, struct vm_area_struct *vma) return 0; } +struct udmabuf_pfn_data { + unsigned long *pfns; + pgprot_t prot; + unsigned int idx; +}; + +static int udmabuf_vmap_pfn_apply(pte_t *pte, unsigned long addr, void *private) +{ + struct udmabuf_pfn_data *data = private; + pte_t ptent; + + ptent = pte_mkspecial(pfn_pte(data->pfns[data->idx], data->prot)); + set_pte_at(&init_mm, addr, pte, ptent); + + data->idx++; + return 0; +} + +static void *udmabuf_vmap_pfn(unsigned long *pfns, unsigned int count, + pgprot_t prot) +{ + struct udmabuf_pfn_data data = { .pfns = pfns, + .prot = pgprot_nx(prot) }; + struct vm_struct *area; + + area = get_vm_area_caller(count * PAGE_SIZE, 0, + __builtin_return_address(0)); + if (!area) + return NULL; + + if (apply_to_page_range(&init_mm, (unsigned long)area->addr, + count * PAGE_SIZE, udmabuf_vmap_pfn_apply, + &data)) { + free_vm_area(area); + return NULL; + } + + flush_cache_vmap((unsigned long)area->addr, + (unsigned long)area->addr + count * PAGE_SIZE); + + return area->addr; +} + static int vmap_udmabuf(struct dma_buf *buf, struct iosys_map *map) { struct udmabuf *ubuf = buf->priv; @@ -130,7 +173,7 @@ static int vmap_udmabuf(struct dma_buf *buf, struct iosys_map *map) pfns[pg] = pfn; } - vaddr = vmap_pfn(pfns, ubuf->pagecount, PAGE_KERNEL); + vaddr = udmabuf_vmap_pfn(pfns, ubuf->pagecount, PAGE_KERNEL); kvfree(pfns); if (!vaddr) return -EINVAL; @@ -141,11 +184,9 @@ static int vmap_udmabuf(struct dma_buf *buf, struct iosys_map *map) static void vunmap_udmabuf(struct dma_buf *buf, struct iosys_map *map) { - struct udmabuf *ubuf = buf->priv; - dma_resv_assert_held(buf->resv); - vm_unmap_ram(map->vaddr, ubuf->pagecount); + vunmap(map->vaddr); } static struct sg_table *get_sg_table(struct device *dev, struct dma_buf *buf, From patchwork Thu Mar 27 09:28:29 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Huan Yang X-Patchwork-Id: 14030880 Received: from SEYPR02CU001.outbound.protection.outlook.com (mail-koreacentralazon11013003.outbound.protection.outlook.com [40.107.44.3]) (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 0F1AA20D513; Thu, 27 Mar 2025 09:30:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.44.3 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743067812; cv=fail; b=B9Z55Flqja/W9NvglNKmqGMGQsArTJCaDtn0m7pzFX9RcjWWAEgHQseAK6a9zikMA3aa7fOZy3/N73kzgPCFV+V/ehgoxJx4hzcQAFg9eHeqQMv8MMJfz40eaKTJ/XRLbEckLLZ/5EbB0ObIE8nGM9Afndpj1S+luUN4mzXSpVY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743067812; c=relaxed/simple; bh=/1zxbQI0kw6O3FP5f7KE50rZwXkijnZ7y9MpHl7Beak=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=AcyY+IOdHFMG65GvyUQvVZAgIsW5/wALAHYm1fvvLLEJQ2PuEE3YB43Vf9qMd0ysH1ZyYFVscRLpPVy5H4e86bGr0gluy/bgiUgnr07LCLSbXeJlekF/kfIHtTsBEOz7R29xj0DF1bgRYjAe+7Gwl/8uUm8Wg9X4OXMK5iKRldw= 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=UrpvigLh; arc=fail smtp.client-ip=40.107.44.3 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="UrpvigLh" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=vIior6L+wAVDMQzmojRkGmmgg5mRSMM/tpZ6mkT/NmGA7/fGILK80PDcKQCGYWv26A2TcOZI2CkuYaTNkUm6HfNs2Tf1eIOgCeJVp5+Ca/sS3iR3Mb5deiqsm3eamdYX0RdR7xKqANawiC2Ht1uSADwbNsu16pcMb2NJvyCLa5rHQiiGAL5evlTeb35rjhEH8GeFUnMJ738YHbWoDOJdujbtLmKxr8+xYGP32tG2T+hPoGJYlaTCPPltwzO5SWnvHWlboEXfBW/ayFEqJ9g5hoYljMUhmSCdNj6cWAGZcUdY2a9ahYnzpAU6VI7o7fbDeGGFRgnpAVDy68M7ULkDfA== 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=fOOnb9+cfRDqAWJwz7ieRVU48ffQ9jXJPy1HhLdXnDA=; b=hXY5cO4kLJt4M7MsCM0qt/MjWhH4w/NvQwknG93n92lLHOZNC6sf3IqU9i0WzW/QmOclSAdt3vOUeqCvembBZItcFkf9NgOmmHflILfB8yS++H42iKR+hoLZ2FS61ATfvJoU+HHku0RfvN87dE8TWFLyTcXkxiSzCnTOj/u6p/ptO/Bqn/p5r6JjkgEBCF42n40BVQW7/U+jkLX3KPwU00EPznFER8TrmDIkx422C4mGeM1iI8x+GYTz/dC7KhEzLH9tnsxzDU4wEa9nvsFQJyNSSYxkTmDFZv5NUQDw+1uTOc2v15n6HjPskR7zo63GfifEOFRRoSC8Ow0pyZ6iJw== 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=fOOnb9+cfRDqAWJwz7ieRVU48ffQ9jXJPy1HhLdXnDA=; b=UrpvigLhqzOlQ62pwM3JlsUWYW+PFyQawKmArcmpFQ31+lZh64vuNvHObd2KSmQwtBHMwR+JacbmOOSnZ1CyYF9KHZ0h//xFGy3dBAmS96uouBY5gj1Q0norn1vamGGwc0dZB8L14SS1i89ofLNxNZe/UXpPi5MohLavA3Jaub7l0bxCiUmZzLeLen62B95C/Da6b1YuTT+LbC3fLICPoW6lxC8jdNutblabG9u4xMwR8ieNICxEOxjrDr1C9XSfbb1Cx7TI5RmC7g6pg6NGea1tlvfc09U88nASWwg76Ct0wJ4aUQqg3gUrqV5Zed1Lc+7P8HfqXpPip65n+NexBQ== 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 SEZPR06MB7238.apcprd06.prod.outlook.com (2603:1096:101:226::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8534.44; Thu, 27 Mar 2025 09:30:07 +0000 Received: from PUZPR06MB5676.apcprd06.prod.outlook.com ([fe80::a00b:f422:ac44:636f]) by PUZPR06MB5676.apcprd06.prod.outlook.com ([fe80::a00b:f422:ac44:636f%3]) with mapi id 15.20.8534.043; Thu, 27 Mar 2025 09:30:07 +0000 From: Huan Yang To: bingbu.cao@linux.intel.com, Matthew Wilcox , Christoph Hellwig , Gerd Hoffmann , Vivek Kasireddy , Sumit Semwal , =?utf-8?q?Christian_K=C3=B6nig?= , Andrew Morton , Uladzislau Rezki , Shuah Khan , Huan Yang , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-media@vger.kernel.org, linaro-mm-sig@lists.linaro.org, linux-mm@kvack.org, linux-kselftest@vger.kernel.org Cc: opensource.kernel@vivo.com Subject: [RFC PATCH 2/6] udmabuf: try udmabuf vmap test Date: Thu, 27 Mar 2025 17:28:29 +0800 Message-ID: <20250327092922.536-3-link@vivo.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250327092922.536-1-link@vivo.com> References: <20250327092922.536-1-link@vivo.com> X-ClientProxiedBy: TY2PR02CA0041.apcprd02.prod.outlook.com (2603:1096:404:a6::29) To PUZPR06MB5676.apcprd06.prod.outlook.com (2603:1096:301:f8::10) Precedence: bulk X-Mailing-List: linux-kselftest@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PUZPR06MB5676:EE_|SEZPR06MB7238:EE_ X-MS-Office365-Filtering-Correlation-Id: d0ecb72e-7c0c-41ce-dfed-08dd6d11f63f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|376014|7416014|52116014|921020|38350700014; X-Microsoft-Antispam-Message-Info: Co+QWTzzwfKg2zYA4uptF4A7R7XbC/mMb5CkrSPlpeagVFtLLT+J8HhuTXhJa6OC/R5SG3m3w9FJAByLYKoBBGYD4ewyAgTpLIj7MTJlR6RkMGskn4NhkK+jGE0iYj16Cp+zIGnZJ8qrFneglfkfyr9bvXE947JOUj1MbnP3FKYwk4t+Nk++gORg0FKafNkGhdivt1Be7br+INeGZvjIlRW4rgquy4NiY2hBr5476S9kqBd40TF5L3rQl36xpDdf4L9VY32Gp7j/1HDtpI4NzBoaZ2S8TAjKOEwwyWKsAqswxDb35CPRiPUpnE1lxneVU3rDBmNz8jktsfk6E1Jhy+JqiqTkMw8iBYjc0Lxf7/iri+XQC674eCumL/JhbGLzM7Of+Hhk/nn0q/vclfDv5SGMjzjiSZoBYFgD4V1pngEBn2T5Eq7dZ0WCyUc+Hj6aJ4nxRzOVd+ajk+J+VlAb43yBX4FSdKqcgHmrYgzkUsjyZGuqbNhtB2q7CZLnyHnhrWQtVosiakoL7Qq2o5a/j9QVUCGO98HMC4U86JFNQGmVH+6agDaJxHuRE/8voPpe4VQq4IJe2yxiBOIz+0ODt0ccADLQVE3FEoTOZfLZbHFcJIzzDBfFTM/6tiNppy/pGtTjgHnW4pmX4rSEhVwV4xJ04ub2IxgJLokgNJBXpGaIN8gMdqx8prbKpBL7iz6ij7096Gq4+KQ25D1imFENKPH/LRsc1qEsD/SCcUXrSOeu3rPpNfh8wdhKVYxfEUzD1YocZIrFB+08+eCTPQyfq9LcoAgkQU6krmOa6Pn3YCbqZjwpIEkvLUFe+EZxyopHOxfhLFEi8KMlIQNPZOdLDKFffRV0P+5K1D2UgblJ7+KAnLUzqJ7ScJmo9cavvOSb2BaBEhRDeD0PR7fdG2jdfZl6kf92lZcuESHjyVP7qTXH7A8lzqiJnuMkC4Q2k+GibUHcH+MsY16w/2tBUeQSA409zZUdHCtW53ETRDRCKOE6mtrXGGoaZvQnljy+pqCAt8Y9kf0dPiLgQZNJEsq4Ajs+cv8h0/aCu0GaeKbmK2wKAnwjW6RLMVudFWGl3X3n0/p7SZbIYWsAbTBA8nhr+www6sn56sR1+2kIlKD8H4j24I+jkOFRnJ0dgRSg1mV/z5djpe0H5hTBVh+xt+yUiYy7jQYANdJEHzpkQSqGYKdQ+JTWJSWVHIV7SaudImmK9ew/1QcmEcdTff9SpMRdKFJ7cRUg/Gt6GU/gYE4imMpQc2nLRtha/bwafceze4uhxkkYIszPyzD0qsONfhQjeK7PGOAdM9v3ivVua4FQHLM4in8HtOYbdttmSzAotpQRX+RDGttToJyVbKDAAI8lYpUljoXHgo9hNtiD6LWSSUPXQoLjooqdZD6dAsqJ13Wf9lWZi+d1rXzslgQjiLBQf0FzO6uvnPK6E8OZ53kgZyJFDRhuv3UrbeugfoChas33ABTi71pGPDFRLN+mfIh45g== 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)(1800799024)(366016)(376014)(7416014)(52116014)(921020)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: Yj3wbmj8a7axBoU6jt6StdXq3ohbSyIhEOsBU7YoFPL3z07K0PnZlGD3vdpA05lxJ9pA0vyFkMb/xkFMKF2YPEGBdqnqjf8gafpY8oQdMHOq6aFemuxk4o6tqX28KAPcvpiwOjJ5vlcPA9rGax1WgBBSRSelBuBghttyi/kDojh8REgqyCfCpjMpGnADhVxX3lWvsVmnOquWLFBnXMfjvGJn09JOpDUribOAMWsEkjCnYrY6YFOiohj2AUxxJUyS3Cz36WlgF3cVB99Q+dNu/YsSHjyojxrzktdQH7LUTRgstP114Gj8tSVMHrnNxqX6VHxTCnoDDAP0EACclrIlt90sZvWouroHD17FKmUZJdv8miPA0qIE8BMtbuLK0oT/UH9EdTeHqSvXg5iDgozx3ILTUPnrsqqA8628ZVPig/vvEXeduO/E1+J8k8xm6hTlHTB/nfywcjDAMINQKT5XP+xG+IBEFJwMgraS/2VXUHqnZnat3yeFHkqF88vjqzJ5hwm1YSii60+xiZTAKZ2bowBa0ZkHfajP9DCfxwNcZ05AF98M5dHC3+8PkCxWYV9yd3CSxzjaHOWjLpYZuaUTM1pG64NKMTyA9UcF59oAmQSJ4FXI523Z+ZzFXhfKRG1G8CWF1zXK8paXMxeZSrr3RhvII51SbDDRfaW1xom6xFEFueM0eZa0O/3l5PrNKA9dfZX5wXweXQp3ra9/YSjtUBIzuLEX5Yierx4GmfK5DraWEimVBdggX33M76QyKv9Jp/b6pTNx5sUykEC7daDWXwcaMEfEEHorIRCJsEurDw1bsRI5WdmBf7+M4nm9gD2X8vSvUHDhFAOx2ZcHIbPTahgFsZhXGQ32vHSw8mdtDLOsaVT5HfTqHOKiFev5vt4Tkp8wsCOjgPJpMYWTwyNnT+ol8VGJx6ncV2C+vuogKWrwzamazjiK3G49kp+0lpHMZR/9eA7Ky3o4bcWL9QCGxwftftDA7XBEGrvoVyzG4Xh9Mt0kDDt1K3Uk5K0nh7XKNVtCfObeKhavQ28XI3KJlDshJbakA/w4Awlem5i4zOfWNWqCdC+pSDikxMIF0mb4efNrJpCm3Kz0D0wri82lp6XBpF74URjY1tv3c9oqO8bByD+8lDSOwdVjtvzMT73PuTR8soPAEiugZGQo1k2oOZ5weLX+ZtjTNRx83jPaDBzYnkhXqA0a0yNNH+ISRGAI8HnUowWhRlpPDTdOWZ0eUTiVhtPte8ULVmEJwYPDOd1RHcafXOdiH9iIJ6E+PM+fqlZjC0Gigk0P2UE/dkmrEaPUjsSFptD6oeBRBfsHLdH0OmVfH20D69Ig1se19BlBOiXhFx7Pi7aZAn2rxs5DPm3ZEO+ZLH+ufwqBZeOhhdmQYs0ltZquLlaoO+4F40J+6qifXXt9n04cRQkY9mQhy4KingVapBsamRO3Fqn1pYio6cnWXW8G8D6lSiPRAkZZ1zC07jwFc1dpPCxZpnb/EmQR4LmlEszFr3aaf790HU1rANbZ1tKHmMQnMta/2Sj5w9bEc4Bz84AhZ2XeXj6v60UMs/G/IcquIlf75HxcIiVvjMqsk12VkxuHCMGUx904 X-OriginatorOrg: vivo.com X-MS-Exchange-CrossTenant-Network-Message-Id: d0ecb72e-7c0c-41ce-dfed-08dd6d11f63f X-MS-Exchange-CrossTenant-AuthSource: PUZPR06MB5676.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Mar 2025 09:30:07.2246 (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: 4I5hybCGsaJoB2o72MFFiW8TytJE+8kzwT5gaYEA0XbGMQGR3ipZfJK5bNxcKeL1xChI7sfkZX+yXJ8PjbQIiQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SEZPR06MB7238 This patch add a test ioctl in udmabuf to show vmap can work. by compare pfn vmap and pages vmap. But this skip HVO folio compare due to can't use pages vmap. Signed-off-by: Huan Yang --- drivers/dma-buf/udmabuf.c | 71 ++++++++ include/uapi/linux/udmabuf.h | 5 + .../selftests/drivers/dma-buf/Makefile | 1 + .../selftests/drivers/dma-buf/udmabuf_vmap.c | 166 ++++++++++++++++++ 4 files changed, 243 insertions(+) create mode 100644 tools/testing/selftests/drivers/dma-buf/udmabuf_vmap.c diff --git a/drivers/dma-buf/udmabuf.c b/drivers/dma-buf/udmabuf.c index 2dfe639230dc..fbe4b59b4c97 100644 --- a/drivers/dma-buf/udmabuf.c +++ b/drivers/dma-buf/udmabuf.c @@ -557,6 +557,74 @@ static long udmabuf_ioctl_create_list(struct file *filp, unsigned long arg) return ret; } +static long udmabuf_vmap_test(struct file *filp, unsigned long arg) +{ + struct udmabuf_vmap uv; + struct dma_buf *dmabuf; + bool can_page = true; + struct iosys_map map; + struct udmabuf *ubuf; + struct page **pages; + void *vaddr, *pvaddr; + struct file *file; + int ret = 0, i; + + if (copy_from_user(&uv, (void __user *)arg, sizeof(uv))) + return -EFAULT; + file = fget(uv.dma_buf_fd); + if (!file) + return -EINVAL; + + dmabuf = file->private_data; + ret = dma_buf_vmap(dmabuf, &map); + if (ret) + goto out; + vaddr = map.vaddr; + + ubuf = dmabuf->priv; + for (i = 0; i < ubuf->pagecount; ++i) { + struct folio *folio = ubuf->folios[i]; + + if (folio_test_hugetlb_vmemmap_optimized(folio)) { + can_page = false; + break; + } + } + + if (!can_page) + goto out_vaddr; + + pages = kvmalloc_array(ubuf->pagecount, sizeof(*pages), GFP_KERNEL); + if (WARN_ON(!pages)) { + ret = -ENOMEM; + goto out_vaddr; + } + + for (i = 0; i < ubuf->pagecount; ++i) + pages[i] = folio_page(ubuf->folios[i], + ubuf->offsets[i] >> PAGE_SHIFT); + + pvaddr = vmap(pages, ubuf->pagecount, 0, PAGE_KERNEL); + if (WARN_ON(!pvaddr)) { + ret = -ENOMEM; + goto out_pages; + } + + // compare if pages and pfns is same? + if (WARN_ON(memcmp(vaddr, pvaddr, ubuf->pagecount * PAGE_SIZE) != 0)) + ret = -EINVAL; + + vunmap(pvaddr); +out_pages: + kvfree(pages); +out_vaddr: + dma_buf_vunmap(dmabuf, &map); +out: + fput(file); + + return ret; +} + static long udmabuf_ioctl(struct file *filp, unsigned int ioctl, unsigned long arg) { @@ -569,6 +637,9 @@ static long udmabuf_ioctl(struct file *filp, unsigned int ioctl, case UDMABUF_CREATE_LIST: ret = udmabuf_ioctl_create_list(filp, arg); break; + case UDMABUF_VMAP: + ret = udmabuf_vmap_test(filp, arg); + break; default: ret = -ENOTTY; break; diff --git a/include/uapi/linux/udmabuf.h b/include/uapi/linux/udmabuf.h index 46b6532ed855..88f5e5516286 100644 --- a/include/uapi/linux/udmabuf.h +++ b/include/uapi/linux/udmabuf.h @@ -27,7 +27,12 @@ struct udmabuf_create_list { struct udmabuf_create_item list[]; }; +struct udmabuf_vmap { + int dma_buf_fd; +}; + #define UDMABUF_CREATE _IOW('u', 0x42, struct udmabuf_create) #define UDMABUF_CREATE_LIST _IOW('u', 0x43, struct udmabuf_create_list) +#define UDMABUF_VMAP _IOW('u', 0x44, struct udmabuf_vmap) #endif /* _UAPI_LINUX_UDMABUF_H */ diff --git a/tools/testing/selftests/drivers/dma-buf/Makefile b/tools/testing/selftests/drivers/dma-buf/Makefile index 441407bb0e80..e5b131dcc2c3 100644 --- a/tools/testing/selftests/drivers/dma-buf/Makefile +++ b/tools/testing/selftests/drivers/dma-buf/Makefile @@ -2,6 +2,7 @@ CFLAGS += $(KHDR_INCLUDES) TEST_GEN_PROGS := udmabuf +TEST_GEN_PROGS := udmabuf_vmap top_srcdir ?=../../../../.. diff --git a/tools/testing/selftests/drivers/dma-buf/udmabuf_vmap.c b/tools/testing/selftests/drivers/dma-buf/udmabuf_vmap.c new file mode 100644 index 000000000000..7bd46c909bdf --- /dev/null +++ b/tools/testing/selftests/drivers/dma-buf/udmabuf_vmap.c @@ -0,0 +1,166 @@ +// SPDX-License-Identifier: GPL-2.0 +#define _GNU_SOURCE +#define __EXPORTED_HEADERS__ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include "../../kselftest.h" + +#define TEST_PREFIX "drivers/dma-buf/udmabuf" +#define NUM_PAGES 4 +#define NUM_ENTRIES 4 +#define MEMFD_SIZE 1024 /* in pages */ + +static unsigned int page_size; + +static int create_memfd_with_seals(off64_t size, bool hpage) +{ + int memfd, ret; + unsigned int flags = MFD_ALLOW_SEALING; + + if (hpage) + flags |= MFD_HUGETLB; + + memfd = memfd_create("udmabuf-test", flags); + if (memfd < 0) { + ksft_print_msg("%s: [skip,no-memfd]\n", TEST_PREFIX); + exit(KSFT_SKIP); + } + + ret = fcntl(memfd, F_ADD_SEALS, F_SEAL_SHRINK); + if (ret < 0) { + ksft_print_msg("%s: [skip,fcntl-add-seals]\n", TEST_PREFIX); + exit(KSFT_SKIP); + } + + ret = ftruncate(memfd, size); + if (ret == -1) { + ksft_print_msg("%s: [FAIL,memfd-truncate]\n", TEST_PREFIX); + exit(KSFT_FAIL); + } + + return memfd; +} + +static int create_udmabuf_list(int devfd, int memfd, off64_t memfd_size) +{ + struct udmabuf_create_list *list; + int ubuf_fd, i; + + list = malloc(sizeof(struct udmabuf_create_list) + + sizeof(struct udmabuf_create_item) * NUM_ENTRIES); + if (!list) { + ksft_print_msg("%s: [FAIL, udmabuf-malloc]\n", TEST_PREFIX); + exit(KSFT_FAIL); + } + + for (i = 0; i < NUM_ENTRIES; i++) { + list->list[i].memfd = memfd; + list->list[i].offset = i * (memfd_size / NUM_ENTRIES); + list->list[i].size = memfd_size / NUM_ENTRIES; + } + + list->count = NUM_ENTRIES; + list->flags = UDMABUF_FLAGS_CLOEXEC; + ubuf_fd = ioctl(devfd, UDMABUF_CREATE_LIST, list); + free(list); + if (ubuf_fd < 0) { + ksft_print_msg("%s: [FAIL, udmabuf-create]\n", TEST_PREFIX); + exit(KSFT_FAIL); + } + + return ubuf_fd; +} + +static void *mmap_fd(int fd, off64_t size) +{ + void *addr; + + addr = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); + if (addr == MAP_FAILED) { + ksft_print_msg("%s: ubuf_fd mmap fail\n", TEST_PREFIX); + exit(KSFT_FAIL); + } + + return addr; +} + +int main(int argc, char *argv[]) +{ + struct udmabuf_create create; + int devfd, memfd, buf, ret; + struct udmabuf_vmap vm; + unsigned long *vaddr; + off64_t size; + int i; + + ksft_print_header(); + ksft_set_plan(2); + + devfd = open("/dev/udmabuf", O_RDWR); + if (devfd < 0) { + ksft_print_msg( + "%s: [skip,no-udmabuf: Unable to access DMA buffer device file]\n", + TEST_PREFIX); + exit(KSFT_SKIP); + } + + /** + * Normal test + */ + size = getpagesize() * 512 + getpagesize() * 256; + memfd = create_memfd_with_seals(size, false); + buf = create_udmabuf_list(devfd, memfd, size); + vaddr = (unsigned long *)mmap_fd(buf, size); + for (i = 0; i < size / sizeof(unsigned long); i++) + vaddr[i] = random(); + + vm.dma_buf_fd = buf; + + ret = ioctl(devfd, UDMABUF_VMAP, &vm); + if (ret < 0) + ksft_test_result_fail("%s: [FAIL, normal test]\n", TEST_PREFIX); + else + ksft_test_result_pass("%s: [PASS, normal test]\n", TEST_PREFIX); + munmap(vaddr, size); + close(buf); + close(memfd); + + /** + * Hugetlb test, 2MB + */ + size = getpagesize() * 512; + memfd = create_memfd_with_seals(size, true); + buf = create_udmabuf_list(devfd, memfd, size); + vaddr = (unsigned long *)mmap_fd(buf, size); + for (i = 0; i < size / sizeof(unsigned long); i++) + vaddr[i] = random(); + + vm.dma_buf_fd = buf; + + ret = ioctl(devfd, UDMABUF_VMAP, &vm); + if (ret < 0) + ksft_test_result_fail("%s: [FAIL, huge test]\n", TEST_PREFIX); + else + ksft_test_result_pass("%s: [PASS, huge test]\n", TEST_PREFIX); + munmap(vaddr, size); + close(buf); + close(memfd); + + ksft_print_msg("%s: ok\n", TEST_PREFIX); + ksft_print_cnts(); + + return 0; +} From patchwork Thu Mar 27 09:28:30 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Huan Yang X-Patchwork-Id: 14030881 Received: from HK2PR02CU002.outbound.protection.outlook.com (mail-eastasiaazon11010002.outbound.protection.outlook.com [52.101.128.2]) (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 144651F4E2F; Thu, 27 Mar 2025 09:30:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.128.2 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743067821; cv=fail; b=PdLlx15Nns5kv1BCkBPajq5tgdkm18A8di2fSui8fRLjpjHt78nbZP0mlWK3O9w880gQYl+xiMCs/LubMAQ/s5eoKZ1n4d8iEadXqBC7ZuLxFrwf8uQaGwskB/zh7wiX5NonytG3zBKsfUQXjcK5WoogI6Oaa7a4xtXgpdy5sBY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743067821; c=relaxed/simple; bh=347JoBd/7VxCzFiUbzfV+4cwiG8MH8gI2dWPsB0CwU4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=jar/4WPc0GuTv6hMDgMVdfDQ7EXysQ3/6fmGgALsTxI0B5N/2TJtmxHzS2OuiaesSTh2rGOtv0N3MoW1l2uZdRf0JJ7gjDdMxvZRFLTUcHrI2Ah/UuYJfrjccf3oCGqS2/nxYb4no5cvXqXwdTjde7r/BvyIyqOIfL3HRXqzEwA= 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=H7GRTfAh; arc=fail smtp.client-ip=52.101.128.2 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="H7GRTfAh" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=G68/51E/vaHGFp/wbqaBgTWX0w6UEi3mjFogDuPXkueaTFFcvDTKMniMtelKt+XohGbUj36R9uwhcXNHavsiTUj6i+O4j708vNkyCP0L17SnKtUyPkhN2+Vv8aP7OXHUH87xW1W7RqwCQAilIGqGwVgurI0rJmIS7RE+W0mwC9+5JOeSz3K3xKAInbx5ESgLP95siQPmLOhujJ6T1IDRlea8R4dNm/igNNi+q7bw5yrKm4CnTLawfeP7NkL1EfRVMyWQZ8JqQQaavknL4bTvvdYM/tgBixrdY+eFdbeJk17/iEiCPhWW/1ZxfRfGUfCkLF5Ur1FndRaEd7EP54WQXQ== 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=fT71xohYSOfDbaretzmMt14K4aabUdBqwW0eBh5Wctc=; b=LclFsfhkF2erylDf5kvys1zvhVVBv2GrUoyHfibADFU1Mt2i2wMEr+R/MQTK3Bmz4kAYhLyDh2l8cySkgeKq25Gzen98OoyXLRbLAazKLCyTXZE7sx1iEwLAAr3hOJqdkz0/idE2v0yArOM2HnzuJaEYE7SPq0oLKSKpT3fB1++Pshpoi15JWMynjXR45NIV9qnXnKQ1nJoLBTa4IhPvdCleNABx7DpnB1iJ19TgzvRTjY+hUoZwqktwJ6hLleZMVKXlnGjpIPewIUmWHHNXqPE+qKxO1ZtbervY975MtTITg7vZ4IZ/idXNKjNyBk87eKbIcq5UO5HdOC1jcnqEPQ== 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=fT71xohYSOfDbaretzmMt14K4aabUdBqwW0eBh5Wctc=; b=H7GRTfAhkD2KcVheHzz8K3Coh9ANsZGjJtxRfwo8wSpDofoMcruwQcp7Kfncl67UqzJ3DmN3KNdjp2QM/5tLUWDbM+Lb6VytB2CJ1MU8HAzpqtUPXhTI7YA6vuQmKcJ6JauT7ED10wdBbf3FDhHFowlazN3iOoVxX3yh5lT865Q4OGjg+rysOUrSEddmIouWtc3f/lmP4moUoOcAGZ1k/ybMPqy95fFUA3gQ+vVR7fRc0FJl1k3zWjDEwEO8Eas30CenCyiTdJaxRIGol9jrnnXtawbZLt70G+/TbAYNAhpp9hkTxg5KLmVg65YtVSLWs6y4GldxKvDXDGYZs4vflw== 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 SEZPR06MB7238.apcprd06.prod.outlook.com (2603:1096:101:226::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8534.44; Thu, 27 Mar 2025 09:30:15 +0000 Received: from PUZPR06MB5676.apcprd06.prod.outlook.com ([fe80::a00b:f422:ac44:636f]) by PUZPR06MB5676.apcprd06.prod.outlook.com ([fe80::a00b:f422:ac44:636f%3]) with mapi id 15.20.8534.043; Thu, 27 Mar 2025 09:30:15 +0000 From: Huan Yang To: bingbu.cao@linux.intel.com, Matthew Wilcox , Christoph Hellwig , Gerd Hoffmann , Vivek Kasireddy , Sumit Semwal , =?utf-8?q?Christian_K=C3=B6nig?= , Andrew Morton , Uladzislau Rezki , Shuah Khan , Huan Yang , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-media@vger.kernel.org, linaro-mm-sig@lists.linaro.org, linux-mm@kvack.org, linux-kselftest@vger.kernel.org Cc: opensource.kernel@vivo.com Subject: [RFC PATCH 3/6] mm/vmalloc: try add vmap folios range Date: Thu, 27 Mar 2025 17:28:30 +0800 Message-ID: <20250327092922.536-4-link@vivo.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250327092922.536-1-link@vivo.com> References: <20250327092922.536-1-link@vivo.com> X-ClientProxiedBy: TY2PR02CA0041.apcprd02.prod.outlook.com (2603:1096:404:a6::29) To PUZPR06MB5676.apcprd06.prod.outlook.com (2603:1096:301:f8::10) Precedence: bulk X-Mailing-List: linux-kselftest@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PUZPR06MB5676:EE_|SEZPR06MB7238:EE_ X-MS-Office365-Filtering-Correlation-Id: 4bb4f76d-92eb-4778-182f-08dd6d11fb2f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|376014|7416014|52116014|921020|38350700014; X-Microsoft-Antispam-Message-Info: LfzcX+Di7nOz0LQXXh9hW4lC4Sfb/U5lBcyKq1O0dvejMsrEzyvBPfkl4Ygl13lQweWtsbjhnCLrb2KpImTF+DgvqugdvTuE2JF68SltMkFXJ/jFb1QuP8Fcyw6Or6B0J7WgYOi8S/s6haC+YaF5ZFj3XR+sXctVIVehMotEnS4KdlDNptowaYj4EcurlzR1e8FD8PgnyfWofOGnohg5JfzrZhFl7YSzO1Qnl7By72T8E3hyiVD71T8GL3RrjWgC9MAD/OeMcu4QzJ55IA66G9nKRBiM7H/50YQcXvBKeOmL3NLz2Wg2hQXIeASgMLCCuNMrc5bi1bSKAF38QmXu1hfU+pOa/mcqt6FDYC8eo/rvIWeGvHwjXNuRHDQ91K637VxtWwrrv4qM82aqPwjiilwHPPM+M2vy/mg0Q9ph6MKYHIyzQFp+ofsnq69KUUz/a9OPDmBUaUL8XAx1yqmqbwkjUURic2ZO/q41EPILmF9n1W7KuauQd0+T7Qegf3ObmTmkVAK6+7mxP1v7wiITjFI8KVzSPDCjoQcFUaghksUigKvUiPgmHimXnZGTmdbPeCD8KdFBCyIpdCRLMCTSb5D6XmkPsFG1EadWxORBw9rOy7f8RahR8DEJB1g7prTJq6nQ2O2y0Ns+Cn6RkBkTr88v759hwcA+px9qWXkSZGBietQ2ewaMswdohvBLmik+9FHs9+91bL4DEuZEjpmvDvFsLpIYWTsUMYiWVf/KUM3bwOPp5zMsfbeygmvG+vmS69LMNdf2hnXTMPUof7RSoQP2q90/dDr3qzmGteqXMSwYOCx6PtlEbf4nvaBK1n/hrwZCOL4i+O6qR4lYqxdTvR2IrLxYGcpJvRmG7nmsHUubHFGV2nZXIBfh8Um7eVHFYHKutMWDaDyVkpEHW0PB81Rw5KQGvLBiyYR3EOfPRzrmIu0EXii7Q/E2nNFjNLIoB5D44IMaPVEd/Ss1T0D3nYvdzM6FrS8c3Xh+ZeRgbeVbv/eSRwQ9uofcGSJybKH4KtGE7BcncofDuT+/AwvlcQzzFE8Jk07v42IkwVraz+elG6qpc2ZN0Bx0HVUx4icGTsrn8KRgKH7Gmu7u9RS1eQrB65kuXZhZGXuwDkk0qBQ4Tl4X15FDMZ71VHLEm7JQUXN/PWJEbWuQ30YmU4oz7ag+c7T1W7gyfgUnCAh+jnUK5DNsEYOLqUchh6VKrA3Ael7tNs8CPCWpkI3YNVmH430WBwuNdbkI0efA9TI59/0lk7ROll6QonBQEcr5ENguFl5lx3ggke9cNtFUG5cnA4VNeYRDWM6TTFwCoCTigGuPxQgecE3BjbPQ/f7CFhupykU7BhBvs9PREF6zb8ROLfM2WHaSifc54kR41I5f8XmF3xhrXocZg5oRGlW0xwHbcOQCOSxsvgSQkuGjfA/3etO249aH84QQVcbitlfHB/OtGkjb1PDarPv6ynPt53M8oRnZIUOdAZYh7qj60N2KTQ== 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)(1800799024)(366016)(376014)(7416014)(52116014)(921020)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: ORpY3z0dhgDA1kXtEMNGjJ1QOEhh6TRqmoNtz4Lx7RRIjN4x0dpnl6S3iOuK+AFhZVlLPzvIQLs8v0fMmATpXhnS+eGrXCgchbnhWsThq3q6jTeXthwrDBW4EZ4HLuU7SeGetzcW+0d5DRqjBmdwt+072agY+gW2bYuZ3+ISEJCSgoFKB7k9hYrv93CLNyBRq0rJyVmsEa/XvTGe5A6xOAqPv+UayRyj7JiPfVrt6MmWX1kZ10s9CkVeTgxxwfZGV8vuO+ivAjww8dtEdUfOLaXuPAb2a+EbJ8FlYCa+p6hbfONfFXc87UIrMU2Qz2V2EDql6ZfAD3nvCYa8bZfSliTdCcwTBRQ4ibs9qAIJjo6cPtyCB5l0BoGeL0GTpufpO2WxBUqGPepYfpEvO9e7wG16UlJoNv2FRgvcJq0/ZC9xkhwky8h0kNTdMIO/0AX9ruktp7MJ7SvZ7o+fW4kXb/615gvknbcvE7T3iNMBSS80lab3TIisFsHcKyLVah7V8v8F0/o71jxJ2Uu6blHZKiqVs2k20N3UNgTHOoEZhFCroe/K/sZ1E7MZsN41E4L/y7BjhSuUz/BzNbxZMSX05sH7JYyghCXy3rqBbcJLEimw9VMNTfuZjwtE95JIgj21GXzyMSlCnHCNZW0RDXxAd2ygzOdOc5KfShb7NOVK3OphpydOm+MKU2FeVoGrrw09cual5ZkeeLCJd84/W5aJUSOpYLR70YK3j6yJtRKOtu4+idY5nJ5f5UxuO9lz73ensjuPksQGlBYyQSAW4clqlNlRoTWNKsbnuHQqvHvssWpmST6sSuJ40RA4q+EKpHDiYHoJW6jC5RIWzYjJNb12R5aGNy0y8DTzBJ+F7Uuadqizjeo75G2wB4Bt75VqoTWat5d5fei57mcp+2T2xwU0bzfcyAr6p9w7ZOlFFIIZ2FX0w2UGHC6kCd4DNDwOp6E0EhTD53L/3+784ru0x0JcJy1CgtZKyUlllaTP/l6VqzxW50nUJS6xaxIjAUlw7xu0HCMl9TRWBVzPN19DEV5yxwPeTPu93DNgtqhknpcEAX0ZjjpqtF3Za4glWn5vyt0v8fYWIGyyX0eN2/ZFs+UM4HrtcFgD36N81w2vC2tOx1aE/hkiSpdY4HfhsX31jcxnK9oVpqSseGvvImdodqRK8XZip6VrulAVzyLGo1Yu5D4XfWCLrG+9DSjBUX9vpJmBqgL9ZNPdpFw3X1X65gjFcfpnjHg6ItmssR8hhbus1nPpRtxQ9ZMfV4/6QNAQpNAAhGBq+F4lQvTX0N7kOcOOOvoIsM65Ax1Znep6CoYLqHqF5oeJ0d/bZdieSPG/YJpUVSNm9C3TyTN88Lv2URGyefiu34WIKYYORdiINT9GUtPpFtgdSRHH6iKl0LVzCRcZvXGANHaHq351j2HTtDIyB9la4eU2x0HwOOGj+ivEjuhhQ9nPWrjTKiZQv4R3eLi8aJ+Q5rZL2tZElJS7fXmuI7o6Id5q3/mRufqFjbA6PATTaN/ldztTO8U6Xgv39WWvF0KSFjLmC3CtGjtlCbI92+Enh6+0PElmVw586tR/muKdqupsN8M8Dofyb7r+nZZl X-OriginatorOrg: vivo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4bb4f76d-92eb-4778-182f-08dd6d11fb2f X-MS-Exchange-CrossTenant-AuthSource: PUZPR06MB5676.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Mar 2025 09:30:15.4864 (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: YiAh7VJGkHN/rpKIFmHy2sEVCBBpdgh1t/HQLPmnrI2cX41GmOMpA6Dat9Q+srYTOHzwjiFFnJnIOAmwkWDdiw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SEZPR06MB7238 This patch add a new api vmap_range_folios. It support both entire folio array and range based folio array. By this, some situation can support, like HVO folio range vmap. Also can reduce array size, compare to 4k based page array, only need to record each folio and it's range(offset, nr_pages). Signed-off-by: Huan Yang --- include/linux/vmalloc.h | 57 +++++++++++++++++++++++++++++++++++++++++ mm/vmalloc.c | 47 +++++++++++++++++++++++++++++++++ 2 files changed, 104 insertions(+) diff --git a/include/linux/vmalloc.h b/include/linux/vmalloc.h index 31e9ffd936e3..007a398152af 100644 --- a/include/linux/vmalloc.h +++ b/include/linux/vmalloc.h @@ -11,6 +11,7 @@ #include /* pgprot_t */ #include #include +#include #include @@ -83,6 +84,24 @@ struct vmap_area { unsigned long flags; /* mark type of vm_map_ram area */ }; +/** + * folio range [pgoff, pgoff + nr_pages) in [0, folio_nr_pages) + */ +struct vmap_folios_range { + struct folio *folio; + + pgoff_t pgoff; + unsigned int nr_pages; +}; + +struct vmap_folios_struct { + union { + struct folio **_folios; + struct vmap_folios_range *_range_folios; + }; + bool range; +}; + /* archs that select HAVE_ARCH_HUGE_VMAP should override one or more of these */ #ifndef arch_vmap_p4d_supported static inline bool arch_vmap_p4d_supported(pgprot_t prot) @@ -195,6 +214,44 @@ extern void *vmap(struct page **pages, unsigned int count, void *vmap_pfn(unsigned long *pfns, unsigned int count, pgprot_t prot); extern void vunmap(const void *addr); +extern void *__vmap_range_folios(struct vmap_folios_struct *folios, + unsigned int count, unsigned int size, + unsigned long flags, pgprot_t prot); + +static inline void *vmap_range_folios(struct vmap_folios_struct *folios, + unsigned int count, unsigned long flags, + pgprot_t prot) +{ + unsigned int size, i; + + for (i = 0, size = 0; i < count; ++i) { + struct vmap_folios_range *range = &folios->_range_folios[i]; + + if (WARN_ON(!range || !range->folio)) + return NULL; + + if (WARN_ON(range->pgoff + range->nr_pages > + folio_nr_pages(range->folio))) + return NULL; + + size += PAGE_SIZE * range->nr_pages; + } + + return __vmap_range_folios(folios, count, size, flags, prot); +} + +static inline void *vmap_folios(struct vmap_folios_struct *folios, + unsigned int count, unsigned long flags, + pgprot_t prot) +{ + unsigned int size, i; + + for (i = 0, size = 0; i < count; ++i) + size += folio_size(folios->_folios[i]); + + return __vmap_range_folios(folios, count, size, flags, prot); +} + extern int remap_vmalloc_range_partial(struct vm_area_struct *vma, unsigned long uaddr, void *kaddr, unsigned long pgoff, unsigned long size); diff --git a/mm/vmalloc.c b/mm/vmalloc.c index 044af7088359..247a4b940be1 100644 --- a/mm/vmalloc.c +++ b/mm/vmalloc.c @@ -3530,6 +3530,53 @@ void *vmap_pfn(unsigned long *pfns, unsigned int count, pgprot_t prot) EXPORT_SYMBOL_GPL(vmap_pfn); #endif /* CONFIG_VMAP_PFN */ +void *__vmap_range_folios(struct vmap_folios_struct *folios, unsigned int count, + unsigned int size, unsigned long flags, pgprot_t prot) +{ + struct vm_struct *area; + unsigned long addr; + unsigned int i; + + area = get_vm_area_caller(size, flags, __builtin_return_address(0)); + if (!area) + return NULL; + + addr = (unsigned long)area->addr; + for (i = 0; i < count; ++i) { + unsigned int nr_pages; + unsigned long pfn; + int err; + + if (folios->range) { + struct vmap_folios_range *folio_range = + &folios->_range_folios[i]; + + pfn = folio_pfn(folio_range->folio) + + folio_range->pgoff; + nr_pages = folio_range->nr_pages; + } else { + struct folio *folio = folios->_folios[i]; + + pfn = folio_pfn(folio); + nr_pages = folio_nr_pages(folio); + } + + err = vmap_range_noflush(addr, addr + (nr_pages << PAGE_SHIFT), + PFN_PHYS(pfn), prot, PAGE_SHIFT); + if (err) { + free_vm_area(area); + return NULL; + } + + addr += (nr_pages << PAGE_SHIFT); + } + + flush_cache_vmap((unsigned long)area->addr, + (unsigned long)area->addr + size); + return area->addr; +} +EXPORT_SYMBOL_GPL(__vmap_range_folios); + static inline unsigned int vm_area_alloc_pages(gfp_t gfp, int nid, unsigned int order, unsigned int nr_pages, struct page **pages) From patchwork Thu Mar 27 09:28:31 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Huan Yang X-Patchwork-Id: 14030882 Received: from HK2PR02CU002.outbound.protection.outlook.com (mail-eastasiaazon11010046.outbound.protection.outlook.com [52.101.128.46]) (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 8900420DD54; Thu, 27 Mar 2025 09:30:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.128.46 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743067828; cv=fail; b=BfbMjYr8aNGyiwH15AmIuix2331A0NTFx2FbPkRKUAXBzaWyLxtYOB04kBPvhSSTQ48J9HIgPHLmluypfoz6XJ3Qb+gFLVOFe+uBLkuBfWljey3+tBROmpAIdcU+vaqwhKQWxAaH1WfXdyQEr/vKzV82VOlSdNf0+7QYg+3Wy4g= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743067828; c=relaxed/simple; bh=ClwdiLXa6uQoyI03ZfqxSzNMu5BmcYM7BX5xx6WT2WU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=ePC8AO7koMzUys2vdiIPChAGg6EjfE9XjFgVHEsuvhN2H7obMz5d0VKws4PPAN9B6zkj8Iqh7oANvK5I+UfdNz5Kntizhlri4OhrpXYpnsPi2wV1yn4FYrdW3BM+GMSqWwJ6ctICBTMZKKJU83sXx1+T/BNO3lB020L/xu8j/lk= 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=Ari6cC7j; arc=fail smtp.client-ip=52.101.128.46 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="Ari6cC7j" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=syhR6ZHqxJIZ0QX9jrfbWBit4HR9rJfT3y1cDQ1F9FveElaQGIVgdqizWqb1xUurJX3Ml7pTurjQSTrhxLdl4YdQP+72KYJru6yVFtHPbRBu8cLLOEOLDI/VNTvpU3aIGvfdZFQpvv1GGFDVUqJUclE9be7toTEUsv3VjWAjHMaUFnybdRqcgUoXenvg9jYH60SH64r8HAPlysK1W1/oDr4NdqJkSCEl5OoxX3vaOHG53w3VNohNum3vDN2QGOj5w7ZYt1P+HjSFw1Rz2T5Y+NWRnY9U4W/vZWfo/m7bn4lNFgMw5BSH+/k3/tiSHgZorhGN8u8FNnW5AGPB5LTU0g== 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=jWK3dj+fpZ5P2lvnEIC8wa18G9b/LZGOyrIDO6TJcUM=; b=bWnU0VioOQglp+wqX4bi5loymkJjwMEOAxlpjtNSMuvBUQodk/45YC9nvPaBuNl2TeYUlDCu/tCRMnT/cLFVfoCHXud2YqkMc0nAF4hXKrexxf6dPR7voM+T722qOq0B9hI5obR5y5V0oCXXSVTCg4h/70KIQIUDnd9jfm/1APIKWB9KG+Jjd6HoNVwJxp4iRAhWB1OHVj9Jof1+CikBVTfLRtLOORXu7Li4es+adDv7L2MX11IGH5CusqKDjymmIPAMDjU9raqg3wjFe+EsESHfPDyQVxjRRLkmA+VLN0XtlHFOfVNLCL+1yyaIGY2SSkKhYhBHh8suvwtr1KT/Lw== 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=jWK3dj+fpZ5P2lvnEIC8wa18G9b/LZGOyrIDO6TJcUM=; b=Ari6cC7jtad3J1hRpG1CsZjnB19EVJu9ggpEGRtrbmBoQ13oyv2PKwQEzPOKdHbKV0pRkcwMFvfLurBqnfTiS7nMTjxkra5mIFaRSGBhH4kryQNiOE5l3lbU7USI0JbVBF0VhLLUoKORjA8/HmzVbx0Ne6hfwWF8Fz/G3EvwWNHXLLzRd/in8LCBzmteaNCGAid6JV/1LxtrnT2QcACGkyfWaNtptY4nAaxMjDuBhB+rUOuGYMX0seSVnfJ8Kde5n3G32eMm0e7I7ZgqRxIv3ylHV0ZTJAmg+x9aVRhfq18Bge2yc0/3QwLxf0SCoxFd6noROdqSiaT2Ja/DdW7Uxw== 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 SEZPR06MB7238.apcprd06.prod.outlook.com (2603:1096:101:226::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8534.44; Thu, 27 Mar 2025 09:30:23 +0000 Received: from PUZPR06MB5676.apcprd06.prod.outlook.com ([fe80::a00b:f422:ac44:636f]) by PUZPR06MB5676.apcprd06.prod.outlook.com ([fe80::a00b:f422:ac44:636f%3]) with mapi id 15.20.8534.043; Thu, 27 Mar 2025 09:30:23 +0000 From: Huan Yang To: bingbu.cao@linux.intel.com, Matthew Wilcox , Christoph Hellwig , Gerd Hoffmann , Vivek Kasireddy , Sumit Semwal , =?utf-8?q?Christian_K=C3=B6nig?= , Andrew Morton , Uladzislau Rezki , Shuah Khan , Huan Yang , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-media@vger.kernel.org, linaro-mm-sig@lists.linaro.org, linux-mm@kvack.org, linux-kselftest@vger.kernel.org Cc: opensource.kernel@vivo.com Subject: [RFC PATCH 4/6] udmabuf: use vmap_range_folios Date: Thu, 27 Mar 2025 17:28:31 +0800 Message-ID: <20250327092922.536-5-link@vivo.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250327092922.536-1-link@vivo.com> References: <20250327092922.536-1-link@vivo.com> X-ClientProxiedBy: TY2PR02CA0041.apcprd02.prod.outlook.com (2603:1096:404:a6::29) To PUZPR06MB5676.apcprd06.prod.outlook.com (2603:1096:301:f8::10) Precedence: bulk X-Mailing-List: linux-kselftest@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PUZPR06MB5676:EE_|SEZPR06MB7238:EE_ X-MS-Office365-Filtering-Correlation-Id: 1e7da61b-f8b3-4191-ffa3-08dd6d12000b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|376014|7416014|52116014|921020|38350700014; X-Microsoft-Antispam-Message-Info: 4Z+S4+XvXfx4oa5c/tSQyWOHQMTGXSoHCVRwQ4HM1BDncMYyZ6Ex7F+qtlhvAlEx34/NMkZDMxTOzKvT5Ag+AFuqWTcPfF8XGgor2WVxqJVrudHcA/93G6RhsSbQ1t2Wt9viPqdlYmhXDWwy55/UrKJ/rNiYe1V8Moq7pilQ3YgrhI4o1lJLTMbG0MBkWdPo57XTTm5Khj1BnQiQGdCOqKGplhN8YW/K7ZQdWRV/OvOY0zFfKJp65rBts9cUPcaEt82r2GBOnfgk7MbJWn32l/CytRMokrGY8qoR2zsVr3qGUKgxQlDVSF9BMrmD5f5J2brtBT1ubNoE4qqJR7Qkv1ZyO/H0xylCUxf6BYvSd08wBGNJOetPgcnUsFHxGe7Die/i1QFybz5ZGcr218+wTT8XCB1M34TrsMhuwng5FWoMF8zHYofJ2dCTZ1r8KMhRAgxJo+9IvZuVSF4NwBmtQMvwK46Kqo19Gw0Nnj6qvlEDuyjY5yruXk+3cscLWwLih3aMO4Zf26VVvGnKPRh5FUPW3imjha5Pqxo+o/RqWJuqj/AfVBZ5WxXy0PD5VZICELwzqSDo0J8dwiarbZlJnBikzREdxLuhtkQvSkNksibrXEFSDo77akByEf0ipTvnFLN0C3u6HtnHi3pWocEciBpaOYQxFV8PGOr4hH/HSHWWH34yanW8AaJhS2aMYSQMCFAB9h4JVyxViwPv/2BclBhq0KxaVcJ9akBweCu0JnjpcQl+IGJRDu3wpLLXJTT424LBM98GcVx5/r0vZ5nMp3rcef5uklYOL/RQoEIfv4vxqwBD5IYkI3JJvLUrljZStVqteEa+wsUatvKoQbFGVEh4SpZ5HVUo0vYpJpIQ+zXFGBcfZ426cJgVhYutw61+LZCQIexg7nMa8BQpIfqZfLhLu4Liu0l6FCsxGqaiQUFdQmUKp6HczMj7WL59wLqIKhD0KEA6yI2VXTZjT28lxWUWTGzca/c9eFoOBaEBVt/3UIffypvmASPwZWbb0geJUTIVZUt82XWWcXyiUQV/eXeOe3corhXAKkKh2E1iHe/0/tjH6j0HJUYAghSHz4hITRoWTmA+gBd7cF7Tgw0oisMuWIuvIf+vOEirPIAT3NMHT3Iz/p05vs5faonXy+moyzsCi7WCdi1UZLGRayI8UJb8ykswvlzfDOVhK7MTlA+l+T7nkF5nLBnJMy9yauj0x4MRLB0WJI+gB9erPPCfSi+N11JPh0OZUq0MWUTr1IgbYsEXzDJKLzGrb5bZjNE8M0ik0weetly6abwMCPhe9pDAsO4ze+dz4kysf2IBFPw6FRl4sp6D3KbTxCRzOldtov9LG117M0OkyIpD+Kgaj+RMVambHg9+fqs0m9qWKpcNtwWnd829gBiYiPj4SXGo+uz1oClg9JZJWDrvUGb1ACzXhIHWvTqdYArGdvnFTayqH9id+OPrFpeNvX3cKgKDoug3bHdnrV0tucTGsiV3BA== 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)(1800799024)(366016)(376014)(7416014)(52116014)(921020)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: ZjxsuCWlbefpxzVq54esX3NK7BGLAua3Q0ab9RHVBX01BMY1/Bv5a/ZM8D53QFRCQ1mYDE3dm1n2S5iDmmQI/9NV8kHDSa5YS7FSb7518fpHYKYCo14saMBFIXqmAwCD5pkaRVKYrSp6Oa1AvyFisnoAn9kif62LG2CKvzmLkyv73DbveaBiqZCCSs+6GrlAEp7EX8fvlS5DQLCSveqOInaMDkFnAC9muzEnBzCGfB09qWn5+90TPlj0nqAP3fB6oE49NtgewlMeF/bJDIuKrEssLzF8brsT56ogP/W+dqqtuTwYtRNY6tgjb5u2+5XpM860cEvBW2aFEOmXhSg8n7oxYsytAHjXQB9LPVIfgkK4sp59j+gE6bF/3K8895rpPotYk3N1fHlmrxqjlERfgMI32SWnsAcabX1njypBz8YSKbhhFVEMkfWkIdeeAMJgukunkf+slDz11FzXseTNJzxepcPKF6GEaXoScK5W/Yn1zAiTu6ZpgQOB2lwYJYATk6Pg+VNxxWO1rRBMrATmgB/f87+KXgDAo3i9eOFJFJYH8QneAoDJJPzED8jPWY1wQ6r9Sif1s0dICnVC6swqxMexAZPpXcCmu6Ak9Om0A1uEKDaauFlqnOtQkQqfFJDred+j8tGq4qrIgtbqf9gpDpAjc1jEIV93YUKYVgI2QBTsQf8Q3QHe2enuIfwtd9XcAII4Lrgj0j2duS8vM3lAOp8aK+/h7NrauMpgj9tZ2r3cje8u1mmbhL0DR1ZVZI5PEKMtat0M8nr7y10epn/nQMq1lMe26bJ+0AZiurR7lFxGyrFGdekWKUq49JTbEQLAedd+DaV+d4+GZL1NiFBYSKWNAmcHjyn8Ljg+0Fk3EQniaxVa5KiZIQBxV4x2hlxlnQLCmk6QEc+GuMjEmTU+DY8xY/s21vojggBq1H1+yEC5EgBVu/fALDCKTOQ6gtLrtyZ5nT4nMbrVcb3QB92r47rCY8TaO2hncKsW7RhrpBtOz8HoAo+TPQ1LxIF9kJHetsl/onGPDzUtVHyFr8xXaqLN7/UlQsfh/lh3FVOwSvcvCWuBWKbMoVPg1ht6iqXATpizh5lr3Mcx/BjX5L/bnRHH3nIUbqCNOyAlC58AIK6i7rMGS2MXCF52VL0FM/jbLy1Fa+I4fES1YMCuAyus1YqP/vsvaMho2DbBRpaAvOhpbOGUR9KfmzQ9Vn1lFswZ5YtbzKtTRn0GNOG9TNtdyXXDAJ8uSr7SpILrfj96eEU4O2/VO+XPX304wOMJFeqXez2yN3Dd3yKzoCKh7F/Ym+6QQzaqxP2YXjj4mVRBStMysHjpq+gHTRC4CuMHfaKd5xwfnvtLSolW5CedrK4PQ8/I04QSfl3fSYETBxBrPoMQdj33oTpcM2zg5NrVYe6mRuWv8USNhzzjxhm1pSLWrjkQSYr4nnzlLi3WjV8mPKoAmGfU8cqduW63UrJmT6R8bsaxKB9YUgfdAZN3blRsdIxjfYWHaVLK+0fLX/MH/QUqnP32+8LYbSnQUAaMXkJlX2N8CsZrI0r4va9N5hn7hYA2UBL+ioOXn86o53xUCFVxhslVF0yVzRkuOXxyH0H4 X-OriginatorOrg: vivo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1e7da61b-f8b3-4191-ffa3-08dd6d12000b X-MS-Exchange-CrossTenant-AuthSource: PUZPR06MB5676.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Mar 2025 09:30:23.6601 (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: Z3rKMBAR9otNKm4SxQlzVn9i1sTwAuKpsJhT91AxI2xn2Typr+xvXH7LAVMbJMM3/kwSYl6MCl8tgD5gwT1D8Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SEZPR06MB7238 This patch change udmabuf from use pfn based into folio based vmap. Signed-off-by: Huan Yang --- drivers/dma-buf/udmabuf.c | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/drivers/dma-buf/udmabuf.c b/drivers/dma-buf/udmabuf.c index fbe4b59b4c97..f50e11f0f034 100644 --- a/drivers/dma-buf/udmabuf.c +++ b/drivers/dma-buf/udmabuf.c @@ -152,29 +152,28 @@ static void *udmabuf_vmap_pfn(unsigned long *pfns, unsigned int count, static int vmap_udmabuf(struct dma_buf *buf, struct iosys_map *map) { struct udmabuf *ubuf = buf->priv; - unsigned long *pfns; + struct vmap_folios_struct folios; + struct vmap_folios_range *ranges; void *vaddr; pgoff_t pg; dma_resv_assert_held(buf->resv); - /** - * HVO may free tail pages, so just use pfn to map each folio - * into vmalloc area. - */ - pfns = kvmalloc_array(ubuf->pagecount, sizeof(*pfns), GFP_KERNEL); - if (!pfns) + ranges = kvmalloc_array(ubuf->pagecount, sizeof(*ranges), GFP_KERNEL); + if (!ranges) return -ENOMEM; for (pg = 0; pg < ubuf->pagecount; pg++) { - unsigned long pfn = folio_pfn(ubuf->folios[pg]); - - pfn += ubuf->offsets[pg] >> PAGE_SHIFT; - pfns[pg] = pfn; + ranges[pg].folio = ubuf->folios[pg]; + ranges[pg].pgoff = ubuf->offsets[pg] >> PAGE_SHIFT; + ranges[pg].nr_pages = 1; } - vaddr = udmabuf_vmap_pfn(pfns, ubuf->pagecount, PAGE_KERNEL); - kvfree(pfns); + folios._range_folios = ranges; + folios.range = true; + + vaddr = vmap_range_folios(&folios, ubuf->pagecount, 0, PAGE_KERNEL); + kvfree(ranges); if (!vaddr) return -EINVAL; From patchwork Thu Mar 27 09:28:32 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Huan Yang X-Patchwork-Id: 14030883 Received: from HK2PR02CU002.outbound.protection.outlook.com (mail-eastasiaazon11010023.outbound.protection.outlook.com [52.101.128.23]) (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 A099B13DDAA; Thu, 27 Mar 2025 09:30:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.128.23 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743067840; cv=fail; b=NzayxV6owpFj91t311u35jdPGzRXaG39pj2E/ws/EZBcvOVaGEB2kcZW6Y/N4SSgNBvSNBvAyTSlwAIqnRDiAITpRsHMN7xr0GuB3lcEf5/2bztWUsVJTL5671SFnNY6M+XY8K7vxC0/qNdhmqFF8XxvKrKYn807zKDZgnnLUkE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743067840; c=relaxed/simple; bh=mKlTODbkyFy7IeRuN+O785X9JRGeyISLATsqBJz3TjU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=HloVqec4Ba1XVnFWpLyZm5rszZ4UvwM7RfO8pTsuYfys8acA4gbruVSq9wMXrIdb70gvcdKrTawJ4PGeBQqTgowOEtqYMTLLX5UfvNT4nYI+yqwKXQIHLiMuRdmz7CTiNQk8Vac8fwx7f/SEK6xT6LAPDc9z4RDuAes2V2iSdGI= 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=hvYm7c9J; arc=fail smtp.client-ip=52.101.128.23 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="hvYm7c9J" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=hfdERzLAHE89h3ABeumjm48B20pyc7rFxGYKmToqGE/7OvGld1kLJT04o0DSM5DPsEKOI4JqKQ5sSsQ3vG0IT9GM2xwDzFJ8825Wj4eTtutB4fucDH3nSJebjRQpvz8g4wkh116elRBofcxHUhisNengkck7GD3gImbAdXyDLLFhbNnhTELEE29/TCQ6g/gEdAYUHhMDHrxpCXPVi2aYp+/eeyvPMMaecxq3Y0Wdi9TTKhywcnMFOYU+wQ4lFwLpmILdz7Sqnhn06M5jzdOGGHwqqKnsFuV1c2ExJ7kmasSfAhF208/waZGEWHUlFzCYWd2AVBA6PJWRI7CoIhd8Pw== 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=uetvUSOX0tv7G9s4b/OGOWefafF5rbO183JMhdew8Go=; b=SD4As6ls2FUo364PygJYWsaNDS2MxsOEYAJqTUdD5selOJCQsgUHS46YjuMV+CSVADU1wRLVHmfdg1tsKwC07icnOQAar9uq7GqnYAFpy9A2y0gYQdWo23YQ8AqFsocQhrAW3UophJbxlGhtTSkO0j7wQDoqOwyXf448pJScvHOlqWkCkLkNAbPc6tIupKFaiNkJYYO1QvNSW5IY9pLP5GaNHoEex5KI8+mHnEkusrK9y2T1mLZegniJCLr6z9hgiVlMLXGCJzTqBt2wtTp3u2kvqhr11tYaTw7p9TDOdjdKa9suZDaXhfFEozhVYE9BmEaoUfhsPc9Scvnfiy5rtQ== 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=uetvUSOX0tv7G9s4b/OGOWefafF5rbO183JMhdew8Go=; b=hvYm7c9JlC/Xl/dz2Ns9MD8F7teN1+gPVXtRQ9A4BJeNEEXxujM+fn49Z1nDnh25o+oHCaFjGrS9wAUbElIGdkYAAyUD8p6JValM1z/iTZHoiLVxkY5vP4NluunAmTQm8p7k3s2C7OsxQc7uEBuBOj4/kGorfRxTkQ1TQOufjixHrw/jBsjrgNoXC+E0lFcm2jU4m+OkmX/tJN+dync33v1bXzB0e0kQHM+DvVsy1Kj3m/UkE1DUhASQsyqpToKLIxi5/ErQ6SnLnlFf/kWJjYbNxzHSJRBLebYjg5SUtJuUSPyTMUE5PmudPF6CrQw7C7UsGfXWYQaJ4B2zZIdY5w== 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 KL1PR06MB6906.apcprd06.prod.outlook.com (2603:1096:820:128::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8534.44; Thu, 27 Mar 2025 09:30:32 +0000 Received: from PUZPR06MB5676.apcprd06.prod.outlook.com ([fe80::a00b:f422:ac44:636f]) by PUZPR06MB5676.apcprd06.prod.outlook.com ([fe80::a00b:f422:ac44:636f%3]) with mapi id 15.20.8534.043; Thu, 27 Mar 2025 09:30:32 +0000 From: Huan Yang To: bingbu.cao@linux.intel.com, Matthew Wilcox , Christoph Hellwig , Gerd Hoffmann , Vivek Kasireddy , Sumit Semwal , =?utf-8?q?Christian_K=C3=B6nig?= , Andrew Morton , Uladzislau Rezki , Shuah Khan , Huan Yang , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-media@vger.kernel.org, linaro-mm-sig@lists.linaro.org, linux-mm@kvack.org, linux-kselftest@vger.kernel.org Cc: opensource.kernel@vivo.com Subject: [RFC PATCH 5/6] udmabuf: vmap test suit for pages and pfns compare Date: Thu, 27 Mar 2025 17:28:32 +0800 Message-ID: <20250327092922.536-6-link@vivo.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250327092922.536-1-link@vivo.com> References: <20250327092922.536-1-link@vivo.com> X-ClientProxiedBy: TY2PR02CA0041.apcprd02.prod.outlook.com (2603:1096:404:a6::29) To PUZPR06MB5676.apcprd06.prod.outlook.com (2603:1096:301:f8::10) Precedence: bulk X-Mailing-List: linux-kselftest@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PUZPR06MB5676:EE_|KL1PR06MB6906:EE_ X-MS-Office365-Filtering-Correlation-Id: ae5af47a-cbad-46cb-151b-08dd6d120503 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|376014|7416014|52116014|921020|38350700014; X-Microsoft-Antispam-Message-Info: CdiRoi2tU2M0aHLDC5IenBH7Wg3YZ1LjohvPKuoaxGOUFFoemXKOgnY7rsJd4U1maNO8XEWCOdpjKmChF5x1ciKbEMOlPjVD8RYJrlxriUIidzloS03CnXYsDvFxW0icw2Kc8TEn77En5TrrpKV84rYiyfRXhAkUTBjAooQDNV+nYhJg0CcEDrQyVZYVyQ54iqUhe1TCBn+U+Eovcht0KsrkcA5CBHn6zQxwoCkqqvMEDJRr3FgPn8K67pX53sfGoDn4QNoZk5VbhTLGJ2EZzN0SBlN4n/8dH9l3hzwhc/yfNZW5LgNR6EBqG3qXvtzJYs0ySD+rPfRvtFLZlXT/uHhABOiArLYOV/9M4HRfglAL8IyrSASMjwHSCKCIKO3PQuhuT1wHM/IZng7QD+LlO6kbnriyDEabMghDs/1cJEMloAgcbkgbk5s5B0SAsoyEHoPekLEFRYOzxn+ogXyMf/J13tEOW1MgjZsnvwntXRxuzlwLsvx0faPftU0fj+cX1HoaDp6byF5tFivuszaVoVrEO9j3F8qltPeyNM/btS5jOhJVyOvI05++pqhOiZc4bGnds60y26hiQXlrXy/e9GiSsURFdGO4Vux8MGyvAr0SDHzNvm58PpfjSCcc22VxH3czX9j/PrhjW/kVSR2MNlnGvk4IF5EQGj0rfYxczfZ8AYQan8LIMWrpaAE9Aor4fJNVr+Lje/F+cn9dJYXLzo4IuKDbhO3l7q+sxtgukp79c02NeHM1638FfQvADNMibJVq4N9fM5rGza32h6L+LFDl+7aet2LxWGm2Sj9Yx8L8Yxp/o5nwolvGkPclJGW07cbgUvTfajoZnZ26I+VyFDQxL0WDBMuZ6HjLxUWWXkUg4St9qzQeUqbTGDGhISmBiBZHDyR2//rEGtF5Xv+BA3stSBfbWCmCDujL7u7otQuJvbkRRGrS+8EpVgByvSBQbXJBeuH+RiDofA9clhbswoUy4WaTZMDo/EzlhxMKbO3ExcnDBYrUaRH9gQE648o6t59MEgyAUHFIVqu+QRlxNR+gg6rK5IjCVC+asmRsemR16mkbOs0x5PhJNk2m1anhlrODHglcSrSutlEBZqzi3iseJ2lX1Q7q6buvOv/K7dtHxakyTu70f0cwiV1J9ZVEKGVkz5riSucCFUiH+Gkvnnovv9e9D18Eu+7rNXrUJSuzcEuOXtjvr8v8bFHsoIVCa4hqLwud2Z0NXUUo49v/7CnXPXzfZK4J9hu3W4xlLSLeVZhjk8RaIBzYjjMCjrpMn1hGYBB1MkmNMzv4mUalF8wE3bG900lpQ/VrzR5J4bW+Fm63m73H3zapMxqzDlAX3Fhso2/+aytz+S87JvHbH/UYw5B0kgcSaEvJxdOW9sj5kqtYDTwG6eNYyPYk/MXC1kHI4RPnzkw6THbsticJMootHJizrIyc+MrouJHXmdXLYTeAT/siOBsKWMwfo83pjuG5+ubF0nIPJHMuH0p3Vw== 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)(1800799024)(366016)(376014)(7416014)(52116014)(921020)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 55lSqhd0+rKDjZzFKOoqjMiyOfY/KAudkL//RrZScSq4aYbaBZwQ0PL3Misc952DMjUz7pTerQB+1UCe6dchoCP/K+bfobiqqMFTBFy5p/n7cwxJkuSjCCiL0JW5vDBv6FzlwEv3q0z/SaYvaqeiXTP7dv7Tg8q2cX4Xwz2MfXguydvclzfTGeo5avNqUw4+7nzIfwHXPWZRhuQuaUkZ+CqTty/iHiWettkRt1crHuN15OVesxBOnNHFPMsjjE0T96SqK70tgfhOpE8/1XwMa7ICxVNZ4lqNRtNZvt+MzbV/M7uSIJLLmYd+LumLy0GngfF+C+bycNGwCSotkGuqPrMF3fR5XqdWe8BaW/LEK2PNNenyixm9HnTu4aoMXjgSwHK9PWZcABr/4715lAUoCy/Uzgtx30r69MvE5iZtyw/62KZhc9qSjzzwGzuQ53/5OmzyAMv1DsZDJITfhdvvEyM77w1xWIh8+gJdIRkaxEqYGCnV19Sqk0LMslwyCjzLc0o/kDF+qsRgBU+fMsTxSki/9/thj84B29esljHKtvDkeYvEbQ22/9InIowmYc9nqMq2Bo3gthZd6iDjxw8nHkgFFycmlHxmXrIiEmAQ4g+lDmZNTjMbVE/lvpd0gCLvhOXy+kI8Oi6o8kQJmzvXuJIKE6HhQaERkU0zCjiwBwsJcpMgCqgLqPpAPJf5TCqDuFmgkFlhV4tIqOgnRXEgpEh2fumWCMRaVYNlm1bcvMvZtGtHyCSeTwwblfWjDJiYtUS0eTswtrQ1MgHyn7uPXGnrPeDaTaDjS47/W23k3sYtKVnHIB+QnOShrC2m1c9mFokSHnedrZYikHQldcNroPIGicTfvcQ5kRdbV+2gzScpmYSXaJN3NfCLP4ddBOWoKk7wqTH0bzBxGQPLvXFKSh0398lj7t6Lem9HD4MyWXeKoUQ9vx4OOEb4SJzjlHlQaGRkFn19Ngnr9ITnZlgaESW21S7pVP97OJntO36kxDUwQV9sZdXAS+XedN+kNhfHP2+bqlZq3XsTIX7MdSXegH7SqWboCvgxgWYaziQrTDuijwh7wOongZc5Rr6JFJQOWCeOrQ0r9B2ah/ieMuCOUToRlA3kObmn/rxp7lRVVJkDtKk/DuNq3bIrosyqSteC+Tc377oWZI8cUK187BwxvrIJ4bcBr8kcKSsr0lH1P4BYZVLvzaONcdHPapF5XywjC2ZznVtdv0+1w4f5cKlAWf1dniq8RNoLpXG2OmikRpKHFsJbd68QmlcBkMlTpDEtGVJQIU9JRh84yBMHIsnFiQ5uzqD8HEpxZ+217nD5RwZFyTmqx8Xq8pTg7uZGuXWmaCiw+C93Fns9zP7ViX99H3EE3TvF7wGzwf61R1QJ5CtIlEvAMA6oqu1jnTYmpJaYKFEmhL1P8XM0l7jM4mCvrsVF/iU4vLDVQeK1pQDm74ha6m56XrUAiuu1hlsqYpKgZKfi/Urax2cgY8H6jjc548y9EDLz4LxrvKMEblwX9okRgmAOzD0XggDuivasPpczWB/l200GH0kXdVQMUX5pWPU5n0otdiJFAZl90Tu9Mhr02AbFWVItNEEF4AoGXYuH X-OriginatorOrg: vivo.com X-MS-Exchange-CrossTenant-Network-Message-Id: ae5af47a-cbad-46cb-151b-08dd6d120503 X-MS-Exchange-CrossTenant-AuthSource: PUZPR06MB5676.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Mar 2025 09:30:31.9959 (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: sfroJ6Lq+FWuDkrE3CdB+8bCs472gkEB7dZXKHsLgYm+QAlUrFsCfAnNdTdP4QySwiDvukvqnyXJwEj9pU82Ig== X-MS-Exchange-Transport-CrossTenantHeadersStamped: KL1PR06MB6906 This patch both compare pages and pfns based vmap, to show folios range vmap and pfn range vmap can work. Signed-off-by: Huan Yang --- drivers/dma-buf/udmabuf.c | 64 ++++++++++++++++++++++++++++----------- 1 file changed, 46 insertions(+), 18 deletions(-) diff --git a/drivers/dma-buf/udmabuf.c b/drivers/dma-buf/udmabuf.c index f50e11f0f034..78549a9f24ca 100644 --- a/drivers/dma-buf/udmabuf.c +++ b/drivers/dma-buf/udmabuf.c @@ -556,6 +556,48 @@ static long udmabuf_ioctl_create_list(struct file *filp, unsigned long arg) return ret; } +static void *udmabuf_vmap_by_pfns(struct udmabuf *udmabuf) +{ + unsigned long *pfns; + void *vaddr = NULL; + unsigned int i; + + pfns = kvmalloc_array(udmabuf->pagecount, sizeof(*pfns), GFP_KERNEL); + if (WARN_ON(!pfns)) + return NULL; + + for (i = 0; i < udmabuf->pagecount; ++i) + pfns[i] = folio_pfn(udmabuf->folios[i]) + + (udmabuf->offsets[i] >> PAGE_SHIFT); + + vaddr = udmabuf_vmap_pfn(pfns, udmabuf->pagecount, PAGE_KERNEL); + WARN_ON(!vaddr); + + kvfree(pfns); + return vaddr; +} + +static void *udmabuf_vmap_by_pages(struct udmabuf *udmabuf) +{ + struct page **pages; + void *vaddr = NULL; + unsigned int i; + + pages = kvmalloc_array(udmabuf->pagecount, sizeof(*pages), GFP_KERNEL); + if (WARN_ON(!pages)) + return NULL; + + for (i = 0; i < udmabuf->pagecount; ++i) + pages[i] = folio_page(udmabuf->folios[i], + udmabuf->offsets[i] >> PAGE_SHIFT); + + vaddr = vmap(pages, udmabuf->pagecount, 0, PAGE_KERNEL); + WARN_ON(!vaddr); + + kvfree(pages); + return vaddr; +} + static long udmabuf_vmap_test(struct file *filp, unsigned long arg) { struct udmabuf_vmap uv; @@ -563,7 +605,6 @@ static long udmabuf_vmap_test(struct file *filp, unsigned long arg) bool can_page = true; struct iosys_map map; struct udmabuf *ubuf; - struct page **pages; void *vaddr, *pvaddr; struct file *file; int ret = 0, i; @@ -591,31 +632,18 @@ static long udmabuf_vmap_test(struct file *filp, unsigned long arg) } if (!can_page) - goto out_vaddr; + pvaddr = udmabuf_vmap_by_pfns(ubuf); + else + pvaddr = udmabuf_vmap_by_pages(ubuf); - pages = kvmalloc_array(ubuf->pagecount, sizeof(*pages), GFP_KERNEL); - if (WARN_ON(!pages)) { - ret = -ENOMEM; + if (!pvaddr) goto out_vaddr; - } - - for (i = 0; i < ubuf->pagecount; ++i) - pages[i] = folio_page(ubuf->folios[i], - ubuf->offsets[i] >> PAGE_SHIFT); - - pvaddr = vmap(pages, ubuf->pagecount, 0, PAGE_KERNEL); - if (WARN_ON(!pvaddr)) { - ret = -ENOMEM; - goto out_pages; - } // compare if pages and pfns is same? if (WARN_ON(memcmp(vaddr, pvaddr, ubuf->pagecount * PAGE_SIZE) != 0)) ret = -EINVAL; vunmap(pvaddr); -out_pages: - kvfree(pages); out_vaddr: dma_buf_vunmap(dmabuf, &map); out: From patchwork Thu Mar 27 09:28:33 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Huan Yang X-Patchwork-Id: 14030884 Received: from SEYPR02CU001.outbound.protection.outlook.com (mail-koreacentralazon11013017.outbound.protection.outlook.com [40.107.44.17]) (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 6027020D4E0; Thu, 27 Mar 2025 09:30:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.44.17 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743067846; cv=fail; b=PX2E09GG0MY6P8DiyXU/zMrcq7UrTspK7e02+2Jg3Ua7fF3KZOeEfvnml/UJCv8Sp8B3AuqwnjE5RAz3uEi/qJCW5uJQOE49oNiPTkeGDqmhw5sd5mXKuLKXRu6o+yZKyqtt1XRLJWgLjpIgn4UmyV/3cGhP1bnTERGXwyS2zSc= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743067846; c=relaxed/simple; bh=5uepYVnpLsWPc5wqe8pJF3Lt6IjkIjVjFON6cNxc8/U=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=di1f6YkxocdDPKj7iSRiybTqjYbDSCjpdQ9RkpWbIM74eLFKAT62D+ghuBTVK9jkOTZMuuzAJMcy/hM4+XWmbR1PLLyKY+zIslcrdBGPIWxYRBq86kiCUxschSi3JGd9Yj8Wc2MjjDqb31wCh/n9UtR/9776YPHsdrAYbNHbRLE= 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=ONh7rBgO; arc=fail smtp.client-ip=40.107.44.17 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="ONh7rBgO" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Q3OZ6SFBKSQKggh5vEfdYcP+5Pe14SLBYXzmZqT1oBntvDoqKfEBlHsAOqiwq+JahsHrWhZ4vjmdk4Fv8IUthG3g9E8A4LhwcI4dWMjRFTZsS1TeAd+5I4rKiC9CHR/Cma329mXho/TGuC8Yuc6yY+ZNss8uDN18Lq/eirRaIZQMHMrt6yLgTuynsTIpj6+kQyBLWS3da5nSKv5VkIG6gSRJ0efhRLJu9FkiB6KLfE6DqK9zt9tjCpj4TF6n3UNAAIMWxsRxYLtMRWBR7ENpHBMmJw5GVCr6f4RItBIbGfq6C4GWfCPv8+k2ZGCGwebs+YGXJJm7OSTyaehtcqsL/Q== 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=dE/DnCyBrZ58hOjkDxC8Hu9PUZPaTclA1C/LEyi7Z4Q=; b=O/f7+/UFTiIFitxAdOt5Ya2/tnIcM43Sf0Y4K8yv3Ks9MBTsuDE+TYH2WjPn/vkXhTSRmnJvC+CFWSXJLDHN7l9uSweV5df6MyDiGr/FLs3OD3NunAm67ZQM63sxwIGLtxRrLM/m1i9yY00gRiJxBDGswRov0yuIucGEqTJPD10+6D10Zk/3ojLZqnRZD9EvJmSJDPXYo8nqjrYYGj17Y6EgCCpqa6CmXia1VPtq7eI9bjWBefPHoQTJJHVwR0AaIwpJQ1948eGYqpiHx51Q4SfF3awZfTn45TqCsV7rHb2xM1PxV2g2tMpT+We5l4SsQcDBvxykezbcKjw6jWksAg== 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=dE/DnCyBrZ58hOjkDxC8Hu9PUZPaTclA1C/LEyi7Z4Q=; b=ONh7rBgOiQogLJ8kFsfMBSlcl5sImETmGU4ixt1jhZxorhtl79c3GCgS1s0JDMeLdIUWYdGT2sd6HBDuD0BQhJJm0fz6HwSKnjZlP0KFyaV0JEJnSphv/o2hZhr10Cr7f8selFwPT8UNqR6ppfTxQ0iHzk8l74gcjfuQqElbeseSfOaz669SA3pm2nSojSiA5/7A/Ry0p2J3MV4Tebiq1YTOTsj003MA+QORxcANmkCy+UCRvmZBvxxlfsYrAagXYLqLdaqREZWb0XyGgfz8Yvg7EsdTQ4kKp6VA9T5F2G3zIOhNZ8cOwID5MOxG4p0gHnMc97JOG1JsRXgeYkTeQA== 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 KL1PR06MB6906.apcprd06.prod.outlook.com (2603:1096:820:128::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8534.44; Thu, 27 Mar 2025 09:30:40 +0000 Received: from PUZPR06MB5676.apcprd06.prod.outlook.com ([fe80::a00b:f422:ac44:636f]) by PUZPR06MB5676.apcprd06.prod.outlook.com ([fe80::a00b:f422:ac44:636f%3]) with mapi id 15.20.8534.043; Thu, 27 Mar 2025 09:30:40 +0000 From: Huan Yang To: bingbu.cao@linux.intel.com, Matthew Wilcox , Christoph Hellwig , Gerd Hoffmann , Vivek Kasireddy , Sumit Semwal , =?utf-8?q?Christian_K=C3=B6nig?= , Andrew Morton , Uladzislau Rezki , Shuah Khan , Huan Yang , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-media@vger.kernel.org, linaro-mm-sig@lists.linaro.org, linux-mm@kvack.org, linux-kselftest@vger.kernel.org Cc: opensource.kernel@vivo.com Subject: [RFC PATCH 6/6] udmabuf: remove no need code Date: Thu, 27 Mar 2025 17:28:33 +0800 Message-ID: <20250327092922.536-7-link@vivo.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250327092922.536-1-link@vivo.com> References: <20250327092922.536-1-link@vivo.com> X-ClientProxiedBy: TY2PR02CA0041.apcprd02.prod.outlook.com (2603:1096:404:a6::29) To PUZPR06MB5676.apcprd06.prod.outlook.com (2603:1096:301:f8::10) Precedence: bulk X-Mailing-List: linux-kselftest@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PUZPR06MB5676:EE_|KL1PR06MB6906:EE_ X-MS-Office365-Filtering-Correlation-Id: 90c1d6fe-b5ca-44a5-3867-08dd6d1209e6 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|376014|7416014|52116014|921020|38350700014; X-Microsoft-Antispam-Message-Info: KdaPBLzFLXWw+Xfs6Oy/zJ53izb+Gv8AmRAFJ+ODEpNGhCWZLaaE5/9BsasrqmtHEBWLmcQkVyWql58VLWixbm7oJoVai4GSz2u9wP7WuFrrTRwh+Na3PSimChG0Ywn0FzFScZPyXsBZvBQhE8b9psY59ZftrOIlVugGVgsNTyNrHaWQ/ON9X77kCl4rjSZSp7qW35zyrP+mric6lecC52EnchmSSSnQ0nZlZl3dZudV3u56liIW4YbUDKxX08bQ2oPkbfx/UcvjzbNkhD4x7n5YHctvueQs2vKhfUZuCcDowO/I4p5aIm3ADqQDtiqseohDnlh7SdLNpTfLAHc6JsPT1uciZR2MaZDzUswklBHUOZx9xqhc5MjCn45QD303fuveLHqK6jAJezVNbf+qRK5E1mfc1ecHUzf1WwFFN6r2H68kO5KCkfBzK6wKtELj4cBJJnG9B4mvzZEOuwYrmJMPfql2sVz2Yc1KPrmtiPZOxGlf0QfOWBFrI+G+QMfAwZW5rOCmXtC1Owj/0fTv0VuAN1diKcrxHrEBA/MjQP9pEE4EkRqk16uIVrxEMXhbl6LVIzlRQp52knlYo4yt4ZIJHH9DXZET8i1dHSCfrdjVaHO/kZns2VryuCv1dV6H5wN0mrL0SA9qTEKML1Byf60TLtH8rCIUlfGiBAbZ751ooPmA1gbvfn+aZeqMg1ITZ0vUFfhcFK9FdGBuyi6XDesU0KJqUD6Xx4VUX2tU5W8XGdXKocuA7mQp6hZdV1w5oC8lr549scVMfI8sgRK+a8jkjmyNXPfmcxX/75cnZ4HbqEfNYAK9Py/zc0rWusBHyZV0tBd4Ot5MTsPim/odajKn1TQe8pGJ2c38uplDjaP1Q+CPBLIhJZaHnRPFlLATo8T1isj1wMs/cOHKpjmQmuzJAJyddwsjba9vZwHW8NVKe77LyalAzGkZn8lTm4Kp0dkRXDn7CrnIHQhihFlsJzNfV3Opsy/3JVjB4iqwSheZ7mSYw+EGwJRetGF8LSsHSaAJpn5/sV1tA5F4NdNsxQeaJoUQ2/1pfPhBC9ufaMIDO1+7iIDYCwgs5/LOkKB3lZgECrzcHvm1JVz5ChcSLELCAZ55U/TBdnj2hkDg9SxTVC4PPQx1lmnQ8teHrXEFfHaNEF0BmvooG5fFQpXsi5iESmI3vGOPaTC7MZJJRAia8tEq+PhbytEbCX1E5u6k340r4qba2j2/ECvto1+OXDqEINHY8HB7HHalkzj/HDfNsZzU5b4UpCcBnxsHzSVmccgj+eBFLeo84lgSnkoq0GEYcT3ZrxjVRxao7jFJsJVobWlxtBPG73iP47ZO8JKY/oXvcmt039BxWrGwx3Or8+Ig+zwcbNRpztc9CBPIGw31uRSakeMMSN93VICjnRhQfGGiR0aEKpQx2MPGZaV7QnVvaHTCf3VNrW1JErgkvyGJ/KLTSB/0AjCXfIWTdB4zDVqlY10RIV2ViBHTkV/SGw== 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)(1800799024)(366016)(376014)(7416014)(52116014)(921020)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: LDCAEjmPcbTjV+/l+CF4P64YYdSpdsTOdVh+4/vnmu8qhvvDcaFsjptkBQ5q65TsCFWp+siTxZPYLKQ8ElqXGzOvLax0ttwp3DD287slS8orIDE9Q6Pl18DvbvuKIFVkOMhprekl6LJaQYyZ9wrLoxXuvB0qNJp+S9wqNeffb2iuei6npN9SqsHbTwX1QDBACYHuQnab1BpzWHWwp35+LEldiQHw7ntitq1EXzE1boa99Ma1rvG9cVpTfDaQXAMKLenl9agcHs0PkgkTlAv8wAsrGdoOUygYqUcHBzxcRmOplEH7y3+U4FMdA92Tk1s3n5oDURelm1HEWqLPsWbIbpoo4JMrCXxn8GDrfHq1eTTOZ1EFSn5CPyGLBNwmPJFry5hOmFwiiipYSTUlfgLEdEIR16HrTDSuPBUeSEtZA3RDkXG4c7LpHKg8zbj51z22Lw1aOwF1YkdOegC7fCrn4ax97N78/4MojwwhJ6CFyyFu0aXnHMHnJDwnayKlSY5RA5FIKRQTgXF4QCzoUJWTG1Vu4VBy7W/N02pxDFFudjzn7Sb7FjPk+UeBYthns4R9fUjXfTu4SmB+kUubk2s+i11sY26WsvhMpPSljxBFhR3oLJH1L/LPy4pynKyoRsbBenyJOKPZdDHuqL9/6AfiUiqCd8AkyIZMm6PkgpcHnODoV9u2i7KUDZQJaa3UFuMJzj9iIhSTRp8jnWkVlgAnvqVPkckgNLxxfKhYMEppTGt7CZADfREB+IXGwiM7z81Evd4XRiRepN4wVza4+imT6de0BCsj4s8q7tSgkvBXTGt65LO581eqOJy6K1MZGn8Zbn/wFFlkrasy8xp9GTF/94eC5g0WzvyWSzCC8zRZARYWsjl95F1oSgVP4EiJCVUYhwpqbZKIS0RZlv3UUbNx1LNmPazf6MGS5jU73fn+lx3IjIp8GTlKyojAHbToh5l5kgXOYJ5OaVIwHfDDFNwkz75+96OhstPX2EFtTXn/lqacfBxGOcvuy7y5movcCa8Fu7hCKAOxlJn1fjaX+9bHzpT1pdMA/tzOeA2wHVkiavu8AwpBwOfyqGJ8E3YoCSOUC0oq75wuO+VaHKI8Vl3typYHoXVK3oPLjlYY19aSmuq6P97jPpn9BMujUjqYzrngY6DhMaWzt1Sm2nmsvbA5gK/9vpWXnwCr6128BHM+hRDQka5bb+V9tsJr3pWapQP9zOgoA8MHYihqEfN6t0tXlygjUYiF+Iu07sf69xDF//lhVaAgc3rG4ZwM2Ye2K/B9L7VWJDl2B2hpcQpK4Tb3puFvdbW8DjWQbgpgRBaX+eNsYsmNcoB9Eu+asVG9v4X80eja+pHh8Yy5t5hrBHZmeqgSuv6zweKNrzJs2g8lLpjlZFdmG9gKsCys5Lf8Fy8FUYou6YSEjXq07baVDrb++Xfb+INQrE8yvZEHBcoEuBBkEe8Mc74cjrc6Yn2z1mMMEM1wjh9n2tO19zWT9f5kNZr5TpgJO/Urpr3d/nBl8Fs5euQIrHknKOgVZCCe+VNJxNTF/PwU3N24bubLhmkFAXW0PmCKYPSN3Hst28CHeJ3ircMmLkMwTSpzXNnW5Xq7 X-OriginatorOrg: vivo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 90c1d6fe-b5ca-44a5-3867-08dd6d1209e6 X-MS-Exchange-CrossTenant-AuthSource: PUZPR06MB5676.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Mar 2025 09:30:40.1903 (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: 3Xv+/8O4ItXV5BCPElBwFNBTeO8buvSlwY74mU6a72uzyJWDFAJTnPBFZPj7gBpb9h4IP5o87b5pLk47pBbBDg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: KL1PR06MB6906 This patch remove each test code. Signed-off-by: Huan Yang --- drivers/dma-buf/udmabuf.c | 142 --------------- include/uapi/linux/udmabuf.h | 5 - .../selftests/drivers/dma-buf/Makefile | 1 - .../selftests/drivers/dma-buf/udmabuf_vmap.c | 166 ------------------ 4 files changed, 314 deletions(-) delete mode 100644 tools/testing/selftests/drivers/dma-buf/udmabuf_vmap.c diff --git a/drivers/dma-buf/udmabuf.c b/drivers/dma-buf/udmabuf.c index 78549a9f24ca..67ab50914a31 100644 --- a/drivers/dma-buf/udmabuf.c +++ b/drivers/dma-buf/udmabuf.c @@ -106,49 +106,6 @@ static int mmap_udmabuf(struct dma_buf *buf, struct vm_area_struct *vma) return 0; } -struct udmabuf_pfn_data { - unsigned long *pfns; - pgprot_t prot; - unsigned int idx; -}; - -static int udmabuf_vmap_pfn_apply(pte_t *pte, unsigned long addr, void *private) -{ - struct udmabuf_pfn_data *data = private; - pte_t ptent; - - ptent = pte_mkspecial(pfn_pte(data->pfns[data->idx], data->prot)); - set_pte_at(&init_mm, addr, pte, ptent); - - data->idx++; - return 0; -} - -static void *udmabuf_vmap_pfn(unsigned long *pfns, unsigned int count, - pgprot_t prot) -{ - struct udmabuf_pfn_data data = { .pfns = pfns, - .prot = pgprot_nx(prot) }; - struct vm_struct *area; - - area = get_vm_area_caller(count * PAGE_SIZE, 0, - __builtin_return_address(0)); - if (!area) - return NULL; - - if (apply_to_page_range(&init_mm, (unsigned long)area->addr, - count * PAGE_SIZE, udmabuf_vmap_pfn_apply, - &data)) { - free_vm_area(area); - return NULL; - } - - flush_cache_vmap((unsigned long)area->addr, - (unsigned long)area->addr + count * PAGE_SIZE); - - return area->addr; -} - static int vmap_udmabuf(struct dma_buf *buf, struct iosys_map *map) { struct udmabuf *ubuf = buf->priv; @@ -556,102 +513,6 @@ static long udmabuf_ioctl_create_list(struct file *filp, unsigned long arg) return ret; } -static void *udmabuf_vmap_by_pfns(struct udmabuf *udmabuf) -{ - unsigned long *pfns; - void *vaddr = NULL; - unsigned int i; - - pfns = kvmalloc_array(udmabuf->pagecount, sizeof(*pfns), GFP_KERNEL); - if (WARN_ON(!pfns)) - return NULL; - - for (i = 0; i < udmabuf->pagecount; ++i) - pfns[i] = folio_pfn(udmabuf->folios[i]) + - (udmabuf->offsets[i] >> PAGE_SHIFT); - - vaddr = udmabuf_vmap_pfn(pfns, udmabuf->pagecount, PAGE_KERNEL); - WARN_ON(!vaddr); - - kvfree(pfns); - return vaddr; -} - -static void *udmabuf_vmap_by_pages(struct udmabuf *udmabuf) -{ - struct page **pages; - void *vaddr = NULL; - unsigned int i; - - pages = kvmalloc_array(udmabuf->pagecount, sizeof(*pages), GFP_KERNEL); - if (WARN_ON(!pages)) - return NULL; - - for (i = 0; i < udmabuf->pagecount; ++i) - pages[i] = folio_page(udmabuf->folios[i], - udmabuf->offsets[i] >> PAGE_SHIFT); - - vaddr = vmap(pages, udmabuf->pagecount, 0, PAGE_KERNEL); - WARN_ON(!vaddr); - - kvfree(pages); - return vaddr; -} - -static long udmabuf_vmap_test(struct file *filp, unsigned long arg) -{ - struct udmabuf_vmap uv; - struct dma_buf *dmabuf; - bool can_page = true; - struct iosys_map map; - struct udmabuf *ubuf; - void *vaddr, *pvaddr; - struct file *file; - int ret = 0, i; - - if (copy_from_user(&uv, (void __user *)arg, sizeof(uv))) - return -EFAULT; - file = fget(uv.dma_buf_fd); - if (!file) - return -EINVAL; - - dmabuf = file->private_data; - ret = dma_buf_vmap(dmabuf, &map); - if (ret) - goto out; - vaddr = map.vaddr; - - ubuf = dmabuf->priv; - for (i = 0; i < ubuf->pagecount; ++i) { - struct folio *folio = ubuf->folios[i]; - - if (folio_test_hugetlb_vmemmap_optimized(folio)) { - can_page = false; - break; - } - } - - if (!can_page) - pvaddr = udmabuf_vmap_by_pfns(ubuf); - else - pvaddr = udmabuf_vmap_by_pages(ubuf); - - if (!pvaddr) - goto out_vaddr; - - // compare if pages and pfns is same? - if (WARN_ON(memcmp(vaddr, pvaddr, ubuf->pagecount * PAGE_SIZE) != 0)) - ret = -EINVAL; - - vunmap(pvaddr); -out_vaddr: - dma_buf_vunmap(dmabuf, &map); -out: - fput(file); - - return ret; -} - static long udmabuf_ioctl(struct file *filp, unsigned int ioctl, unsigned long arg) { @@ -664,9 +525,6 @@ static long udmabuf_ioctl(struct file *filp, unsigned int ioctl, case UDMABUF_CREATE_LIST: ret = udmabuf_ioctl_create_list(filp, arg); break; - case UDMABUF_VMAP: - ret = udmabuf_vmap_test(filp, arg); - break; default: ret = -ENOTTY; break; diff --git a/include/uapi/linux/udmabuf.h b/include/uapi/linux/udmabuf.h index 88f5e5516286..46b6532ed855 100644 --- a/include/uapi/linux/udmabuf.h +++ b/include/uapi/linux/udmabuf.h @@ -27,12 +27,7 @@ struct udmabuf_create_list { struct udmabuf_create_item list[]; }; -struct udmabuf_vmap { - int dma_buf_fd; -}; - #define UDMABUF_CREATE _IOW('u', 0x42, struct udmabuf_create) #define UDMABUF_CREATE_LIST _IOW('u', 0x43, struct udmabuf_create_list) -#define UDMABUF_VMAP _IOW('u', 0x44, struct udmabuf_vmap) #endif /* _UAPI_LINUX_UDMABUF_H */ diff --git a/tools/testing/selftests/drivers/dma-buf/Makefile b/tools/testing/selftests/drivers/dma-buf/Makefile index e5b131dcc2c3..441407bb0e80 100644 --- a/tools/testing/selftests/drivers/dma-buf/Makefile +++ b/tools/testing/selftests/drivers/dma-buf/Makefile @@ -2,7 +2,6 @@ CFLAGS += $(KHDR_INCLUDES) TEST_GEN_PROGS := udmabuf -TEST_GEN_PROGS := udmabuf_vmap top_srcdir ?=../../../../.. diff --git a/tools/testing/selftests/drivers/dma-buf/udmabuf_vmap.c b/tools/testing/selftests/drivers/dma-buf/udmabuf_vmap.c deleted file mode 100644 index 7bd46c909bdf..000000000000 --- a/tools/testing/selftests/drivers/dma-buf/udmabuf_vmap.c +++ /dev/null @@ -1,166 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0 -#define _GNU_SOURCE -#define __EXPORTED_HEADERS__ - -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include "../../kselftest.h" - -#define TEST_PREFIX "drivers/dma-buf/udmabuf" -#define NUM_PAGES 4 -#define NUM_ENTRIES 4 -#define MEMFD_SIZE 1024 /* in pages */ - -static unsigned int page_size; - -static int create_memfd_with_seals(off64_t size, bool hpage) -{ - int memfd, ret; - unsigned int flags = MFD_ALLOW_SEALING; - - if (hpage) - flags |= MFD_HUGETLB; - - memfd = memfd_create("udmabuf-test", flags); - if (memfd < 0) { - ksft_print_msg("%s: [skip,no-memfd]\n", TEST_PREFIX); - exit(KSFT_SKIP); - } - - ret = fcntl(memfd, F_ADD_SEALS, F_SEAL_SHRINK); - if (ret < 0) { - ksft_print_msg("%s: [skip,fcntl-add-seals]\n", TEST_PREFIX); - exit(KSFT_SKIP); - } - - ret = ftruncate(memfd, size); - if (ret == -1) { - ksft_print_msg("%s: [FAIL,memfd-truncate]\n", TEST_PREFIX); - exit(KSFT_FAIL); - } - - return memfd; -} - -static int create_udmabuf_list(int devfd, int memfd, off64_t memfd_size) -{ - struct udmabuf_create_list *list; - int ubuf_fd, i; - - list = malloc(sizeof(struct udmabuf_create_list) + - sizeof(struct udmabuf_create_item) * NUM_ENTRIES); - if (!list) { - ksft_print_msg("%s: [FAIL, udmabuf-malloc]\n", TEST_PREFIX); - exit(KSFT_FAIL); - } - - for (i = 0; i < NUM_ENTRIES; i++) { - list->list[i].memfd = memfd; - list->list[i].offset = i * (memfd_size / NUM_ENTRIES); - list->list[i].size = memfd_size / NUM_ENTRIES; - } - - list->count = NUM_ENTRIES; - list->flags = UDMABUF_FLAGS_CLOEXEC; - ubuf_fd = ioctl(devfd, UDMABUF_CREATE_LIST, list); - free(list); - if (ubuf_fd < 0) { - ksft_print_msg("%s: [FAIL, udmabuf-create]\n", TEST_PREFIX); - exit(KSFT_FAIL); - } - - return ubuf_fd; -} - -static void *mmap_fd(int fd, off64_t size) -{ - void *addr; - - addr = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); - if (addr == MAP_FAILED) { - ksft_print_msg("%s: ubuf_fd mmap fail\n", TEST_PREFIX); - exit(KSFT_FAIL); - } - - return addr; -} - -int main(int argc, char *argv[]) -{ - struct udmabuf_create create; - int devfd, memfd, buf, ret; - struct udmabuf_vmap vm; - unsigned long *vaddr; - off64_t size; - int i; - - ksft_print_header(); - ksft_set_plan(2); - - devfd = open("/dev/udmabuf", O_RDWR); - if (devfd < 0) { - ksft_print_msg( - "%s: [skip,no-udmabuf: Unable to access DMA buffer device file]\n", - TEST_PREFIX); - exit(KSFT_SKIP); - } - - /** - * Normal test - */ - size = getpagesize() * 512 + getpagesize() * 256; - memfd = create_memfd_with_seals(size, false); - buf = create_udmabuf_list(devfd, memfd, size); - vaddr = (unsigned long *)mmap_fd(buf, size); - for (i = 0; i < size / sizeof(unsigned long); i++) - vaddr[i] = random(); - - vm.dma_buf_fd = buf; - - ret = ioctl(devfd, UDMABUF_VMAP, &vm); - if (ret < 0) - ksft_test_result_fail("%s: [FAIL, normal test]\n", TEST_PREFIX); - else - ksft_test_result_pass("%s: [PASS, normal test]\n", TEST_PREFIX); - munmap(vaddr, size); - close(buf); - close(memfd); - - /** - * Hugetlb test, 2MB - */ - size = getpagesize() * 512; - memfd = create_memfd_with_seals(size, true); - buf = create_udmabuf_list(devfd, memfd, size); - vaddr = (unsigned long *)mmap_fd(buf, size); - for (i = 0; i < size / sizeof(unsigned long); i++) - vaddr[i] = random(); - - vm.dma_buf_fd = buf; - - ret = ioctl(devfd, UDMABUF_VMAP, &vm); - if (ret < 0) - ksft_test_result_fail("%s: [FAIL, huge test]\n", TEST_PREFIX); - else - ksft_test_result_pass("%s: [PASS, huge test]\n", TEST_PREFIX); - munmap(vaddr, size); - close(buf); - close(memfd); - - ksft_print_msg("%s: ok\n", TEST_PREFIX); - ksft_print_cnts(); - - return 0; -}