From patchwork Fri Mar 7 17:39:59 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zi Yan X-Patchwork-Id: 14006819 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 7D8D0C19F32 for ; Fri, 7 Mar 2025 17:40:37 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 77B936B008A; Fri, 7 Mar 2025 12:40:36 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 6DFB56B008C; Fri, 7 Mar 2025 12:40:36 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 50B7E6B0092; Fri, 7 Mar 2025 12:40:36 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id 2D9FD6B008A for ; Fri, 7 Mar 2025 12:40:36 -0500 (EST) Received: from smtpin07.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 3C0135626E for ; Fri, 7 Mar 2025 17:40:36 +0000 (UTC) X-FDA: 83195469672.07.95308CF Received: from NAM11-CO1-obe.outbound.protection.outlook.com (mail-co1nam11on2062.outbound.protection.outlook.com [40.107.220.62]) by imf14.hostedemail.com (Postfix) with ESMTP id 5783B100006 for ; Fri, 7 Mar 2025 17:40:33 +0000 (UTC) Authentication-Results: imf14.hostedemail.com; dkim=pass header.d=Nvidia.com header.s=selector2 header.b=Ex8VJ9xi; dmarc=pass (policy=reject) header.from=nvidia.com; spf=pass (imf14.hostedemail.com: domain of ziy@nvidia.com designates 40.107.220.62 as permitted sender) smtp.mailfrom=ziy@nvidia.com; arc=pass ("microsoft.com:s=arcselector10001:i=1") ARC-Seal: i=2; s=arc-20220608; d=hostedemail.com; t=1741369233; a=rsa-sha256; cv=pass; b=rp9BQD7mahQYwBXM7W5clV9NJtQw5RzspOxpg3/IUfMQZNQRb5To2JG+g5S94gct9WuNT5 N895AFBZ7JS8SbQhrcNDKsOgYDWE/sRxEyYNpGG/JU3xmDAk5G+RLdpFea1SeYQat/j9js ictHREU+GevB6gZO1Rplb/3tItQaUBQ= ARC-Authentication-Results: i=2; imf14.hostedemail.com; dkim=pass header.d=Nvidia.com header.s=selector2 header.b=Ex8VJ9xi; dmarc=pass (policy=reject) header.from=nvidia.com; spf=pass (imf14.hostedemail.com: domain of ziy@nvidia.com designates 40.107.220.62 as permitted sender) smtp.mailfrom=ziy@nvidia.com; arc=pass ("microsoft.com:s=arcselector10001:i=1") ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1741369233; 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=ZgrkPhISa1K9KKRxthtvg4n6DwyTM7a7N/h+qLHQZpA=; b=liqdsW5zObWqUBPXAMIcZO11Z6fVwG36Ghw0jQ9tgwsalO4z2vbw7PKjjzSyPrYGCmtC5K sKfiONiieW8R0EP6bj/2Li8YS717kMDmpYyXJCe7JtkOuHxc5++n/Ga2cNVOwPk17Wh6P7 qSyQn09KY7p4HdbYWNR6nbxvqjzLekc= ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=vssDaFEdF8cq2Nbz+xc46Jm6SyqO3X58nR2rNqWjoEoHzRLHj/FWS1v4L/inuKDEYTDuTufoHRRPh4ilzlt/k1Bf906ktdNt3kYrvp379WP0tKUwVVv6o7QzLBDtGdv7+Yr6f/cILBzE8RE6+h2Hizm9/d4+qXjjyX3wxDjPrpMCrice8gYU7IM5MHjbuP7eIetRyvoNt88/F/cBRkhGTVwHBOXrkVGQvEOMb+4rZFW889hW6jRu0h16pmwszQALE+PnEQ7mLPMG0K+OhgoGvpToFCwGGMGXptJduXaLT6jcz9UcYqB79wZKIPCD2ofIrGW0bA2FlWIg1TyWShcNmA== 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=ZgrkPhISa1K9KKRxthtvg4n6DwyTM7a7N/h+qLHQZpA=; b=DCuncu7XtU71ep/hjYrfj4+yITHz0W3QWv086x7HZLks9HARJ5GFpUJJfSLLyzhqFyh1xCqngxnETV4AxDT48FQDtjidKybXGIQ1FAzOhDQ0y3NJaRRmRT+BQQl56ZmwTQySiX2aPR0/6n0lcSNHRZhTw2CYq+D3wTsy04wD0p5ff17qwBSuGeLFNGxBbrduYAcz307nIUM/+JMJT7BUHbF4291EsnPcAly6d3qCxDWx05aVTPRp0yYTRvuevmVsDP0oIJXDvMTNjOGBav68joPZd2s0uQxwIeVlrac8mvYvStsQeh2JygOHmdlTF1brEKe7zTIZ8nLpTCoLoFxFvA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ZgrkPhISa1K9KKRxthtvg4n6DwyTM7a7N/h+qLHQZpA=; b=Ex8VJ9xio9rZcFvxwgFFCBu3zRd5ByHYRPB9P2favvEwIERGPU44fc5uXLgmB54swIi1z0/87r5D8tg1G99QQli2xZpuLMn2Uesft4s774c8evVu+3KDFg8jdXFSmm1c9UE5Hz5WtN01gcDS/Z1qhIpeyassJ1NKlV5VgkVJrztGv6uOTu6pQu/DnrloS1AS/zmil3S5nI57yTmByxrDqy6A3/UHwi0Ui/5/TZPy+XpR0EVVYtFPEHoxkEe/6e+Anc39wtWse+n7iEyFNKa44VIJz5LycBZso+0hBfbcI3kLEe8pd6BjEOWcRJWTqyNUhbAFkKswUyZC2cMN9RidgA== Received: from DS7PR12MB9473.namprd12.prod.outlook.com (2603:10b6:8:252::5) by LV2PR12MB6014.namprd12.prod.outlook.com (2603:10b6:408:170::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8511.19; Fri, 7 Mar 2025 17:40:16 +0000 Received: from DS7PR12MB9473.namprd12.prod.outlook.com ([fe80::5189:ecec:d84a:133a]) by DS7PR12MB9473.namprd12.prod.outlook.com ([fe80::5189:ecec:d84a:133a%5]) with mapi id 15.20.8511.020; Fri, 7 Mar 2025 17:40:16 +0000 From: Zi Yan To: linux-mm@kvack.org, Andrew Morton , Hugh Dickins , "Matthew Wilcox (Oracle)" Cc: Ryan Roberts , "Kirill A . Shutemov" , David Hildenbrand , Yang Shi , Miaohe Lin , Kefeng Wang , Yu Zhao , John Hubbard , Baolin Wang , linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, Zi Yan , Kairui Song Subject: [PATCH v10 6/8] mm/huge_memory: add folio_split() to debugfs testing interface Date: Fri, 7 Mar 2025 12:39:59 -0500 Message-ID: <20250307174001.242794-7-ziy@nvidia.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250307174001.242794-1-ziy@nvidia.com> References: <20250307174001.242794-1-ziy@nvidia.com> X-ClientProxiedBy: BN9PR03CA0083.namprd03.prod.outlook.com (2603:10b6:408:fc::28) To DS7PR12MB9473.namprd12.prod.outlook.com (2603:10b6:8:252::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS7PR12MB9473:EE_|LV2PR12MB6014:EE_ X-MS-Office365-Filtering-Correlation-Id: 2c38b2aa-87a7-4c25-8960-08dd5d9f1f2b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|366016|1800799024; X-Microsoft-Antispam-Message-Info: 9BZvG6fv2I0H1Ly8uKfQlrtSxH96CIYKxXRQ/EQHfkI3iCXZBZ96J8z/IQJTVflCjlKnOg64jUkRvWClkyTEzYrTeB/rPbpNOJw8/rmUW2ScRGp83xJ2t3vJbTxoMzyxs4lBzbJk9kiE1RxVynVdWA9N8InrXPh7/Y9rOb5V8MSr8CuAkKo+xuGjk+4Z8tL5yNkXB3mnMzj36Oy82qSKJFe10yc+2d58vAdMzORlyUA9RXfedAi38X2gCqJ4vhx20O5VQVBnmtT3T0yn/FnBzai0hFkiZCxEX3tEH59z3RZUmHkKeuvsL6GiZUX8lTLwtZYQN8Oo6YMYkqA4tbQl3xx7qsxQmCvgFI2DxXd9xQ4xANTaEY7pscdeRuUfhYNWesrvt/P2uFOPi4BKumKB7+9l4itOuNg7/tpOgfsS7A0AsNArjwUMgyhXA26ElXprvvOX09Tck0smxFy+xm1tuBlvOB6SuUBmIBuTJc9BXJWpSIqrYEQohiqaxM6NFUlBiSTNzJt/PzUUZHBTOJNx1o6+rdFVADQiL/36wJNwrCqUxisNDz8ZyNRM4nme5ffxGvp2VlgukHmBIvg2Hr21l/T+flhod1h9IKXRHQOGtMOWTidHyDWc4Mrn8wTqqKTp6WGTA5l1Tc8rfWtazHrchBt6kTHgGqvRNgdxV59fmMBUNpsU2WWQ46eXix+idGTtkfXbNpJXrTIYdWem52BIKBYDhgvcl28GX3fYXtyiJVoTujCX7scWI/+mw+Joe7/od7E1RWe8sRIO3fJqY6DotlKNR5ZwWOADNuZCjAXTpvqf6iBrWKVd/PO/iY5tgCVVx9/y1CQJLNpywUOS1CEA+Eo/PpP/AwavGqpcRMWr2k5xN3PT38pcLLkrr25YVSOZqvs1DLgzp7u2ZEkqnuJDv9LOQ+kNU5//r9+dQhV9wbvfBRJDjRZv+Q6EFIA0sy3z0cihkIkPs4lMPPzMtyqZrNtcM9X3IcnQotPtXOJDiQaa2R4vZvEiA2rwicO0klfaRdXUcapE/IwUdLq4aqoQkmLVKLGLxbQim+Ofd2MaIgu/jXk45SAdzBzG0Ntfti+C8X9QPy/C50Ha88wNuXWCrqiazyyVDkv39ZV9BneeDe1pu1g8tXiMAnBn1Em2j96schB2xqLx+qCD8rCbF/dRpUHlmfCsdz7uGqbRRkWvT0DQ2lIWKGSYtKTpQ+BV7eRJOeHuHgPvbuGd4m5M8iBgfHLezxd6X4+OQBjV13f7SiWT1+jkm7MKkgaR/iRGXrolE8g9sK0JdHr0HPTrDIG751MYN+mh/CCBv0/hDuKGMRrbXqossHc25RGLnws58jD+Y8fmhyVey7LS/IBGs/DW7g1/xcxoICejueXFBR97JtZhn2qWxTOTy0ZHNK1i6htN X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS7PR12MB9473.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(366016)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: NZ83g5cOkAxqvG4o5EHWcN6lVrk65HoWw80TgsohhUETCQklAzt65tIrMTdM9aWxsC6zI/6qMu2Utx/rQcqsqwMhySAteNNaux8QD9/+GXIh3sItY8emQ2QWUldU9XWD1STJ1kYrHv/vy808+RWU1yYv6ge+T6a9RRAJSOQx/LDS9kM79G4CObo0svZ/Mw8u2rkNGEDlmkMvy+HDCwynqgxqZgaKTjjkmkHTFUKhvgquHr2I7pjXQiP0eBCCkZuabFABwrTAJzU15ANfBUc/njkAbPkQN+H3q5473aeL6DisMztkfqjl8NtL4F1QygF6ywHvSq8X5dXXjG2prG6xzQeQsA4pWEeRkTclk7kty+OTJ1kkYb5jyoifpqmBAa6evCm+RFbh/vfd68vi/m3PPMV7VQTdwCVGepu6qMT8m5/0MtQkn4F8QFlUBi5OTEdQC1FuzFvynCcS85NPFmLp1V3rkxTaAhXy74N4wl8QoUw3AM/KIdzw9wpUsHcNRVXUf/xPhxyJ1NVIa2nnNMn7Q3KfYlrCKPcSzeKGY1bqeRLNm+OHmfNQVT9W0YU0L6jdS4TkRpbCFkRVFKzt63G2CVlh2vjvHtgCOuxtNWZ91r/zPrhDZBnsVss/82IfeLcvW1yMGY0Zhn4WcMZKRXiNLPryBtdWPCjq+1XxsIMy1nLVrSZeywt+pfcjlbHBKbuTjYBmEnFIiIojAzw3ChC1c0KWR0+aTqplb5gBvKlHuhhmUEqnFe59YUVOLmNeyXL3YWzyGvvN6B7XgBGRYfI7hYdcmgU62WCyzFYk7eEkqY3MdwjuiI06mICbgjdqHbRGiVBrBfNpZ7r7h+bAYeoTN9sLbjn0YhZWfVcz7VDZn9g09LTogM6sjm3ox1DcOgpRFF9lgDoM8xIqR/m20Tx+qno6nLizwyI3U+F7SSKbyY4jOY5v5N6qJyLdqFNrgLHfOEPYLAD3b6tGqDZFD0+nAxpbHlHe5ndYzn9eeGBTen/mOvDDbm6/lnAMuhBLfT2xmTyF0ab3XjIsXhaGVrKOBHKhjsJ9zCI1TeY++Dy4LekMY0h3Qj3ZRmxirAq6FMJr9I2UDxBRE+GrHpQybFbnTBjSLIccjuOCAR4TN+Ik6hGOeG2a6cViA2gvP6GoFkUlPFFv72UoTmt/IP9QEl+0Kj659oHWle+V5pDgZPo9iXMEiyVC27eGKvZ2ibLFWXADGgAtLHPIHA3HBv3gx5ZgJ7N2fgADCSEVQewn35Ozq3lfytEw4X8J93fGw1PAeqkCVg88ErogTkiGZyOh60pFkApLm1h2Bu6m9f3Q9zMBgqjqkql7EwRlAJbLPPa/x98BKV0oV172C8n+0W03LekzDpLn+rW/OtCkhqbdfhNyGr+EOtLcW+7wsFvzeoic1cyHgkSiZi8obj20z5+3YqJWQwBEDv54Q8VdllZJsEfK06zlpmAjW3Va40fhd9N5A2LgkD4oeJ6UBYsNqBYfMHJP+Bm8yk49+ABr3bz9YUl6W3yD9lyipfHKhq4gh9QiuBfHNexqLN7gM1791yXQhcZxJkXTUpqvR6SRCR70JE7bzMOcZHJK6yJ8WInG5g4qdy64 X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2c38b2aa-87a7-4c25-8960-08dd5d9f1f2b X-MS-Exchange-CrossTenant-AuthSource: DS7PR12MB9473.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Mar 2025 17:40:16.1870 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 8rWF7XfKpjp3ysjCk59kVWJQlD7Cc7TGRtXpfl0pVJUF4Er0irGitb6FJkmIUPAh X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV2PR12MB6014 X-Rspam-User: X-Rspamd-Server: rspam03 X-Rspamd-Queue-Id: 5783B100006 X-Stat-Signature: yp5mxkre8w117fqt5fhbbjrk3yat6ras X-HE-Tag: 1741369233-104399 X-HE-Meta: U2FsdGVkX1/cfU29xWyLyLGN7NkCv1F12uXCbCdAGMBQYeoQwUuRKyOEIboQQ2ttGGYgy+AH2xNdh8tp74oA1EMoFNJQRB8csKNjPGScCgIQ9TV+vNZDJ+wuY8nb3P3J5UeA9umsx2U7NneSBzHiqn0/DQIjOLM1Nge7a+dwyhYGDxoXsOdcqZ5dYL3EiGeaWFc4k/824iRl1KzF6ihdFFCsNbvRIyin41M0jeVKEGcO/S82JgdZLaRWwUB2lMiKLqMwelanoWjgUKI7GIWNxhxqC7JiB6hn/h+ZHokcfanliKL/0zdhs+27OBhZFbIal9qTEfwsGJb7hlEx5gbN9ft3m+cLy9PiP29CiL2qH2CuwooQsi71o5hLJHeAYHmUjBY3D7MrZEmFFH/ipCQh7r8+sJuK8xEmexpFF+8k1UimV92trdDW0vb4zqOnnIRGNVJYTMGTBvP1xWTQw8XYyi1b8C/n45jZPMSNBJHR/moLohA6WWIrbjSwTSqRkO0SdRj9j7st+ALgc1O22gL30SpWvSY47Y18tZjGjWwkJpVdRL6OCkAQVpX9xh9jCnKGGURzYmekx4qaORrt1Tetd94flVspcG3X8GxXgzrdwY8fKc9bLZza4IqO3qit076sFtejAwzoo/+yFwKQlWqom6VjoKp2Gh588roqSTo0iYOHf0KqbioSVNdjo0QKmi50qdMnMWORfj9MKrRdcqzCKUoqgZzXd69Z82w6gNbtAUxma9XPOZNCZx7ai+0vLx4UA6epHpW3vVpcACKzAER7NMn/LUbsalfdkxKxmv7zUjsWutvZympsBPkP4E9pJU2tkS/EJvmwxs9hS0YG1VfUJgPA3DED/Ipr4Oh9OOFojXjFxv5FMOONZt5NTgGUUvfCAw2D6YdR4rFitaX0GCU78C8Yzb7Ao/E9aB0ScqtyUhnkm5EU7TR38T2u1j1RsS2BsOUU69PxmC7seSEGPFd LDTqdpZE G4S2G+998RS0JUntKfccoEqAnOLFNU6l2ija30wsP2Wy2Q4ArrhUZhYebSAjPnEHJFUHgQ5jFHAnW5dKdM2cFjgkRi+hn7xcaLeNuPcHbVjHfLAoYHR3C7hcZXEIYg8HHGByNHcvPv1AYuNz7PbKIYzgcTAI0oy27+WoI7EeagFC1WvuzY5Fb4Aq76MmW/VV7+okuAbOLivj+wQ0rjYbpJ6JrvLyKpvQoewDQz4muAx0l95jRtowrPO4moO5Rre+d7i4JNWW5nJVJC38onyZ+3KmtNZKE5aW1ajY1BDhO0G3WSmS97Yv749bCSd1+Rdn1zxvnsoRZ5HX+hqg1ZBmRAFXmuVdbQj4KEKcHIso8MKys3ZvLOVy+A1rcOzB6LVHJKZxO8oURd61Qg6cjNH82QxD3MjYEpoXGKuFfd4AZ8jk/r/QDO2/tg5HsMM41qrqW+mxHXIckbVAhi9HRdYacLwerdQRKztkI/CJuMBZbya7Sc5dq7z3UEB/ufTToLhAvrshuN38Q989SohtjLjLnrb1Pi2NUBTTjPI+2tUpb5UiAWcGzRkdUb8kKvhGHGHmCORhKvxFjJZxx7BK6qH1eccQvwzuTzQ1LUs6CCC30vu8ymVBMLE8bSTnA/IqFPaqNQnUhQSkwyCx+l9JyuasaSZkMP8c9FiqLXpepsL0g3VK14LqS5lQQ3h9svahZcBB/eimg1NsxiSXW4NWEyO+iCa9RuHewzUFrfF2GhB5CsV42bCNjlDlNZoIk1g== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, 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 allows to test folio_split() by specifying an additional in folio page offset parameter to split_huge_page debugfs interface. Signed-off-by: Zi Yan Cc: Baolin Wang Cc: David Hildenbrand Cc: Hugh Dickins Cc: John Hubbard Cc: Kefeng Wang Cc: Kirill A. Shuemov Cc: Matthew Wilcox Cc: Miaohe Lin Cc: Ryan Roberts Cc: Yang Shi Cc: Yu Zhao Cc: Kairui Song --- mm/huge_memory.c | 47 ++++++++++++++++++++++++++++++++++------------- 1 file changed, 34 insertions(+), 13 deletions(-) diff --git a/mm/huge_memory.c b/mm/huge_memory.c index 6cc97d592797..d44b6d4b7f32 100644 --- a/mm/huge_memory.c +++ b/mm/huge_memory.c @@ -4325,7 +4325,8 @@ static inline bool vma_not_suitable_for_thp_split(struct vm_area_struct *vma) } static int split_huge_pages_pid(int pid, unsigned long vaddr_start, - unsigned long vaddr_end, unsigned int new_order) + unsigned long vaddr_end, unsigned int new_order, + long in_folio_offset) { int ret = 0; struct task_struct *task; @@ -4409,8 +4410,16 @@ static int split_huge_pages_pid(int pid, unsigned long vaddr_start, if (!folio_test_anon(folio) && folio->mapping != mapping) goto unlock; - if (!split_folio_to_order(folio, target_order)) - split++; + if (in_folio_offset < 0 || + in_folio_offset >= folio_nr_pages(folio)) { + if (!split_folio_to_order(folio, target_order)) + split++; + } else { + struct page *split_at = folio_page(folio, + in_folio_offset); + if (!folio_split(folio, target_order, split_at, NULL)) + split++; + } unlock: @@ -4433,7 +4442,8 @@ static int split_huge_pages_pid(int pid, unsigned long vaddr_start, } static int split_huge_pages_in_file(const char *file_path, pgoff_t off_start, - pgoff_t off_end, unsigned int new_order) + pgoff_t off_end, unsigned int new_order, + long in_folio_offset) { struct filename *file; struct file *candidate; @@ -4482,8 +4492,15 @@ static int split_huge_pages_in_file(const char *file_path, pgoff_t off_start, if (folio->mapping != mapping) goto unlock; - if (!split_folio_to_order(folio, target_order)) - split++; + if (in_folio_offset < 0 || in_folio_offset >= nr_pages) { + if (!split_folio_to_order(folio, target_order)) + split++; + } else { + struct page *split_at = folio_page(folio, + in_folio_offset); + if (!folio_split(folio, target_order, split_at, NULL)) + split++; + } unlock: folio_unlock(folio); @@ -4516,6 +4533,7 @@ static ssize_t split_huge_pages_write(struct file *file, const char __user *buf, int pid; unsigned long vaddr_start, vaddr_end; unsigned int new_order = 0; + long in_folio_offset = -1; ret = mutex_lock_interruptible(&split_debug_mutex); if (ret) @@ -4544,30 +4562,33 @@ static ssize_t split_huge_pages_write(struct file *file, const char __user *buf, goto out; } - ret = sscanf(tok_buf, "0x%lx,0x%lx,%d", &off_start, - &off_end, &new_order); - if (ret != 2 && ret != 3) { + ret = sscanf(tok_buf, "0x%lx,0x%lx,%d,%ld", &off_start, &off_end, + &new_order, &in_folio_offset); + if (ret != 2 && ret != 3 && ret != 4) { ret = -EINVAL; goto out; } - ret = split_huge_pages_in_file(file_path, off_start, off_end, new_order); + ret = split_huge_pages_in_file(file_path, off_start, off_end, + new_order, in_folio_offset); if (!ret) ret = input_len; goto out; } - ret = sscanf(input_buf, "%d,0x%lx,0x%lx,%d", &pid, &vaddr_start, &vaddr_end, &new_order); + ret = sscanf(input_buf, "%d,0x%lx,0x%lx,%d,%ld", &pid, &vaddr_start, + &vaddr_end, &new_order, &in_folio_offset); if (ret == 1 && pid == 1) { split_huge_pages_all(); ret = strlen(input_buf); goto out; - } else if (ret != 3 && ret != 4) { + } else if (ret != 3 && ret != 4 && ret != 5) { ret = -EINVAL; goto out; } - ret = split_huge_pages_pid(pid, vaddr_start, vaddr_end, new_order); + ret = split_huge_pages_pid(pid, vaddr_start, vaddr_end, new_order, + in_folio_offset); if (!ret) ret = strlen(input_buf); out: