Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/2216634/?format=api
{ "id": 2216634, "url": "http://patchwork.ozlabs.org/api/patches/2216634/?format=api", "web_url": "http://patchwork.ozlabs.org/project/linuxppc-dev/patch/20260327021403.214713-2-usama.arif@linux.dev/", "project": { "id": 2, "url": "http://patchwork.ozlabs.org/api/projects/2/?format=api", "name": "Linux PPC development", "link_name": "linuxppc-dev", "list_id": "linuxppc-dev.lists.ozlabs.org", "list_email": "linuxppc-dev@lists.ozlabs.org", "web_url": "https://github.com/linuxppc/wiki/wiki", "scm_url": "https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git", "webscm_url": "https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git/", "list_archive_url": "https://lore.kernel.org/linuxppc-dev/", "list_archive_url_format": "https://lore.kernel.org/linuxppc-dev/{}/", "commit_url_format": "https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git/commit/?id={}" }, "msgid": "<20260327021403.214713-2-usama.arif@linux.dev>", "list_archive_url": "https://lore.kernel.org/linuxppc-dev/20260327021403.214713-2-usama.arif@linux.dev/", "date": "2026-03-27T02:08:43", "name": "[v3,01/24] mm: thp: make split_huge_pmd functions return int for error propagation", "commit_ref": null, "pull_url": null, "state": "handled-elsewhere", "archived": false, "hash": "c46d4580d5aeb5f6a44db5f69111834e52c4d073", "submitter": { "id": 92719, "url": "http://patchwork.ozlabs.org/api/people/92719/?format=api", "name": "Usama Arif", "email": "usama.arif@linux.dev" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/linuxppc-dev/patch/20260327021403.214713-2-usama.arif@linux.dev/mbox/", "series": [ { "id": 497678, "url": "http://patchwork.ozlabs.org/api/series/497678/?format=api", "web_url": "http://patchwork.ozlabs.org/project/linuxppc-dev/list/?series=497678", "date": "2026-03-27T02:08:43", "name": "[v3,01/24] mm: thp: make split_huge_pmd functions return int for error propagation", "version": 3, "mbox": "http://patchwork.ozlabs.org/series/497678/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2216634/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2216634/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "\n <linuxppc-dev+bounces-18843-incoming=patchwork.ozlabs.org@lists.ozlabs.org>", "X-Original-To": [ "incoming@patchwork.ozlabs.org", "linuxppc-dev@lists.ozlabs.org" ], "Delivered-To": "patchwork-incoming@legolas.ozlabs.org", "Authentication-Results": [ "legolas.ozlabs.org;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=linux.dev header.i=@linux.dev header.a=rsa-sha256\n header.s=key1 header.b=AyyvqfAT;\n\tdkim-atps=neutral", "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=lists.ozlabs.org\n (client-ip=2404:9400:21b9:f100::1; helo=lists.ozlabs.org;\n envelope-from=linuxppc-dev+bounces-18843-incoming=patchwork.ozlabs.org@lists.ozlabs.org;\n receiver=patchwork.ozlabs.org)", "lists.ozlabs.org;\n arc=none smtp.remote-ip=91.218.175.189", "lists.ozlabs.org;\n dmarc=pass (p=none dis=none) header.from=linux.dev", "lists.ozlabs.org;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=linux.dev header.i=@linux.dev header.a=rsa-sha256\n header.s=key1 header.b=AyyvqfAT;\n\tdkim-atps=neutral", "lists.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=linux.dev\n (client-ip=91.218.175.189; helo=out-189.mta0.migadu.com;\n envelope-from=usama.arif@linux.dev; receiver=lists.ozlabs.org)" ], "Received": [ "from lists.ozlabs.org (lists.ozlabs.org\n [IPv6:2404:9400:21b9:f100::1])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fhkjr4PKVz1yFp\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 27 Mar 2026 13:14:39 +1100 (AEDT)", "from boromir.ozlabs.org (localhost [127.0.0.1])\n\tby lists.ozlabs.org (Postfix) with ESMTP id 4fhkjp4dWRz2yfs;\n\tFri, 27 Mar 2026 13:14:38 +1100 (AEDT)", "from out-189.mta0.migadu.com (out-189.mta0.migadu.com\n [91.218.175.189])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature RSA-PSS (2048 bits) server-digest\n SHA256)\n\t(No client certificate requested)\n\tby lists.ozlabs.org (Postfix) with ESMTPS id 4fhkjm5P8Nz2xmX\n\tfor <linuxppc-dev@lists.ozlabs.org>; Fri, 27 Mar 2026 13:14:36 +1100 (AEDT)" ], "ARC-Seal": "i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707; t=1774577678;\n\tcv=none;\n b=fjk6OnBru9tDhnVLCUGJm4aBsffQHS6zS3TZ2ech/rcXhERcitLY5VRImv1mFeLfeMI+dN2EkLjmRkZXaqWG0oq2pTfR9P4MRD+TbDGWlR6gEFLIWhk4tIt0qckFFUYsM5V2VLV/hPct+bHtSFKW0j32746ngvyVccHVKCrBu7kl8KReiKMKdYMwXExJdSk33Clul8AqJvWNdw0oqUi2HYZWuafcVxkq2x3u8E43FTmbEpv88xzTWuWT4racjWCpvz06zDRGdU1AtEjY7a7JLZ2ow6NrhMOOVimPhhCtYVJfCdJXVJmmAAyXlnqDzVMZBq4RTwNW2qfVPleJ7iTVBg==", "ARC-Message-Signature": "i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707;\n\tt=1774577678; c=relaxed/relaxed;\n\tbh=35ZUueVWTNj5ENc9hO0kXufOV22N6/4M8lIMyGx5nWI=;\n\th=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:\n\t MIME-Version:Content-Type;\n b=PxYyPILxC5hBMnTUeHOClDNbPPk6RW29NiNASRxsjIGZ9wXN8GgGDvGXvPzhiAqxu7igmHhcVvLaNFAC57sFtUDKRYJzho8d/ITJlRvCtc9lxgffXf5/0Zyc9315YG5KyJ8bBfJa6iVxnRSrhUOQp3/k73BaKjiVeMuQlneemi5JcooSYTTyv9ww26Zbna7GtOAcxvdBjZyfVdyZeGMtVn+aCi3M9faqBtOApwKY9bzZg1Mai9cEE5dhco0c2MMQX/gRMiF1RTHT7/GFZmNJBUQipwXptyfgc+Mx3tXcF0ykQ2X7HhpIjAjVmuimALiWbIfOeFtp/FqBw5YpelVGtw==", "ARC-Authentication-Results": "i=1; lists.ozlabs.org;\n dmarc=pass (p=none dis=none) header.from=linux.dev; dkim=pass (1024-bit key;\n unprotected) header.d=linux.dev header.i=@linux.dev header.a=rsa-sha256\n header.s=key1 header.b=AyyvqfAT; dkim-atps=neutral;\n spf=pass (client-ip=91.218.175.189; helo=out-189.mta0.migadu.com;\n envelope-from=usama.arif@linux.dev;\n receiver=lists.ozlabs.org) smtp.mailfrom=linux.dev", "X-Report-Abuse": "Please report any abuse attempt to abuse@migadu.com and\n include these headers.", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1;\n\tt=1774577656;\n\th=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n\t to:to:cc:cc:mime-version:mime-version:content-type:content-type:\n\t content-transfer-encoding:content-transfer-encoding:\n\t in-reply-to:in-reply-to:references:references;\n\tbh=35ZUueVWTNj5ENc9hO0kXufOV22N6/4M8lIMyGx5nWI=;\n\tb=AyyvqfATC2BCM88QS4aIPXad5Ss5lC9cHT+xptmrLSNcMLknDQOu4gCyD1sp2YYHpHTvk4\n\tVNJ9tKHO1z4pcHLd7iTIFFjH3tGKbBu91MSXsXrZW8sVi+XZU0uHE+BRUOx22o/9NBQ71z\n\tP3xX9UxGsvxqcy4J1vMbAqdE12t9QJ4=", "From": "Usama Arif <usama.arif@linux.dev>", "To": "Andrew Morton <akpm@linux-foundation.org>,\n\tdavid@kernel.org,\n\tLorenzo Stoakes <ljs@kernel.org>,\n\twilly@infradead.org,\n\tlinux-mm@kvack.org", "Cc": "fvdl@google.com,\n\thannes@cmpxchg.org,\n\triel@surriel.com,\n\tshakeel.butt@linux.dev,\n\tkas@kernel.org,\n\tbaohua@kernel.org,\n\tdev.jain@arm.com,\n\tbaolin.wang@linux.alibaba.com,\n\tnpache@redhat.com,\n\tLiam.Howlett@oracle.com,\n\tryan.roberts@arm.com,\n\tVlastimil Babka <vbabka@kernel.org>,\n\tlance.yang@linux.dev,\n\tlinux-kernel@vger.kernel.org,\n\tkernel-team@meta.com,\n\tmaddy@linux.ibm.com,\n\tmpe@ellerman.id.au,\n\tlinuxppc-dev@lists.ozlabs.org,\n\thca@linux.ibm.com,\n\tgor@linux.ibm.com,\n\tagordeev@linux.ibm.com,\n\tborntraeger@linux.ibm.com,\n\tsvens@linux.ibm.com,\n\tlinux-s390@vger.kernel.org,\n\tUsama Arif <usama.arif@linux.dev>", "Subject": "[v3 01/24] mm: thp: make split_huge_pmd functions return int for\n error propagation", "Date": "Thu, 26 Mar 2026 19:08:43 -0700", "Message-ID": "<20260327021403.214713-2-usama.arif@linux.dev>", "In-Reply-To": "<20260327021403.214713-1-usama.arif@linux.dev>", "References": "<20260327021403.214713-1-usama.arif@linux.dev>", "X-Mailing-List": "linuxppc-dev@lists.ozlabs.org", "List-Id": "<linuxppc-dev.lists.ozlabs.org>", "List-Help": "<mailto:linuxppc-dev+help@lists.ozlabs.org>", "List-Owner": "<mailto:linuxppc-dev+owner@lists.ozlabs.org>", "List-Post": "<mailto:linuxppc-dev@lists.ozlabs.org>", "List-Archive": "<https://lore.kernel.org/linuxppc-dev/>,\n <https://lists.ozlabs.org/pipermail/linuxppc-dev/>", "List-Subscribe": "<mailto:linuxppc-dev+subscribe@lists.ozlabs.org>,\n <mailto:linuxppc-dev+subscribe-digest@lists.ozlabs.org>,\n <mailto:linuxppc-dev+subscribe-nomail@lists.ozlabs.org>", "List-Unsubscribe": "<mailto:linuxppc-dev+unsubscribe@lists.ozlabs.org>", "Precedence": "list", "MIME-Version": "1.0", "Content-Type": "text/plain; charset=UTF-8", "Content-Transfer-Encoding": "8bit", "X-Migadu-Flow": "FLOW_OUT", "X-Spam-Status": "No, score=-0.9 required=3.0 tests=DKIM_SIGNED,DKIM_VALID,\n\tDKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_LOW,SPF_HELO_PASS,SPF_PASS\n\tautolearn=disabled version=4.0.1 OzLabs 8", "X-Spam-Checker-Version": "SpamAssassin 4.0.1 (2024-03-25) on lists.ozlabs.org" }, "content": "Currently split cannot fail, but future patches will add lazy PTE page\ntable allocation. With lazy PTE page table allocation at THP split time\n__split_huge_pmd() calls pte_alloc_one() which can fail if order-0\nallocation cannot be satisfied.\nSplit functions currently return void, so callers have no way to detect\nthis failure. The PMD would remain huge, but callers assumed the split\nsucceeded and proceeded to operate on that basis — interpreting a huge PMD\nentry as a page table pointer could result in a kernel bug.\n\nChange __split_huge_pmd(), split_huge_pmd(), split_huge_pmd_if_needed()\nand split_huge_pmd_address() to return 0 on success (-ENOMEM on\nallocation failure in later patch). Convert the split_huge_pmd macro\nto a static inline function that propagates the return value. The return\nvalues will be handled by the callers in future commits.\n\nThe CONFIG_TRANSPARENT_HUGEPAGE=n stubs are changed to return 0.\n\nNo behaviour change is expected with this patch.\n\nSigned-off-by: Usama Arif <usama.arif@linux.dev>\n---\n include/linux/huge_mm.h | 34 ++++++++++++++++++----------------\n mm/huge_memory.c | 16 ++++++++++------\n 2 files changed, 28 insertions(+), 22 deletions(-)", "diff": "diff --git a/include/linux/huge_mm.h b/include/linux/huge_mm.h\nindex 1258fa37e85b5..b081ce044c735 100644\n--- a/include/linux/huge_mm.h\n+++ b/include/linux/huge_mm.h\n@@ -418,7 +418,7 @@ static inline int split_huge_page(struct page *page)\n extern struct list_lru deferred_split_lru;\n void deferred_split_folio(struct folio *folio, bool partially_mapped);\n \n-void __split_huge_pmd(struct vm_area_struct *vma, pmd_t *pmd,\n+int __split_huge_pmd(struct vm_area_struct *vma, pmd_t *pmd,\n \t\tunsigned long address, bool freeze);\n \n /**\n@@ -447,15 +447,15 @@ static inline bool pmd_is_huge(pmd_t pmd)\n \treturn false;\n }\n \n-#define split_huge_pmd(__vma, __pmd, __address)\t\t\t\t\\\n-\tdo {\t\t\t\t\t\t\t\t\\\n-\t\tpmd_t *____pmd = (__pmd);\t\t\t\t\\\n-\t\tif (pmd_is_huge(*____pmd))\t\t\t\t\\\n-\t\t\t__split_huge_pmd(__vma, __pmd, __address,\t\\\n-\t\t\t\t\t false);\t\t\t\\\n-\t} while (0)\n+static inline int split_huge_pmd(struct vm_area_struct *vma,\n+\t\t\t\t\t pmd_t *pmd, unsigned long address)\n+{\n+\tif (pmd_is_huge(*pmd))\n+\t\treturn __split_huge_pmd(vma, pmd, address, false);\n+\treturn 0;\n+}\n \n-void split_huge_pmd_address(struct vm_area_struct *vma, unsigned long address,\n+int split_huge_pmd_address(struct vm_area_struct *vma, unsigned long address,\n \t\tbool freeze);\n \n void __split_huge_pud(struct vm_area_struct *vma, pud_t *pud,\n@@ -649,13 +649,15 @@ static inline int try_folio_split_to_order(struct folio *folio,\n }\n \n static inline void deferred_split_folio(struct folio *folio, bool partially_mapped) {}\n-#define split_huge_pmd(__vma, __pmd, __address)\t\\\n-\tdo { } while (0)\n-\n-static inline void __split_huge_pmd(struct vm_area_struct *vma, pmd_t *pmd,\n-\t\tunsigned long address, bool freeze) {}\n-static inline void split_huge_pmd_address(struct vm_area_struct *vma,\n-\t\tunsigned long address, bool freeze) {}\n+static inline int split_huge_pmd(struct vm_area_struct *vma, pmd_t *pmd,\n+\t\t\t\tunsigned long address)\n+{\n+\treturn 0;\n+}\n+static inline int __split_huge_pmd(struct vm_area_struct *vma, pmd_t *pmd,\n+\t\tunsigned long address, bool freeze) { return 0; }\n+static inline int split_huge_pmd_address(struct vm_area_struct *vma,\n+\t\tunsigned long address, bool freeze) { return 0; }\n static inline void split_huge_pmd_locked(struct vm_area_struct *vma,\n \t\t\t\t\t unsigned long address, pmd_t *pmd,\n \t\t\t\t\t bool freeze) {}\ndiff --git a/mm/huge_memory.c b/mm/huge_memory.c\nindex b2a6060b3c202..976a1c74c0870 100644\n--- a/mm/huge_memory.c\n+++ b/mm/huge_memory.c\n@@ -3283,7 +3283,7 @@ void split_huge_pmd_locked(struct vm_area_struct *vma, unsigned long address,\n \t\t__split_huge_pmd_locked(vma, pmd, address, freeze);\n }\n \n-void __split_huge_pmd(struct vm_area_struct *vma, pmd_t *pmd,\n+int __split_huge_pmd(struct vm_area_struct *vma, pmd_t *pmd,\n \t\tunsigned long address, bool freeze)\n {\n \tspinlock_t *ptl;\n@@ -3297,20 +3297,22 @@ void __split_huge_pmd(struct vm_area_struct *vma, pmd_t *pmd,\n \tsplit_huge_pmd_locked(vma, range.start, pmd, freeze);\n \tspin_unlock(ptl);\n \tmmu_notifier_invalidate_range_end(&range);\n+\n+\treturn 0;\n }\n \n-void split_huge_pmd_address(struct vm_area_struct *vma, unsigned long address,\n+int split_huge_pmd_address(struct vm_area_struct *vma, unsigned long address,\n \t\tbool freeze)\n {\n \tpmd_t *pmd = mm_find_pmd(vma->vm_mm, address);\n \n \tif (!pmd)\n-\t\treturn;\n+\t\treturn 0;\n \n-\t__split_huge_pmd(vma, pmd, address, freeze);\n+\treturn __split_huge_pmd(vma, pmd, address, freeze);\n }\n \n-static inline void split_huge_pmd_if_needed(struct vm_area_struct *vma, unsigned long address)\n+static inline int split_huge_pmd_if_needed(struct vm_area_struct *vma, unsigned long address)\n {\n \t/*\n \t * If the new address isn't hpage aligned and it could previously\n@@ -3319,7 +3321,9 @@ static inline void split_huge_pmd_if_needed(struct vm_area_struct *vma, unsigned\n \tif (!IS_ALIGNED(address, HPAGE_PMD_SIZE) &&\n \t range_in_vma(vma, ALIGN_DOWN(address, HPAGE_PMD_SIZE),\n \t\t\t ALIGN(address, HPAGE_PMD_SIZE)))\n-\t\tsplit_huge_pmd_address(vma, address, false);\n+\t\treturn split_huge_pmd_address(vma, address, false);\n+\n+\treturn 0;\n }\n \n void vma_adjust_trans_huge(struct vm_area_struct *vma,\n", "prefixes": [ "v3", "01/24" ] }