* [PATCH v3 1/3] sparc: Use vmemmap_populate_hugepages for vmemmap_populate
2025-12-18 17:47 [PATCH v3 0/3] Generalize vmemmap_populate_hugepages to sparc chengkaitao
@ 2025-12-18 17:47 ` chengkaitao
2025-12-19 9:33 ` Mike Rapoport
2025-12-18 17:47 ` [PATCH v3 2/3] mm: Convert vmemmap_p?d_populate() to static functions chengkaitao
` (2 subsequent siblings)
3 siblings, 1 reply; 7+ messages in thread
From: chengkaitao @ 2025-12-18 17:47 UTC (permalink / raw)
To: davem, andreas, akpm, david, lorenzo.stoakes, Liam.Howlett,
vbabka, rppt, surenb, mhocko
Cc: kevin.brodsky, dave.hansen, ziy, chengkaitao, willy,
zhengqi.arch, sparclinux, linux-kernel, linux-mm
From: Chengkaitao <chengkaitao@kylinos.cn>
1. In the SPARC architecture, reimplemented vmemmap_populate using
vmemmap_populate_hugepages.
2. Allow the SPARC arch to fallback to vmemmap_populate_basepages(),
when vmemmap_alloc_block returns NULL.
Signed-off-by: Chengkaitao <chengkaitao@kylinos.cn>
---
arch/sparc/mm/init_64.c | 47 ++++++++++++-----------------------------
1 file changed, 14 insertions(+), 33 deletions(-)
diff --git a/arch/sparc/mm/init_64.c b/arch/sparc/mm/init_64.c
index df9f7c444c39..f477ab1b4f08 100644
--- a/arch/sparc/mm/init_64.c
+++ b/arch/sparc/mm/init_64.c
@@ -2581,8 +2581,8 @@ unsigned long _PAGE_CACHE __read_mostly;
EXPORT_SYMBOL(_PAGE_CACHE);
#ifdef CONFIG_SPARSEMEM_VMEMMAP
-int __meminit vmemmap_populate(unsigned long vstart, unsigned long vend,
- int node, struct vmem_altmap *altmap)
+void __meminit vmemmap_set_pmd(pmd_t *pmd, void *p, int node,
+ unsigned long addr, unsigned long next)
{
unsigned long pte_base;
@@ -2595,39 +2595,20 @@ int __meminit vmemmap_populate(unsigned long vstart, unsigned long vend,
pte_base |= _PAGE_PMD_HUGE;
- vstart = vstart & PMD_MASK;
- vend = ALIGN(vend, PMD_SIZE);
- for (; vstart < vend; vstart += PMD_SIZE) {
- pgd_t *pgd = vmemmap_pgd_populate(vstart, node);
- unsigned long pte;
- p4d_t *p4d;
- pud_t *pud;
- pmd_t *pmd;
-
- if (!pgd)
- return -ENOMEM;
-
- p4d = vmemmap_p4d_populate(pgd, vstart, node);
- if (!p4d)
- return -ENOMEM;
-
- pud = vmemmap_pud_populate(p4d, vstart, node);
- if (!pud)
- return -ENOMEM;
-
- pmd = pmd_offset(pud, vstart);
- pte = pmd_val(*pmd);
- if (!(pte & _PAGE_VALID)) {
- void *block = vmemmap_alloc_block(PMD_SIZE, node);
-
- if (!block)
- return -ENOMEM;
+ pmd_val(*pmd) = pte_base | __pa(p);
+}
- pmd_val(*pmd) = pte_base | __pa(block);
- }
- }
+int __meminit vmemmap_check_pmd(pmd_t *pmdp, int node,
+ unsigned long addr, unsigned long next)
+{
+ vmemmap_verify((pte_t *)pmdp, node, addr, next);
+ return 1;
+}
- return 0;
+int __meminit vmemmap_populate(unsigned long vstart, unsigned long vend,
+ int node, struct vmem_altmap *altmap)
+{
+ return vmemmap_populate_hugepages(vstart, vend, node, altmap);
}
#endif /* CONFIG_SPARSEMEM_VMEMMAP */
--
2.50.1 (Apple Git-155)
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: [PATCH v3 1/3] sparc: Use vmemmap_populate_hugepages for vmemmap_populate
2025-12-18 17:47 ` [PATCH v3 1/3] sparc: Use vmemmap_populate_hugepages for vmemmap_populate chengkaitao
@ 2025-12-19 9:33 ` Mike Rapoport
0 siblings, 0 replies; 7+ messages in thread
From: Mike Rapoport @ 2025-12-19 9:33 UTC (permalink / raw)
To: chengkaitao
Cc: davem, andreas, akpm, david, lorenzo.stoakes, Liam.Howlett,
vbabka, surenb, mhocko, kevin.brodsky, dave.hansen, ziy,
chengkaitao, willy, zhengqi.arch, sparclinux, linux-kernel,
linux-mm
On Fri, Dec 19, 2025 at 01:47:47AM +0800, chengkaitao wrote:
> From: Chengkaitao <chengkaitao@kylinos.cn>
>
> 1. In the SPARC architecture, reimplemented vmemmap_populate using
> vmemmap_populate_hugepages.
> 2. Allow the SPARC arch to fallback to vmemmap_populate_basepages(),
> when vmemmap_alloc_block returns NULL.
>
> Signed-off-by: Chengkaitao <chengkaitao@kylinos.cn>
> ---
> arch/sparc/mm/init_64.c | 47 ++++++++++++-----------------------------
> 1 file changed, 14 insertions(+), 33 deletions(-)
>
> diff --git a/arch/sparc/mm/init_64.c b/arch/sparc/mm/init_64.c
> index df9f7c444c39..f477ab1b4f08 100644
> --- a/arch/sparc/mm/init_64.c
> +++ b/arch/sparc/mm/init_64.c
> @@ -2581,8 +2581,8 @@ unsigned long _PAGE_CACHE __read_mostly;
> EXPORT_SYMBOL(_PAGE_CACHE);
>
> #ifdef CONFIG_SPARSEMEM_VMEMMAP
> -int __meminit vmemmap_populate(unsigned long vstart, unsigned long vend,
> - int node, struct vmem_altmap *altmap)
> +void __meminit vmemmap_set_pmd(pmd_t *pmd, void *p, int node,
> + unsigned long addr, unsigned long next)
> {
> unsigned long pte_base;
>
> @@ -2595,39 +2595,20 @@ int __meminit vmemmap_populate(unsigned long vstart, unsigned long vend,
>
> pte_base |= _PAGE_PMD_HUGE;
>
> - vstart = vstart & PMD_MASK;
> - vend = ALIGN(vend, PMD_SIZE);
> - for (; vstart < vend; vstart += PMD_SIZE) {
> - pgd_t *pgd = vmemmap_pgd_populate(vstart, node);
> - unsigned long pte;
> - p4d_t *p4d;
> - pud_t *pud;
> - pmd_t *pmd;
> -
> - if (!pgd)
> - return -ENOMEM;
> -
> - p4d = vmemmap_p4d_populate(pgd, vstart, node);
> - if (!p4d)
> - return -ENOMEM;
> -
> - pud = vmemmap_pud_populate(p4d, vstart, node);
> - if (!pud)
> - return -ENOMEM;
> -
> - pmd = pmd_offset(pud, vstart);
> - pte = pmd_val(*pmd);
> - if (!(pte & _PAGE_VALID)) {
> - void *block = vmemmap_alloc_block(PMD_SIZE, node);
> -
> - if (!block)
> - return -ENOMEM;
> + pmd_val(*pmd) = pte_base | __pa(p);
> +}
>
> - pmd_val(*pmd) = pte_base | __pa(block);
> - }
> - }
> +int __meminit vmemmap_check_pmd(pmd_t *pmdp, int node,
> + unsigned long addr, unsigned long next)
> +{
> + vmemmap_verify((pte_t *)pmdp, node, addr, next);
> + return 1;
This should return 1 only if the pmd actually maps a large page, see x86
and powerpc implementations for example.
> +}
>
> - return 0;
> +int __meminit vmemmap_populate(unsigned long vstart, unsigned long vend,
> + int node, struct vmem_altmap *altmap)
> +{
> + return vmemmap_populate_hugepages(vstart, vend, node, altmap);
> }
> #endif /* CONFIG_SPARSEMEM_VMEMMAP */
>
> --
> 2.50.1 (Apple Git-155)
>
--
Sincerely yours,
Mike.
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v3 2/3] mm: Convert vmemmap_p?d_populate() to static functions
2025-12-18 17:47 [PATCH v3 0/3] Generalize vmemmap_populate_hugepages to sparc chengkaitao
2025-12-18 17:47 ` [PATCH v3 1/3] sparc: Use vmemmap_populate_hugepages for vmemmap_populate chengkaitao
@ 2025-12-18 17:47 ` chengkaitao
2025-12-19 9:34 ` Mike Rapoport
2025-12-18 17:47 ` [PATCH v3 3/3] sparc: Remove unnecessary whitespace chengkaitao
2025-12-19 9:29 ` [PATCH v3 0/3] Generalize vmemmap_populate_hugepages to sparc Mike Rapoport
3 siblings, 1 reply; 7+ messages in thread
From: chengkaitao @ 2025-12-18 17:47 UTC (permalink / raw)
To: davem, andreas, akpm, david, lorenzo.stoakes, Liam.Howlett,
vbabka, rppt, surenb, mhocko
Cc: kevin.brodsky, dave.hansen, ziy, chengkaitao, willy,
zhengqi.arch, sparclinux, linux-kernel, linux-mm
From: Chengkaitao <chengkaitao@kylinos.cn>
Eliminate the external declarations of vmemmap_p?d_populate functions
and convert them to static functions.
Signed-off-by: Chengkaitao <chengkaitao@kylinos.cn>
---
include/linux/mm.h | 7 -------
mm/sparse-vmemmap.c | 10 +++++-----
2 files changed, 5 insertions(+), 12 deletions(-)
diff --git a/include/linux/mm.h b/include/linux/mm.h
index 15076261d0c2..d98a38a6ac0e 100644
--- a/include/linux/mm.h
+++ b/include/linux/mm.h
@@ -4234,13 +4234,6 @@ unsigned long section_map_size(void);
struct page * __populate_section_memmap(unsigned long pfn,
unsigned long nr_pages, int nid, struct vmem_altmap *altmap,
struct dev_pagemap *pgmap);
-pgd_t *vmemmap_pgd_populate(unsigned long addr, int node);
-p4d_t *vmemmap_p4d_populate(pgd_t *pgd, unsigned long addr, int node);
-pud_t *vmemmap_pud_populate(p4d_t *p4d, unsigned long addr, int node);
-pmd_t *vmemmap_pmd_populate(pud_t *pud, unsigned long addr, int node);
-pte_t *vmemmap_pte_populate(pmd_t *pmd, unsigned long addr, int node,
- struct vmem_altmap *altmap, unsigned long ptpfn,
- unsigned long flags);
void *vmemmap_alloc_block(unsigned long size, int node);
struct vmem_altmap;
void *vmemmap_alloc_block_buf(unsigned long size, int node,
diff --git a/mm/sparse-vmemmap.c b/mm/sparse-vmemmap.c
index 37522d6cb398..67f9a08c2376 100644
--- a/mm/sparse-vmemmap.c
+++ b/mm/sparse-vmemmap.c
@@ -151,7 +151,7 @@ void __meminit vmemmap_verify(pte_t *pte, int node,
start, end - 1);
}
-pte_t * __meminit vmemmap_pte_populate(pmd_t *pmd, unsigned long addr, int node,
+static pte_t * __meminit vmemmap_pte_populate(pmd_t *pmd, unsigned long addr, int node,
struct vmem_altmap *altmap,
unsigned long ptpfn, unsigned long flags)
{
@@ -195,7 +195,7 @@ static void * __meminit vmemmap_alloc_block_zero(unsigned long size, int node)
return p;
}
-pmd_t * __meminit vmemmap_pmd_populate(pud_t *pud, unsigned long addr, int node)
+static pmd_t * __meminit vmemmap_pmd_populate(pud_t *pud, unsigned long addr, int node)
{
pmd_t *pmd = pmd_offset(pud, addr);
if (pmd_none(*pmd)) {
@@ -208,7 +208,7 @@ pmd_t * __meminit vmemmap_pmd_populate(pud_t *pud, unsigned long addr, int node)
return pmd;
}
-pud_t * __meminit vmemmap_pud_populate(p4d_t *p4d, unsigned long addr, int node)
+static pud_t * __meminit vmemmap_pud_populate(p4d_t *p4d, unsigned long addr, int node)
{
pud_t *pud = pud_offset(p4d, addr);
if (pud_none(*pud)) {
@@ -221,7 +221,7 @@ pud_t * __meminit vmemmap_pud_populate(p4d_t *p4d, unsigned long addr, int node)
return pud;
}
-p4d_t * __meminit vmemmap_p4d_populate(pgd_t *pgd, unsigned long addr, int node)
+static p4d_t * __meminit vmemmap_p4d_populate(pgd_t *pgd, unsigned long addr, int node)
{
p4d_t *p4d = p4d_offset(pgd, addr);
if (p4d_none(*p4d)) {
@@ -234,7 +234,7 @@ p4d_t * __meminit vmemmap_p4d_populate(pgd_t *pgd, unsigned long addr, int node)
return p4d;
}
-pgd_t * __meminit vmemmap_pgd_populate(unsigned long addr, int node)
+static pgd_t * __meminit vmemmap_pgd_populate(unsigned long addr, int node)
{
pgd_t *pgd = pgd_offset_k(addr);
if (pgd_none(*pgd)) {
--
2.50.1 (Apple Git-155)
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: [PATCH v3 2/3] mm: Convert vmemmap_p?d_populate() to static functions
2025-12-18 17:47 ` [PATCH v3 2/3] mm: Convert vmemmap_p?d_populate() to static functions chengkaitao
@ 2025-12-19 9:34 ` Mike Rapoport
0 siblings, 0 replies; 7+ messages in thread
From: Mike Rapoport @ 2025-12-19 9:34 UTC (permalink / raw)
To: chengkaitao
Cc: davem, andreas, akpm, david, lorenzo.stoakes, Liam.Howlett,
vbabka, surenb, mhocko, kevin.brodsky, dave.hansen, ziy,
chengkaitao, willy, zhengqi.arch, sparclinux, linux-kernel,
linux-mm
On Fri, Dec 19, 2025 at 01:47:48AM +0800, chengkaitao wrote:
> From: Chengkaitao <chengkaitao@kylinos.cn>
>
> Eliminate the external declarations of vmemmap_p?d_populate functions
> and convert them to static functions.
Please also mention that they are unused outside mm.
With that
Acked-by: Mike Rapoport (Microsoft) <rppt@kernel.org>
> Signed-off-by: Chengkaitao <chengkaitao@kylinos.cn>
> ---
> include/linux/mm.h | 7 -------
> mm/sparse-vmemmap.c | 10 +++++-----
> 2 files changed, 5 insertions(+), 12 deletions(-)
>
> diff --git a/include/linux/mm.h b/include/linux/mm.h
> index 15076261d0c2..d98a38a6ac0e 100644
> --- a/include/linux/mm.h
> +++ b/include/linux/mm.h
> @@ -4234,13 +4234,6 @@ unsigned long section_map_size(void);
> struct page * __populate_section_memmap(unsigned long pfn,
> unsigned long nr_pages, int nid, struct vmem_altmap *altmap,
> struct dev_pagemap *pgmap);
> -pgd_t *vmemmap_pgd_populate(unsigned long addr, int node);
> -p4d_t *vmemmap_p4d_populate(pgd_t *pgd, unsigned long addr, int node);
> -pud_t *vmemmap_pud_populate(p4d_t *p4d, unsigned long addr, int node);
> -pmd_t *vmemmap_pmd_populate(pud_t *pud, unsigned long addr, int node);
> -pte_t *vmemmap_pte_populate(pmd_t *pmd, unsigned long addr, int node,
> - struct vmem_altmap *altmap, unsigned long ptpfn,
> - unsigned long flags);
> void *vmemmap_alloc_block(unsigned long size, int node);
> struct vmem_altmap;
> void *vmemmap_alloc_block_buf(unsigned long size, int node,
> diff --git a/mm/sparse-vmemmap.c b/mm/sparse-vmemmap.c
> index 37522d6cb398..67f9a08c2376 100644
> --- a/mm/sparse-vmemmap.c
> +++ b/mm/sparse-vmemmap.c
> @@ -151,7 +151,7 @@ void __meminit vmemmap_verify(pte_t *pte, int node,
> start, end - 1);
> }
>
> -pte_t * __meminit vmemmap_pte_populate(pmd_t *pmd, unsigned long addr, int node,
> +static pte_t * __meminit vmemmap_pte_populate(pmd_t *pmd, unsigned long addr, int node,
> struct vmem_altmap *altmap,
> unsigned long ptpfn, unsigned long flags)
> {
> @@ -195,7 +195,7 @@ static void * __meminit vmemmap_alloc_block_zero(unsigned long size, int node)
> return p;
> }
>
> -pmd_t * __meminit vmemmap_pmd_populate(pud_t *pud, unsigned long addr, int node)
> +static pmd_t * __meminit vmemmap_pmd_populate(pud_t *pud, unsigned long addr, int node)
> {
> pmd_t *pmd = pmd_offset(pud, addr);
> if (pmd_none(*pmd)) {
> @@ -208,7 +208,7 @@ pmd_t * __meminit vmemmap_pmd_populate(pud_t *pud, unsigned long addr, int node)
> return pmd;
> }
>
> -pud_t * __meminit vmemmap_pud_populate(p4d_t *p4d, unsigned long addr, int node)
> +static pud_t * __meminit vmemmap_pud_populate(p4d_t *p4d, unsigned long addr, int node)
> {
> pud_t *pud = pud_offset(p4d, addr);
> if (pud_none(*pud)) {
> @@ -221,7 +221,7 @@ pud_t * __meminit vmemmap_pud_populate(p4d_t *p4d, unsigned long addr, int node)
> return pud;
> }
>
> -p4d_t * __meminit vmemmap_p4d_populate(pgd_t *pgd, unsigned long addr, int node)
> +static p4d_t * __meminit vmemmap_p4d_populate(pgd_t *pgd, unsigned long addr, int node)
> {
> p4d_t *p4d = p4d_offset(pgd, addr);
> if (p4d_none(*p4d)) {
> @@ -234,7 +234,7 @@ p4d_t * __meminit vmemmap_p4d_populate(pgd_t *pgd, unsigned long addr, int node)
> return p4d;
> }
>
> -pgd_t * __meminit vmemmap_pgd_populate(unsigned long addr, int node)
> +static pgd_t * __meminit vmemmap_pgd_populate(unsigned long addr, int node)
> {
> pgd_t *pgd = pgd_offset_k(addr);
> if (pgd_none(*pgd)) {
> --
> 2.50.1 (Apple Git-155)
>
--
Sincerely yours,
Mike.
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v3 3/3] sparc: Remove unnecessary whitespace
2025-12-18 17:47 [PATCH v3 0/3] Generalize vmemmap_populate_hugepages to sparc chengkaitao
2025-12-18 17:47 ` [PATCH v3 1/3] sparc: Use vmemmap_populate_hugepages for vmemmap_populate chengkaitao
2025-12-18 17:47 ` [PATCH v3 2/3] mm: Convert vmemmap_p?d_populate() to static functions chengkaitao
@ 2025-12-18 17:47 ` chengkaitao
2025-12-19 9:29 ` [PATCH v3 0/3] Generalize vmemmap_populate_hugepages to sparc Mike Rapoport
3 siblings, 0 replies; 7+ messages in thread
From: chengkaitao @ 2025-12-18 17:47 UTC (permalink / raw)
To: davem, andreas, akpm, david, lorenzo.stoakes, Liam.Howlett,
vbabka, rppt, surenb, mhocko
Cc: kevin.brodsky, dave.hansen, ziy, chengkaitao, willy,
zhengqi.arch, sparclinux, linux-kernel, linux-mm
From: Chengkaitao <chengkaitao@kylinos.cn>
This is purely a code formatting change with no functional impact.
Signed-off-by: Chengkaitao <chengkaitao@kylinos.cn>
---
arch/sparc/mm/fault_64.c | 4 ++--
arch/sparc/mm/hypersparc.S | 4 ++--
arch/sparc/mm/init_64.c | 6 +++---
arch/sparc/mm/io-unit.c | 12 ++++++------
arch/sparc/mm/iommu.c | 2 +-
arch/sparc/mm/swift.S | 2 +-
arch/sparc/mm/ultra.S | 4 ++--
7 files changed, 17 insertions(+), 17 deletions(-)
diff --git a/arch/sparc/mm/fault_64.c b/arch/sparc/mm/fault_64.c
index e326caf708c6..963b2c4c87e2 100644
--- a/arch/sparc/mm/fault_64.c
+++ b/arch/sparc/mm/fault_64.c
@@ -201,7 +201,7 @@ static void __kprobes do_kernel_fault(struct pt_regs *regs, int si_code,
unsigned long address)
{
unsigned char asi = ASI_P;
-
+
if ((!insn) && (regs->tstate & TSTATE_PRIV))
goto cannot_handle;
@@ -229,7 +229,7 @@ static void __kprobes do_kernel_fault(struct pt_regs *regs, int si_code,
return;
}
}
-
+
/* Is this in ex_table? */
if (regs->tstate & TSTATE_PRIV) {
const struct exception_table_entry *entry;
diff --git a/arch/sparc/mm/hypersparc.S b/arch/sparc/mm/hypersparc.S
index 6c2521e85a42..bac194982498 100644
--- a/arch/sparc/mm/hypersparc.S
+++ b/arch/sparc/mm/hypersparc.S
@@ -30,7 +30,7 @@ hypersparc_flush_cache_all:
ld [%g4 + %lo(vac_cache_size)], %g5
sethi %hi(vac_line_size), %g1
ld [%g1 + %lo(vac_line_size)], %g2
-1:
+1:
subcc %g5, %g2, %g5 ! hyper_flush_unconditional_combined
bne 1b
sta %g0, [%g5] ASI_M_FLUSH_CTX
@@ -325,7 +325,7 @@ hypersparc_flush_tlb_page_out:
sta %g5, [%g1] ASI_M_MMUREGS
__INIT
-
+
/* High speed page clear/copy. */
hypersparc_bzero_1page:
/* NOTE: This routine has to be shorter than 40insns --jj */
diff --git a/arch/sparc/mm/init_64.c b/arch/sparc/mm/init_64.c
index f477ab1b4f08..1c36448b95eb 100644
--- a/arch/sparc/mm/init_64.c
+++ b/arch/sparc/mm/init_64.c
@@ -5,7 +5,7 @@
* Copyright (C) 1996-1999 David S. Miller (davem@caip.rutgers.edu)
* Copyright (C) 1997-1999 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
*/
-
+
#include <linux/extable.h>
#include <linux/kernel.h>
#include <linux/sched.h>
@@ -2397,11 +2397,11 @@ void __init paging_init(void)
* work.
*/
init_mm.pgd += ((shift) / (sizeof(pgd_t)));
-
+
memset(swapper_pg_dir, 0, sizeof(swapper_pg_dir));
inherit_prom_mappings();
-
+
/* Ok, we can use our TLB miss and window trap handlers safely. */
setup_tba();
diff --git a/arch/sparc/mm/io-unit.c b/arch/sparc/mm/io-unit.c
index d409cb450de4..15f83e6d21e2 100644
--- a/arch/sparc/mm/io-unit.c
+++ b/arch/sparc/mm/io-unit.c
@@ -4,7 +4,7 @@
*
* Copyright (C) 1997,1998 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
*/
-
+
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/slab.h>
@@ -62,7 +62,7 @@ static void __init iounit_iommu_init(struct platform_device *op)
prom_printf("SUN4D: Cannot map External Page Table.");
prom_halt();
}
-
+
op->dev.archdata.iommu = iounit;
iounit->page_table = xpt;
spin_lock_init(&iounit->lock);
@@ -109,9 +109,9 @@ static dma_addr_t iounit_get_area(struct iounit_struct *iounit,
case 2: i = 0x0132; break;
default: i = 0x0213; break;
}
-
+
IOD(("%s(%pa,%d[%d])=", __func__, &phys, size, npages));
-
+
next: j = (i & 15);
rotor = iounit->rotor[j - 1];
limit = iounit->limit[j];
@@ -150,7 +150,7 @@ static dma_addr_t iounit_map_phys(struct device *dev, phys_addr_t phys,
struct iounit_struct *iounit = dev->archdata.iommu;
unsigned long flags;
dma_addr_t ret;
-
+
/* XXX So what is maxphys for us and how do drivers know it? */
if (!len || len > 256 * 1024)
return DMA_MAPPING_ERROR;
@@ -185,7 +185,7 @@ static void iounit_unmap_phys(struct device *dev, dma_addr_t vaddr, size_t len,
{
struct iounit_struct *iounit = dev->archdata.iommu;
unsigned long flags;
-
+
spin_lock_irqsave(&iounit->lock, flags);
len = ((vaddr & ~PAGE_MASK) + len + (PAGE_SIZE-1)) >> PAGE_SHIFT;
vaddr = (vaddr - IOUNIT_DMA_BASE) >> PAGE_SHIFT;
diff --git a/arch/sparc/mm/iommu.c b/arch/sparc/mm/iommu.c
index f48adf62724a..f43163a9a812 100644
--- a/arch/sparc/mm/iommu.c
+++ b/arch/sparc/mm/iommu.c
@@ -89,7 +89,7 @@ static void __init sbus_iommu_init(struct platform_device *op)
iommu->end = 0xffffffff;
/* Allocate IOMMU page table */
- /* Stupid alignment constraints give me a headache.
+ /* Stupid alignment constraints give me a headache.
We need 256K or 512K or 1M or 2M area aligned to
its size and current gfp will fortunately give
it to us. */
diff --git a/arch/sparc/mm/swift.S b/arch/sparc/mm/swift.S
index f414bfd8d899..cfcc48b6c5c7 100644
--- a/arch/sparc/mm/swift.S
+++ b/arch/sparc/mm/swift.S
@@ -243,7 +243,7 @@ swift_flush_tlb_page:
nop
#if 1
mov 0x400, %o1
- sta %g0, [%o1] ASI_M_FLUSH_PROBE
+ sta %g0, [%o1] ASI_M_FLUSH_PROBE
#else
lda [%g1] ASI_M_MMUREGS, %g5
sta %o3, [%g1] ASI_M_MMUREGS
diff --git a/arch/sparc/mm/ultra.S b/arch/sparc/mm/ultra.S
index 70e658d107e0..66cbfbb1d3cd 100644
--- a/arch/sparc/mm/ultra.S
+++ b/arch/sparc/mm/ultra.S
@@ -284,7 +284,7 @@ __cheetah_flush_tlb_page: /* 22 insns */
be,pn %icc, 1f
andn %o1, 1, %o3
stxa %g0, [%o3] ASI_IMMU_DEMAP
-1: stxa %g0, [%o3] ASI_DMMU_DEMAP
+1: stxa %g0, [%o3] ASI_DMMU_DEMAP
membar #Sync
stxa %g2, [%o4] ASI_DMMU
sethi %hi(KERNBASE), %o4
@@ -312,7 +312,7 @@ __cheetah_flush_tlb_pending: /* 27 insns */
be,pn %icc, 2f
andn %o3, 1, %o3
stxa %g0, [%o3] ASI_IMMU_DEMAP
-2: stxa %g0, [%o3] ASI_DMMU_DEMAP
+2: stxa %g0, [%o3] ASI_DMMU_DEMAP
membar #Sync
brnz,pt %o1, 1b
nop
--
2.50.1 (Apple Git-155)
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: [PATCH v3 0/3] Generalize vmemmap_populate_hugepages to sparc
2025-12-18 17:47 [PATCH v3 0/3] Generalize vmemmap_populate_hugepages to sparc chengkaitao
` (2 preceding siblings ...)
2025-12-18 17:47 ` [PATCH v3 3/3] sparc: Remove unnecessary whitespace chengkaitao
@ 2025-12-19 9:29 ` Mike Rapoport
3 siblings, 0 replies; 7+ messages in thread
From: Mike Rapoport @ 2025-12-19 9:29 UTC (permalink / raw)
To: chengkaitao
Cc: davem, andreas, akpm, david, lorenzo.stoakes, Liam.Howlett,
vbabka, surenb, mhocko, kevin.brodsky, dave.hansen, ziy,
chengkaitao, willy, zhengqi.arch, sparclinux, linux-kernel,
linux-mm
On Fri, Dec 19, 2025 at 01:47:46AM +0800, chengkaitao wrote:
> Sparc implement vmemmap_populate using vmemmap_populate_hugepages
> to streamline the code. Another benefit is that it allows us to
If this is merged via mm tree, the cover letter would be a part of git
history so I'd suggest slightly rephrasing the first sentence:
Change sparc's implementation of vmemmap_populate() using
vmemmap_populate_hugepages() to streamline the code.
> eliminate the external declarations of vmemmap_p?d_populate
> functions and convert them to static functions.
>
> Since vmemmap_populate_hugepages may fallback to vmemmap_populate-
> _basepages, which differs from sparc's original implementation.
> During the v1 discussion with Mike Rapoport, sparc uses base pages
> in the kernel page tables, so it should be able to use them in
> vmemmap as well. Consequently, no additional special handling is
> required.
>
> Remove unnecessary whitespace from sparc.
>
> Changes in v3:
> - Allow sparc to fallback to vmemmap_populate_basepages
> - Convert vmemmap_p?d_populate() to static functions
> - Split the v1 patch
>
> Changes in v2:
> - Revert the whitespace deletions
> - Change vmemmap_false_pmd to vmemmap_pte_fallback_allowed
>
> Link to V1:
> https://lore.kernel.org/all/20251217120858.18713-1-pilgrimtao@gmail.com/
>
> Chengkaitao (3):
> sparc: Use vmemmap_populate_hugepages for vmemmap_populate
> mm: Convert vmemmap_p?d_populate() to static functions
> sparc: Remove unnecessary whitespace
>
> arch/sparc/mm/fault_64.c | 4 +--
> arch/sparc/mm/hypersparc.S | 4 +--
> arch/sparc/mm/init_64.c | 53 ++++++++++++--------------------------
> arch/sparc/mm/io-unit.c | 12 ++++-----
> arch/sparc/mm/iommu.c | 2 +-
> arch/sparc/mm/swift.S | 2 +-
> arch/sparc/mm/ultra.S | 4 +--
> include/linux/mm.h | 7 -----
> mm/sparse-vmemmap.c | 10 +++----
> 9 files changed, 36 insertions(+), 62 deletions(-)
>
> --
> 2.50.1 (Apple Git-155)
>
--
Sincerely yours,
Mike.
^ permalink raw reply [flat|nested] 7+ messages in thread