Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/2175990/?format=api
{ "id": 2175990, "url": "http://patchwork.ozlabs.org/api/patches/2175990/?format=api", "web_url": "http://patchwork.ozlabs.org/project/linuxppc-dev/patch/20251219161559.556737-5-arnd@kernel.org/", "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": "<20251219161559.556737-5-arnd@kernel.org>", "list_archive_url": "https://lore.kernel.org/linuxppc-dev/20251219161559.556737-5-arnd@kernel.org/", "date": "2025-12-19T16:15:59", "name": "[4/4] mm: remove ARCH_NEEDS_KMAP_HIGH_GET", "commit_ref": null, "pull_url": null, "state": "handled-elsewhere", "archived": false, "hash": "52acb4d2e84f39ae71f32b872b88834116c72bcf", "submitter": { "id": 80402, "url": "http://patchwork.ozlabs.org/api/people/80402/?format=api", "name": "Arnd Bergmann", "email": "arnd@kernel.org" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/linuxppc-dev/patch/20251219161559.556737-5-arnd@kernel.org/mbox/", "series": [ { "id": 486021, "url": "http://patchwork.ozlabs.org/api/series/486021/?format=api", "web_url": "http://patchwork.ozlabs.org/project/linuxppc-dev/list/?series=486021", "date": "2025-12-19T16:15:56", "name": "mm: increase lowmem size in linux-7.0", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/486021/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2175990/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2175990/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "\n <linuxppc-dev+bounces-14910-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 (2048-bit key;\n unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256\n header.s=k20201202 header.b=dr1njzt/;\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-14910-incoming=patchwork.ozlabs.org@lists.ozlabs.org;\n receiver=patchwork.ozlabs.org)", "lists.ozlabs.org;\n arc=none smtp.remote-ip=172.234.252.31", "lists.ozlabs.org;\n dmarc=pass (p=quarantine dis=none) header.from=kernel.org", "lists.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256\n header.s=k20201202 header.b=dr1njzt/;\n\tdkim-atps=neutral", "lists.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=kernel.org\n (client-ip=172.234.252.31; helo=sea.source.kernel.org;\n envelope-from=arnd@kernel.org; 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 4dXt3W6TB0z1y2r\n\tfor <incoming@patchwork.ozlabs.org>; Sat, 20 Dec 2025 03:17:27 +1100 (AEDT)", "from boromir.ozlabs.org (localhost [127.0.0.1])\n\tby lists.ozlabs.org (Postfix) with ESMTP id 4dXt3W3jRvz2ySV;\n\tSat, 20 Dec 2025 03:17:27 +1100 (AEDT)", "from sea.source.kernel.org (sea.source.kernel.org [172.234.252.31])\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 lists.ozlabs.org (Postfix) with ESMTPS id 4dXt3V4Dszz2yFd\n\tfor <linuxppc-dev@lists.ozlabs.org>; Sat, 20 Dec 2025 03:17:26 +1100 (AEDT)", "from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58])\n\tby sea.source.kernel.org (Postfix) with ESMTP id F3C3241747;\n\tFri, 19 Dec 2025 16:16:54 +0000 (UTC)", "by smtp.kernel.org (Postfix) with ESMTPSA id CFC90C4CEF1;\n\tFri, 19 Dec 2025 16:16:51 +0000 (UTC)" ], "ARC-Seal": "i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707; t=1766161047;\n\tcv=none;\n b=X8ZBpum3xGxtGj3CU6uPwPL0hEIzv1TX+oFMyam0lFWmMynG8lMcspRpaS3ngzO0yza9JWID+FRaVUAty6U9IuPO5XJMRSvFu3s7yuROecD1sHEqkJ7/ZueQWgBZbG1APMOj8UDbDd9WckJkYWdD1JOEZlcNPBk6I1Bt4sn52wek5b9xYB0Ge0L6jb0ldCzpED7MllKQP8S1iwka620DVf2gle0HkSDHbOLFsaEstdcIwXO6J96Sg3EECz/rOh7MhXWaPHBvrYY+eVUyMlzMfVeaZN9JCKcl4HQdHAtx4vJyL6OIigUTXVCv/rPqpXicfT348oB4QKUg+X59NPYj8Q==", "ARC-Message-Signature": "i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707;\n\tt=1766161047; c=relaxed/relaxed;\n\tbh=oG9kzwziN2rWpW0J23ulZ8PPa8l4j1tYoxfToGcGa/c=;\n\th=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References:\n\t MIME-Version;\n b=RxWcfgGlK5kPD+SjhN8Xu00ik5tC+HvzB0HY1LGevrA6nWi0/eeeXEG2NkAncrpovPfavpgjCBYv6nOe/EIavlpcCdxDpYAMksSrgXKC3vOpwJiwBZ/c4JzO+gEdMr1sFBAGIX0zu1zkGQKLyD3dqzjiNZyDyauOXdS5bq02eefOwaeNSoV0iAUL+WWJSrqozBEx/S5DmyPHgff6gbM4pdE/YSAhgKEP+2pd13ooJ0u9WDgDq8+nTnbng5BoOVwkqZHIlMv/VsuO+K/Um2z13oZf9KO+S8teHoAwgEOwXHetf+1hs7QK4vjGqd0sknTBkN1rLb2hPXt5Nqu/q3rZOw==", "ARC-Authentication-Results": "i=1; lists.ozlabs.org;\n dmarc=pass (p=quarantine dis=none) header.from=kernel.org;\n dkim=pass (2048-bit key;\n unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256\n header.s=k20201202 header.b=dr1njzt/; dkim-atps=neutral;\n spf=pass (client-ip=172.234.252.31; helo=sea.source.kernel.org;\n envelope-from=arnd@kernel.org;\n receiver=lists.ozlabs.org) smtp.mailfrom=kernel.org", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;\n\ts=k20201202; t=1766161014;\n\tbh=F/duNi/R+z4Zxeogcma6jsyj8uMoppVrtRXoOSW/Mnw=;\n\th=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n\tb=dr1njzt/ZA2YkMrI9vlpvAk58EeOXzfZgvm82fooWsxvAjI+WLQL7Q/izIntoUvci\n\t lNYwSN6zJDeOAv7Py5/fvtKwuZt6c2r6QNzKrLsZia6iFqr8ljf+27wmsA5sQxOs6C\n\t NLuL6dY8TCD75VnCUFjGlNOmAgKtpE7NrmheisGdmSORBdfWQXvrwt02aM4URw2mmn\n\t cKZVwFvtZcBGtj/TYUN05rtShkZUV5gWS9VMqCZm0z665W4wfFZKeO8C4ZqI5hJBmB\n\t aNNcdeMS86UdNRfi3hcsDCaqTY/hITk5Gev5USZjW4RHdd+QAmsh8MnJGwlJmyb3a9\n\t fJ9AM8CkZhLuA==", "From": "Arnd Bergmann <arnd@kernel.org>", "To": "linux-mm@kvack.org", "Cc": "Arnd Bergmann <arnd@arndb.de>,\n\tAndrew Morton <akpm@linux-foundation.org>,\n\tAndreas Larsson <andreas@gaisler.com>,\n\tChristophe Leroy <chleroy@kernel.org>,\n\tDave Hansen <dave.hansen@linux.intel.com>,\n\tJason Gunthorpe <jgg@nvidia.com>,\n\tLinus Walleij <linus.walleij@linaro.org>,\n\tMatthew Wilcox <willy@infradead.org>,\n\tRichard Weinberger <richard@nod.at>,\n\tRussell King <linux@armlinux.org.uk>,\n\tlinux-arm-kernel@lists.infradead.org,\n\tlinux-fsdevel@vger.kernel.org,\n\tlinuxppc-dev@lists.ozlabs.org,\n\tx86@kernel.org", "Subject": "[PATCH 4/4] mm: remove ARCH_NEEDS_KMAP_HIGH_GET", "Date": "Fri, 19 Dec 2025 17:15:59 +0100", "Message-Id": "<20251219161559.556737-5-arnd@kernel.org>", "X-Mailer": "git-send-email 2.39.5", "In-Reply-To": "<20251219161559.556737-1-arnd@kernel.org>", "References": "<20251219161559.556737-1-arnd@kernel.org>", "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-Transfer-Encoding": "8bit", "X-Spam-Status": "No, score=-0.2 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,\n\tDKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,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": "From: Arnd Bergmann <arnd@arndb.de>\n\nArm has stopped setting ARCH_NEEDS_KMAP_HIGH_GET, so this\nis handled using the same wrappers across all architectures\nnow, which leaves room for simplification.\n\nReplace lock_kmap()/unlock_kmap() with open-coded spinlocks\nand drop the now empty arch_kmap_local_high_get() and\nkmap_high_unmap_local() helpers.\n\nSigned-off-by: Arnd Bergmann <arnd@arndb.de>\n---\n mm/highmem.c | 100 ++++++---------------------------------------------\n 1 file changed, 10 insertions(+), 90 deletions(-)", "diff": "diff --git a/mm/highmem.c b/mm/highmem.c\nindex b5c8e4c2d5d4..bdeec56471c9 100644\n--- a/mm/highmem.c\n+++ b/mm/highmem.c\n@@ -143,25 +143,6 @@ static __cacheline_aligned_in_smp DEFINE_SPINLOCK(kmap_lock);\n \n pte_t *pkmap_page_table;\n \n-/*\n- * Most architectures have no use for kmap_high_get(), so let's abstract\n- * the disabling of IRQ out of the locking in that case to save on a\n- * potential useless overhead.\n- */\n-#ifdef ARCH_NEEDS_KMAP_HIGH_GET\n-#define lock_kmap() spin_lock_irq(&kmap_lock)\n-#define unlock_kmap() spin_unlock_irq(&kmap_lock)\n-#define lock_kmap_any(flags) spin_lock_irqsave(&kmap_lock, flags)\n-#define unlock_kmap_any(flags) spin_unlock_irqrestore(&kmap_lock, flags)\n-#else\n-#define lock_kmap() spin_lock(&kmap_lock)\n-#define unlock_kmap() spin_unlock(&kmap_lock)\n-#define lock_kmap_any(flags) \\\n-\t\tdo { spin_lock(&kmap_lock); (void)(flags); } while (0)\n-#define unlock_kmap_any(flags) \\\n-\t\tdo { spin_unlock(&kmap_lock); (void)(flags); } while (0)\n-#endif\n-\n struct page *__kmap_to_page(void *vaddr)\n {\n \tunsigned long base = (unsigned long) vaddr & PAGE_MASK;\n@@ -237,9 +218,9 @@ static void flush_all_zero_pkmaps(void)\n \n void __kmap_flush_unused(void)\n {\n-\tlock_kmap();\n+\tspin_lock(&kmap_lock);\n \tflush_all_zero_pkmaps();\n-\tunlock_kmap();\n+\tspin_unlock(&kmap_lock);\n }\n \n static inline unsigned long map_new_virtual(struct page *page)\n@@ -273,10 +254,10 @@ static inline unsigned long map_new_virtual(struct page *page)\n \n \t\t\t__set_current_state(TASK_UNINTERRUPTIBLE);\n \t\t\tadd_wait_queue(pkmap_map_wait, &wait);\n-\t\t\tunlock_kmap();\n+\t\t\tspin_unlock(&kmap_lock);\n \t\t\tschedule();\n \t\t\tremove_wait_queue(pkmap_map_wait, &wait);\n-\t\t\tlock_kmap();\n+\t\t\tspin_lock(&kmap_lock);\n \n \t\t\t/* Somebody else might have mapped it while we slept */\n \t\t\tif (page_address(page))\n@@ -312,60 +293,32 @@ void *kmap_high(struct page *page)\n \t * For highmem pages, we can't trust \"virtual\" until\n \t * after we have the lock.\n \t */\n-\tlock_kmap();\n+\tspin_lock(&kmap_lock);\n \tvaddr = (unsigned long)page_address(page);\n \tif (!vaddr)\n \t\tvaddr = map_new_virtual(page);\n \tpkmap_count[PKMAP_NR(vaddr)]++;\n \tBUG_ON(pkmap_count[PKMAP_NR(vaddr)] < 2);\n-\tunlock_kmap();\n+\tspin_unlock(&kmap_lock);\n \treturn (void *) vaddr;\n }\n EXPORT_SYMBOL(kmap_high);\n \n-#ifdef ARCH_NEEDS_KMAP_HIGH_GET\n-/**\n- * kmap_high_get - pin a highmem page into memory\n- * @page: &struct page to pin\n- *\n- * Returns the page's current virtual memory address, or NULL if no mapping\n- * exists. If and only if a non null address is returned then a\n- * matching call to kunmap_high() is necessary.\n- *\n- * This can be called from any context.\n- */\n-void *kmap_high_get(const struct page *page)\n-{\n-\tunsigned long vaddr, flags;\n-\n-\tlock_kmap_any(flags);\n-\tvaddr = (unsigned long)page_address(page);\n-\tif (vaddr) {\n-\t\tBUG_ON(pkmap_count[PKMAP_NR(vaddr)] < 1);\n-\t\tpkmap_count[PKMAP_NR(vaddr)]++;\n-\t}\n-\tunlock_kmap_any(flags);\n-\treturn (void *) vaddr;\n-}\n-#endif\n-\n /**\n * kunmap_high - unmap a highmem page into memory\n * @page: &struct page to unmap\n *\n- * If ARCH_NEEDS_KMAP_HIGH_GET is not defined then this may be called\n- * only from user context.\n+ * This may be called only from user context.\n */\n void kunmap_high(const struct page *page)\n {\n \tunsigned long vaddr;\n \tunsigned long nr;\n-\tunsigned long flags;\n \tint need_wakeup;\n \tunsigned int color = get_pkmap_color(page);\n \twait_queue_head_t *pkmap_map_wait;\n \n-\tlock_kmap_any(flags);\n+\tspin_lock(&kmap_lock);\n \tvaddr = (unsigned long)page_address(page);\n \tBUG_ON(!vaddr);\n \tnr = PKMAP_NR(vaddr);\n@@ -392,7 +345,7 @@ void kunmap_high(const struct page *page)\n \t\tpkmap_map_wait = get_pkmap_wait_queue_head(color);\n \t\tneed_wakeup = waitqueue_active(pkmap_map_wait);\n \t}\n-\tunlock_kmap_any(flags);\n+\tspin_unlock(&kmap_lock);\n \n \t/* do wake-up, if needed, race-free outside of the spin lock */\n \tif (need_wakeup)\n@@ -507,30 +460,11 @@ static inline void kmap_local_idx_pop(void)\n #define arch_kmap_local_unmap_idx(idx, vaddr)\tkmap_local_calc_idx(idx)\n #endif\n \n-#ifndef arch_kmap_local_high_get\n-static inline void *arch_kmap_local_high_get(const struct page *page)\n-{\n-\treturn NULL;\n-}\n-#endif\n-\n #ifndef arch_kmap_local_set_pte\n #define arch_kmap_local_set_pte(mm, vaddr, ptep, ptev)\t\\\n \tset_pte_at(mm, vaddr, ptep, ptev)\n #endif\n \n-/* Unmap a local mapping which was obtained by kmap_high_get() */\n-static inline bool kmap_high_unmap_local(unsigned long vaddr)\n-{\n-#ifdef ARCH_NEEDS_KMAP_HIGH_GET\n-\tif (vaddr >= PKMAP_ADDR(0) && vaddr < PKMAP_ADDR(LAST_PKMAP)) {\n-\t\tkunmap_high(pte_page(ptep_get(&pkmap_page_table[PKMAP_NR(vaddr)])));\n-\t\treturn true;\n-\t}\n-#endif\n-\treturn false;\n-}\n-\n static pte_t *__kmap_pte;\n \n static pte_t *kmap_get_pte(unsigned long vaddr, int idx)\n@@ -574,8 +508,6 @@ EXPORT_SYMBOL_GPL(__kmap_local_pfn_prot);\n \n void *__kmap_local_page_prot(const struct page *page, pgprot_t prot)\n {\n-\tvoid *kmap;\n-\n \t/*\n \t * To broaden the usage of the actual kmap_local() machinery always map\n \t * pages when debugging is enabled and the architecture has no problems\n@@ -584,11 +516,6 @@ void *__kmap_local_page_prot(const struct page *page, pgprot_t prot)\n \tif (!IS_ENABLED(CONFIG_DEBUG_KMAP_LOCAL_FORCE_MAP) && !PageHighMem(page))\n \t\treturn page_address(page);\n \n-\t/* Try kmap_high_get() if architecture has it enabled */\n-\tkmap = arch_kmap_local_high_get(page);\n-\tif (kmap)\n-\t\treturn kmap;\n-\n \treturn __kmap_local_pfn_prot(page_to_pfn(page), prot);\n }\n EXPORT_SYMBOL(__kmap_local_page_prot);\n@@ -606,14 +533,7 @@ void kunmap_local_indexed(const void *vaddr)\n \t\t\tWARN_ON_ONCE(1);\n \t\t\treturn;\n \t\t}\n-\t\t/*\n-\t\t * Handle mappings which were obtained by kmap_high_get()\n-\t\t * first as the virtual address of such mappings is below\n-\t\t * PAGE_OFFSET. Warn for all other addresses which are in\n-\t\t * the user space part of the virtual address space.\n-\t\t */\n-\t\tif (!kmap_high_unmap_local(addr))\n-\t\t\tWARN_ON_ONCE(addr < PAGE_OFFSET);\n+\t\tWARN_ON_ONCE(addr < PAGE_OFFSET);\n \t\treturn;\n \t}\n \n", "prefixes": [ "4/4" ] }