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: 14030886
Return-Path:
X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on
aws-us-west-2-korg-lkml-1.web.codeaurora.org
Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17])
by smtp.lore.kernel.org (Postfix) with ESMTP id 637FDC3600E
for ; Thu, 27 Mar 2025 09:30:18 +0000 (UTC)
Received: by kanga.kvack.org (Postfix)
id 4E3B02800CE; Thu, 27 Mar 2025 05:30:16 -0400 (EDT)
Received: by kanga.kvack.org (Postfix, from userid 40)
id 46BF82800C9; Thu, 27 Mar 2025 05:30:16 -0400 (EDT)
X-Delivered-To: int-list-linux-mm@kvack.org
Received: by kanga.kvack.org (Postfix, from userid 63042)
id 296DC2800CE; Thu, 27 Mar 2025 05:30:16 -0400 (EDT)
X-Delivered-To: linux-mm@kvack.org
Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com
[216.40.44.14])
by kanga.kvack.org (Postfix) with ESMTP id 02DD42800C9
for ; Thu, 27 Mar 2025 05:30:15 -0400 (EDT)
Received: from smtpin26.hostedemail.com (a10.router.float.18 [10.200.18.1])
by unirelay07.hostedemail.com (Postfix) with ESMTP id 2BFB31608F7
for ; Thu, 27 Mar 2025 09:30:17 +0000 (UTC)
X-FDA: 83266810074.26.3F48DDE
Received: from HK3PR03CU002.outbound.protection.outlook.com
(mail-eastasiaazon11011036.outbound.protection.outlook.com [52.101.129.36])
by imf26.hostedemail.com (Postfix) with ESMTP id 0A1B5140010
for ; Thu, 27 Mar 2025 09:30:13 +0000 (UTC)
Authentication-Results: imf26.hostedemail.com;
dkim=pass header.d=vivo.com header.s=selector2 header.b=UrpvigLh;
dmarc=pass (policy=quarantine) header.from=vivo.com;
arc=pass ("microsoft.com:s=arcselector10001:i=1");
spf=pass (imf26.hostedemail.com: domain of link@vivo.com designates
52.101.129.36 as permitted sender) smtp.mailfrom=link@vivo.com
ARC-Seal: i=2; s=arc-20220608; d=hostedemail.com; t=1743067814; a=rsa-sha256;
cv=pass;
b=1UkV/05DEP2Upa9rKTRF++fDMB4Q4oDUxKSpCUoPWHj9tvN3XH6tOCob42F1qlapVmr9aM
43KibtQiEMY192t5js+j9QECxozKTYWSVgk232in8dvYqCuSBNj/9SmjvFIUKNHDwQO9Zp
WvEqTQeAE2/rqI4kwuGyEi5AucmM9A4=
ARC-Authentication-Results: i=2;
imf26.hostedemail.com;
dkim=pass header.d=vivo.com header.s=selector2 header.b=UrpvigLh;
dmarc=pass (policy=quarantine) header.from=vivo.com;
arc=pass ("microsoft.com:s=arcselector10001:i=1");
spf=pass (imf26.hostedemail.com: domain of link@vivo.com designates
52.101.129.36 as permitted sender) smtp.mailfrom=link@vivo.com
ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed;
d=hostedemail.com;
s=arc-20220608; t=1743067814;
h=from:from:sender:reply-to:subject:subject:date:date:
message-id:message-id:to:to:cc:cc:mime-version:mime-version:
content-type:content-type:
content-transfer-encoding:content-transfer-encoding:
in-reply-to:in-reply-to:references:references:dkim-signature;
bh=fOOnb9+cfRDqAWJwz7ieRVU48ffQ9jXJPy1HhLdXnDA=;
b=q+iD0x30m8Oqglj8rwdN4AiIvqWXEZaF/xCxAar+h709Gq3LnJ1Sjs2DfwFQsQXZLBNYX+
rXYMZlM97KRgnIpV3SO6SvGBYC6uZourl5O7XAtEmMwgv1Aca8o8mxHB4qUgTyGB0lz3p2
mcLBRp9OHHZuHG9LDJCdacCp3k9qOcY=
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==
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)
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
X-Rspamd-Queue-Id: 0A1B5140010
X-Stat-Signature: wyegsbnta1993hkjbuei88a6xi4z19cg
X-Rspam-User:
X-Rspamd-Server: rspam06
X-HE-Tag: 1743067813-649775
X-HE-Meta:
U2FsdGVkX1/KaZcFddLSInHSNGfp+2ETj37uUwr7ikq1oxyzeSO9cUZDNqiP480k2Cbvjw+DqdziBsLZ2YTiH1TWdxHPzL0CT7YLdKiicquFJLpWJ19/P4JxVzKDCTlQhQe3u3ozCc25cb/3dt7Hl0jm/xn5vgnDDKO5sryumMeF+AFtbckUthxp8r3HkCCuhnw7ySGDkRe7tYepXD9Su5pGJI6rqrZhVoFupYR3RiUFH8KCeKu8xgYYGhvqMKSuuAmCfWRop+5b8W/vv/JdIeDEsimPLGrCeD4YSo4MhADDIvTlrHKluJ0RkisnjMR9NlLekAXQzNWnyke4B+QY/bY/Avfcs94JlxWr9xRbem6Ud0II5CAdkJohXYANod12KjluUNZPZjz3cr25di8wlFa2mCZkidE/urj3EvDwHZhJWwmH1PTgQqMeChFCzlHbI4O1zalPJittXf/d9zsCfHw2Rh6pcDfFo3BBjownT/G0yOUJqLMh9AyvlY3NoAmIroLwPuHlffMvX2qSu9AAs/143IsuFKoGepl40dUTTqJdVmnv2zMLjPcUQDr4z9qu3H9pyGCThrpMWuDRDZJs1rRtnWNnekdCyljAu/3fo4AktL5Ub6gYqejgtKGxhHb+eQm4BbRDM/jNUxbZSPpulCx+kz+W7/GOZSMRJVF4Y7DRoaPGRaT7FmFAXw0mrUVK3jhRy7JFNKX7p5kwG0Q++XUbcN8LbILgQyAbZ4vd6Mj9RlRl1QYHsokOwRPug1xPRd53RJj+7uhB55RB3vUF5bb3jCSRPqLuF7MUtl+50ajvr002FTP+uaqKLhmnUP3a1mSwpcSdlRQ5bIPrUWye3yR2ps841Fg/4ktIGToIhUXrS4GE8MVTVskhgkddvA9YOEs/tXjAt23j1B7WnpOC18x5jokKaduuprW+sOqPunZo+aGHheruv2AS+4HNPXQR8ouK1BmdqhRAQKbl4s0
y81CHG45
S1wkMvwUsdDMf9AA2mhW2OBTQRIsz7Vh3hbs3YZNQ7WMTY3lZIu7hlj+SjzWEWWnwIGXPtBMb+4EyaJSbSkYQBneImrAbYnOIpmCb9PwC1T18e1qGn35/Aa+KtD+0e+T966DEfkMyI+k9/xnu3HjLcOeHVUdtdHS4mQbhrJzhMbb7ydEZ0TAXHP6EMZ+voAe6CsjNGNQDxXSNnS3uXNio4ooDlfycARn2E7aKLd/sYZpQqJE/oz92Vafh65owy8fVb+QA4jW60LK8St795/t2DUPJrwB7fxcZogWqTBEF6oas3lgcVa3Hkl4HJgidYB3mz0OzB/cB5sAD+BEzjP4kYEsDySEYMmoDQIJK+MtanB3qFQ74Cub8/OTQogjWPeAOvpvpTWnbERjc/QN+BvJ4lAvd+12x/RCKjtX2L+S5WtQTkRwyuaScD+bQ9AGSNtWjN/fFSYdw+EPw/Ogzt6mMvgGX1A==
X-Bogosity: Ham, tests=bogofilter, spamicity=0.013303, version=1.2.4
Sender: owner-linux-mm@kvack.org
Precedence: bulk
X-Loop: owner-majordomo@kvack.org
List-ID:
List-Subscribe:
List-Unsubscribe:
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;
+}