From nobody Mon Jun 8 09:49:40 2026 Received: from cstnet.cn (smtp21.cstnet.cn [159.226.251.21]) (using TLSv1.2 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 924F4409123 for ; Thu, 4 Jun 2026 11:12:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=159.226.251.21 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780571582; cv=none; b=aYFhQKkrqYOyVoY5x1AWL0DVI8QB4K8bfsJbMyKjZ0UuX8ZMT+rZ9cSt63JlmKM+Px5PUz/HVsno4uzJx9kCWhsET9hoYjAwFibJYmBrSaDoqtnw8LBu+R/VDpDoAXa+lPXBR6jaKDJKEoseHc+LHpbYaOlWV26gqOB+tDHwubw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780571582; c=relaxed/simple; bh=jeqrn4W4iz4DoprMF3rFEaTnf3g+POk5g0WGXpXqmMA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=UyQbmm1oVoe+JN0Md8LmxaE45KWioAjt5AifDBeMCPeYQvze2QBlxMt8bvOYPy2vv96pZ5HMF4u8y1HeEoOTnoVy9CWeItgVQCYNSFvgRZpxXoYSsrxvc/c8A2doiIYdti0WWj+79b6BeJh9IvUuyYlVtIRXw43C0WzwmMxbRJM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=iscas.ac.cn; spf=pass smtp.mailfrom=iscas.ac.cn; arc=none smtp.client-ip=159.226.251.21 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=iscas.ac.cn Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=iscas.ac.cn Received: from [127.0.0.2] (unknown [123.118.218.239]) by APP-01 (Coremail) with SMTP id qwCowABX+tKpXSFqnS2YAA--.469S3; Thu, 04 Jun 2026 19:12:43 +0800 (CST) From: Vivian Wang Date: Thu, 04 Jun 2026 19:11:54 +0800 Subject: [PATCH v2 1/2] mm/vmemmap: Add a post-population hook for architectures Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260604-mark-after-vmemmap-populate-v2-1-ab6a7d03b434@iscas.ac.cn> References: <20260604-mark-after-vmemmap-populate-v2-0-ab6a7d03b434@iscas.ac.cn> In-Reply-To: <20260604-mark-after-vmemmap-populate-v2-0-ab6a7d03b434@iscas.ac.cn> To: Paul Walmsley , Palmer Dabbelt , Alexandre Ghiti , Andrew Morton , David Hildenbrand , Lorenzo Stoakes , "Liam R. Howlett" , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko Cc: linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Vivian Wang X-Mailer: b4 0.15.2 X-CM-TRANSID: qwCowABX+tKpXSFqnS2YAA--.469S3 X-Coremail-Antispam: 1UD129KBjvJXoW7WFW5XFy3CF18Zr1kGw4xCrg_yoW8GFyxpF yj9w43KF4UXFy7uw4xC3Wrury3tF1vgayxG3WfK34fXw13JFyjgryrt3WUKrW5JrWfAa4x X3Z0y34jk3WDAw7anT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUPE14x267AKxVWrJVCq3wAFc2x0x2IEx4CE42xK8VAvwI8IcIk0 rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2048vs2IY020E87I2jVAFwI0_Jr4l82xGYIkIc2 x26xkF7I0E14v26r4j6ryUM28lY4IEw2IIxxk0rwA2F7IY1VAKz4vEj48ve4kI8wA2z4x0 Y4vE2Ix0cI8IcVAFwI0_Gr0_Xr1l84ACjcxK6xIIjxv20xvEc7CjxVAFwI0_Gr0_Cr1l84 ACjcxK6I8E87Iv67AKxVW0oVCq3wA2z4x0Y4vEx4A2jsIEc7CjxVAFwI0_GcCE3s1le2I2 62IYc4CY6c8Ij28IcVAaY2xG8wAqx4xG64xvF2IEw4CE5I8CrVC2j2WlYx0E2Ix0cI8IcV AFwI0_Jr0_Jr4lYx0Ex4A2jsIE14v26r1j6r4UMcvjeVCFs4IE7xkEbVWUJVW8JwACjcxG 0xvY0x0EwIxGrwACjI8F5VA0II8E6IAqYI8I648v4I1lFIxGxcIEc7CjxVA2Y2ka0xkIwI 1lc7CjxVAaw2AFwI0_Jw0_GFyl42xK82IYc2Ij64vIr41l4I8I3I0E4IkC6x0Yz7v_Jr0_ Gr1lx2IqxVAqx4xG67AKxVWUJVWUGwC20s026x8GjcxK67AKxVWUGVWUWwC2zVAF1VAY17 CE14v26r1q6r43MIIYrxkI7VAKI48JMIIF0xvE2Ix0cI8IcVAFwI0_Jr0_JF4lIxAIcVC0 I7IYx2IY6xkF7I0E14v26r4j6F4UMIIF0xvE42xK8VAvwI8IcIk0rVWUJVWUCwCI42IY6I 8E87Iv67AKxVWUJVW8JwCI42IY6I8E87Iv6xkF7I0E14v26r4j6r4UJbIYCTnIWIevJa73 UjIFyTuYvjfU8XdbUUUUU X-CM-SenderInfo: pzdqw2pxlnt03j6l2u1dvotugofq/ section_activate() does not flush TLB after populating new vmemmap pages. On most architectures, this is okay, however it is a problem on RISC-V since there TLB caching non-present entries is permitted, which causes spurious faults on some hardwares. Add a hook vmemmap_populate_finalize() in __populate_section_memmap() after population, to allow architectures to handle such situations as needed. No functional change intended for now, but a hook implementation for RISC-V will be added in a later patch. Signed-off-by: Vivian Wang --- mm/sparse-vmemmap.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/mm/sparse-vmemmap.c b/mm/sparse-vmemmap.c index 6eadb9d116e4..2a8b923fabe8 100644 --- a/mm/sparse-vmemmap.c +++ b/mm/sparse-vmemmap.c @@ -544,6 +544,12 @@ static int __meminit vmemmap_populate_compound_pages(u= nsigned long start_pfn, =20 #endif =20 +#ifndef vmemmap_populate_finalize +static void __meminit vmemmap_populate_finalize(void) +{ +} +#endif + struct page * __meminit __populate_section_memmap(unsigned long pfn, unsigned long nr_pages, int nid, struct vmem_altmap *altmap, struct dev_pagemap *pgmap) @@ -564,6 +570,8 @@ struct page * __meminit __populate_section_memmap(unsig= ned long pfn, if (r < 0) return NULL; =20 + vmemmap_populate_finalize(); + return pfn_to_page(pfn); } =20 --=20 2.54.0 From nobody Mon Jun 8 09:49:40 2026 Received: from cstnet.cn (smtp21.cstnet.cn [159.226.251.21]) (using TLSv1.2 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C836640B6DB for ; Thu, 4 Jun 2026 11:12:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=159.226.251.21 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780571582; cv=none; b=D5Paj2AXUp2PjFAE+PMmaBtE2LGKLCmXj/S+YNbqc6OCYdaL2ubKbHWmjzaNWypgQHy/feg4zBX522x5lH9SQAbpG8+VeL88/JOkTLkZxVBZdgJ+Q7BEcWfmJfalHqap/fVlyqFuNQw7+W9rqMKpIxQagvMuEbrVo0iJFdTEEIM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780571582; c=relaxed/simple; bh=ipBoK8B4DueCra9wfvqLeexYSliNEcsJBhDIyAgkXgg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=lF0couwotL797B86E3XXIg50yWrHjIl3BsLwRpm6DB9VClJQvaDvK9VYxa/LOKfXS8mYcI6hFAOaMq/vq4osVk9217NCxkefSLbYaFbjRoApPi+ZbPHRkcFTRw+EQwI+tkAn+KL3upHXTF2t24y5bIp7EPTG5b9Gqny+Omfg/Hg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=iscas.ac.cn; spf=pass smtp.mailfrom=iscas.ac.cn; arc=none smtp.client-ip=159.226.251.21 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=iscas.ac.cn Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=iscas.ac.cn Received: from [127.0.0.2] (unknown [123.118.218.239]) by APP-01 (Coremail) with SMTP id qwCowABX+tKpXSFqnS2YAA--.469S4; Thu, 04 Jun 2026 19:12:43 +0800 (CST) From: Vivian Wang Date: Thu, 04 Jun 2026 19:11:55 +0800 Subject: [PATCH v2 2/2] riscv: mm: Avoid spurious fault after hotplugging vmemmap Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260604-mark-after-vmemmap-populate-v2-2-ab6a7d03b434@iscas.ac.cn> References: <20260604-mark-after-vmemmap-populate-v2-0-ab6a7d03b434@iscas.ac.cn> In-Reply-To: <20260604-mark-after-vmemmap-populate-v2-0-ab6a7d03b434@iscas.ac.cn> To: Paul Walmsley , Palmer Dabbelt , Alexandre Ghiti , Andrew Morton , David Hildenbrand , Lorenzo Stoakes , "Liam R. Howlett" , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko Cc: linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Vivian Wang X-Mailer: b4 0.15.2 X-CM-TRANSID: qwCowABX+tKpXSFqnS2YAA--.469S4 X-Coremail-Antispam: 1UD129KBjvJXoW7ur4rKFykAr1rtF4DWrW5GFg_yoW8Zw15pr Z8uwn5KrW5ur97C397Aa42gr18JanYga43Kw1UCw1kZrW5XrWUXrn5KanxJryrXFs7ua48 CF43CryrC3WDAaDanT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUmj14x267AKxVWrJVCq3wAFc2x0x2IEx4CE42xK8VAvwI8IcIk0 rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2048vs2IY020E87I2jVAFwI0_Jryl82xGYIkIc2 x26xkF7I0E14v26ryj6s0DM28lY4IEw2IIxxk0rwA2F7IY1VAKz4vEj48ve4kI8wA2z4x0 Y4vE2Ix0cI8IcVAFwI0_Gr0_Xr1l84ACjcxK6xIIjxv20xvEc7CjxVAFwI0_Cr0_Gr1UM2 8EF7xvwVC2z280aVAFwI0_GcCE3s1l84ACjcxK6I8E87Iv6xkF7I0E14v26rxl6s0DM2AI xVAIcxkEcVAq07x20xvEncxIr21l5I8CrVACY4xI64kE6c02F40Ex7xfMcIj6xIIjxv20x vE14v26r1j6r18McIj6I8E87Iv67AKxVWUJVW8JwAm72CE4IkC6x0Yz7v_Jr0_Gr1lF7xv r2IYc2Ij64vIr41lF7I21c0EjII2zVCS5cI20VAGYxC7M4IIrI8v6xkF7I0E8cxan2IY04 v7MxkF7I0En4kS14v26r1q6r43MxAIw28IcxkI7VAKI48JMxC20s026xCaFVCjc4AY6r1j 6r4UMI8I3I0E5I8CrVAFwI0_Jr0_Jr4lx2IqxVCjr7xvwVAFwI0_JrI_JrWlx4CE17CEb7 AF67AKxVWUtVW8ZwCIc40Y0x0EwIxGrwCI42IY6xIIjxv20xvE14v26r1j6r1xMIIF0xvE 2Ix0cI8IcVCY1x0267AKxVW8JVWxJwCI42IY6xAIw20EY4v20xvaj40_Jr0_JF4lIxAIcV C2z280aVAFwI0_Jr0_Gr1lIxAIcVC2z280aVCY1x0267AKxVW8JVW8JrUvcSsGvfC2Kfnx nUUI43ZEXa7VUbH5lUUUUUU== X-CM-SenderInfo: pzdqw2pxlnt03j6l2u1dvotugofq/ section_activate() creates new mappings in the vmemmap range without flushing TLB, which may cause faults on some RISC-V implementations that cache non-present PTEs and crashes. This seems to be most easily reproduced with DEBUG_VM=3Dy and PAGE_POISONING=3Dy, which causes these newly mapped struct pages to be poisoned i.e. written to immediately after mapping. Implement the newly added hook vmemmap_populate_finalize() on RISC-V, to arrange for the existing exception handler code to deal with these faults if they happen. Signed-off-by: Vivian Wang --- I put the declaration here since it's the file where vmemmap and the vmemmap area addresses are defined. Depends on my kfence patches for mark_new_valid_map() (see cover). --- arch/riscv/include/asm/pgtable.h | 4 ++++ arch/riscv/mm/init.c | 6 ++++++ 2 files changed, 10 insertions(+) diff --git a/arch/riscv/include/asm/pgtable.h b/arch/riscv/include/asm/pgta= ble.h index a1a7c6520a09..aa0f50e3d534 100644 --- a/arch/riscv/include/asm/pgtable.h +++ b/arch/riscv/include/asm/pgtable.h @@ -1243,6 +1243,10 @@ static inline pte_t pte_swp_clear_exclusive(pte_t pt= e) #define TASK_SIZE FIXADDR_START #endif =20 +/* Needed on SPARSEMEM_VMEMMAP */ +#define vmemmap_populate_finalize vmemmap_populate_finalize +void __meminit vmemmap_populate_finalize(void); + #else /* CONFIG_MMU */ =20 #define PAGE_SHARED __pgprot(0) diff --git a/arch/riscv/mm/init.c b/arch/riscv/mm/init.c index 706f43523935..cf9ae4099f82 100644 --- a/arch/riscv/mm/init.c +++ b/arch/riscv/mm/init.c @@ -1360,6 +1360,12 @@ int __meminit vmemmap_populate(unsigned long start, = unsigned long end, int node, */ return vmemmap_populate_hugepages(start, end, node, altmap); } + +void __meminit vmemmap_populate_finalize(void) +{ + /* Avoid faults on cached non-present TLB entries. */ + mark_new_valid_map(); +} #endif =20 #if defined(CONFIG_MMU) && defined(CONFIG_64BIT) --=20 2.54.0