Skip to content

Commit fe122b8

Browse files
bjorn-rivospalmer-dabbelt
authored andcommitted
riscv: mm: Change attribute from __init to __meminit for page functions
Prepare for memory hotplugging support by changing from __init to __meminit for the page table functions that are used by the upcoming architecture specific callbacks. Changing the __init attribute to __meminit, avoids that the functions are removed after init. The __meminit attribute makes sure the functions are kept in the kernel text post init, but only if memory hotplugging is enabled for the build. Reviewed-by: Alexandre Ghiti <[email protected]> Reviewed-by: David Hildenbrand <[email protected]> Reviewed-by: Oscar Salvador <[email protected]> Signed-off-by: Björn Töpel <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Palmer Dabbelt <[email protected]>
1 parent 6667309 commit fe122b8

File tree

3 files changed

+28
-34
lines changed

3 files changed

+28
-34
lines changed

arch/riscv/include/asm/mmu.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ typedef struct {
3131
#define cntx2asid(cntx) ((cntx) & SATP_ASID_MASK)
3232
#define cntx2version(cntx) ((cntx) & ~SATP_ASID_MASK)
3333

34-
void __init create_pgd_mapping(pgd_t *pgdp, uintptr_t va, phys_addr_t pa,
35-
phys_addr_t sz, pgprot_t prot);
34+
void __meminit create_pgd_mapping(pgd_t *pgdp, uintptr_t va, phys_addr_t pa, phys_addr_t sz,
35+
pgprot_t prot);
3636
#endif /* __ASSEMBLY__ */
3737

3838
#endif /* _ASM_RISCV_MMU_H */

arch/riscv/include/asm/pgtable.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ struct pt_alloc_ops {
165165
#endif
166166
};
167167

168-
extern struct pt_alloc_ops pt_ops __initdata;
168+
extern struct pt_alloc_ops pt_ops __meminitdata;
169169

170170
#ifdef CONFIG_MMU
171171
/* Number of PGD entries that a user-mode program can use */

arch/riscv/mm/init.c

Lines changed: 25 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -296,7 +296,7 @@ static void __init setup_bootmem(void)
296296
}
297297

298298
#ifdef CONFIG_MMU
299-
struct pt_alloc_ops pt_ops __initdata;
299+
struct pt_alloc_ops pt_ops __meminitdata;
300300

301301
pgd_t swapper_pg_dir[PTRS_PER_PGD] __page_aligned_bss;
302302
pgd_t trampoline_pg_dir[PTRS_PER_PGD] __page_aligned_bss;
@@ -358,7 +358,7 @@ static inline pte_t *__init get_pte_virt_fixmap(phys_addr_t pa)
358358
return (pte_t *)set_fixmap_offset(FIX_PTE, pa);
359359
}
360360

361-
static inline pte_t *__init get_pte_virt_late(phys_addr_t pa)
361+
static inline pte_t *__meminit get_pte_virt_late(phys_addr_t pa)
362362
{
363363
return (pte_t *) __va(pa);
364364
}
@@ -377,17 +377,16 @@ static inline phys_addr_t __init alloc_pte_fixmap(uintptr_t va)
377377
return memblock_phys_alloc(PAGE_SIZE, PAGE_SIZE);
378378
}
379379

380-
static phys_addr_t __init alloc_pte_late(uintptr_t va)
380+
static phys_addr_t __meminit alloc_pte_late(uintptr_t va)
381381
{
382382
struct ptdesc *ptdesc = pagetable_alloc(GFP_KERNEL & ~__GFP_HIGHMEM, 0);
383383

384384
BUG_ON(!ptdesc || !pagetable_pte_ctor(ptdesc));
385385
return __pa((pte_t *)ptdesc_address(ptdesc));
386386
}
387387

388-
static void __init create_pte_mapping(pte_t *ptep,
389-
uintptr_t va, phys_addr_t pa,
390-
phys_addr_t sz, pgprot_t prot)
388+
static void __meminit create_pte_mapping(pte_t *ptep, uintptr_t va, phys_addr_t pa, phys_addr_t sz,
389+
pgprot_t prot)
391390
{
392391
uintptr_t pte_idx = pte_index(va);
393392

@@ -441,7 +440,7 @@ static pmd_t *__init get_pmd_virt_fixmap(phys_addr_t pa)
441440
return (pmd_t *)set_fixmap_offset(FIX_PMD, pa);
442441
}
443442

444-
static pmd_t *__init get_pmd_virt_late(phys_addr_t pa)
443+
static pmd_t *__meminit get_pmd_virt_late(phys_addr_t pa)
445444
{
446445
return (pmd_t *) __va(pa);
447446
}
@@ -458,17 +457,17 @@ static phys_addr_t __init alloc_pmd_fixmap(uintptr_t va)
458457
return memblock_phys_alloc(PAGE_SIZE, PAGE_SIZE);
459458
}
460459

461-
static phys_addr_t __init alloc_pmd_late(uintptr_t va)
460+
static phys_addr_t __meminit alloc_pmd_late(uintptr_t va)
462461
{
463462
struct ptdesc *ptdesc = pagetable_alloc(GFP_KERNEL & ~__GFP_HIGHMEM, 0);
464463

465464
BUG_ON(!ptdesc || !pagetable_pmd_ctor(ptdesc));
466465
return __pa((pmd_t *)ptdesc_address(ptdesc));
467466
}
468467

469-
static void __init create_pmd_mapping(pmd_t *pmdp,
470-
uintptr_t va, phys_addr_t pa,
471-
phys_addr_t sz, pgprot_t prot)
468+
static void __meminit create_pmd_mapping(pmd_t *pmdp,
469+
uintptr_t va, phys_addr_t pa,
470+
phys_addr_t sz, pgprot_t prot)
472471
{
473472
pte_t *ptep;
474473
phys_addr_t pte_phys;
@@ -504,7 +503,7 @@ static pud_t *__init get_pud_virt_fixmap(phys_addr_t pa)
504503
return (pud_t *)set_fixmap_offset(FIX_PUD, pa);
505504
}
506505

507-
static pud_t *__init get_pud_virt_late(phys_addr_t pa)
506+
static pud_t *__meminit get_pud_virt_late(phys_addr_t pa)
508507
{
509508
return (pud_t *)__va(pa);
510509
}
@@ -522,7 +521,7 @@ static phys_addr_t __init alloc_pud_fixmap(uintptr_t va)
522521
return memblock_phys_alloc(PAGE_SIZE, PAGE_SIZE);
523522
}
524523

525-
static phys_addr_t alloc_pud_late(uintptr_t va)
524+
static phys_addr_t __meminit alloc_pud_late(uintptr_t va)
526525
{
527526
unsigned long vaddr;
528527

@@ -542,7 +541,7 @@ static p4d_t *__init get_p4d_virt_fixmap(phys_addr_t pa)
542541
return (p4d_t *)set_fixmap_offset(FIX_P4D, pa);
543542
}
544543

545-
static p4d_t *__init get_p4d_virt_late(phys_addr_t pa)
544+
static p4d_t *__meminit get_p4d_virt_late(phys_addr_t pa)
546545
{
547546
return (p4d_t *)__va(pa);
548547
}
@@ -560,7 +559,7 @@ static phys_addr_t __init alloc_p4d_fixmap(uintptr_t va)
560559
return memblock_phys_alloc(PAGE_SIZE, PAGE_SIZE);
561560
}
562561

563-
static phys_addr_t alloc_p4d_late(uintptr_t va)
562+
static phys_addr_t __meminit alloc_p4d_late(uintptr_t va)
564563
{
565564
unsigned long vaddr;
566565

@@ -569,9 +568,8 @@ static phys_addr_t alloc_p4d_late(uintptr_t va)
569568
return __pa(vaddr);
570569
}
571570

572-
static void __init create_pud_mapping(pud_t *pudp,
573-
uintptr_t va, phys_addr_t pa,
574-
phys_addr_t sz, pgprot_t prot)
571+
static void __meminit create_pud_mapping(pud_t *pudp, uintptr_t va, phys_addr_t pa, phys_addr_t sz,
572+
pgprot_t prot)
575573
{
576574
pmd_t *nextp;
577575
phys_addr_t next_phys;
@@ -596,9 +594,8 @@ static void __init create_pud_mapping(pud_t *pudp,
596594
create_pmd_mapping(nextp, va, pa, sz, prot);
597595
}
598596

599-
static void __init create_p4d_mapping(p4d_t *p4dp,
600-
uintptr_t va, phys_addr_t pa,
601-
phys_addr_t sz, pgprot_t prot)
597+
static void __meminit create_p4d_mapping(p4d_t *p4dp, uintptr_t va, phys_addr_t pa, phys_addr_t sz,
598+
pgprot_t prot)
602599
{
603600
pud_t *nextp;
604601
phys_addr_t next_phys;
@@ -654,9 +651,8 @@ static void __init create_p4d_mapping(p4d_t *p4dp,
654651
#define create_pmd_mapping(__pmdp, __va, __pa, __sz, __prot) do {} while(0)
655652
#endif /* __PAGETABLE_PMD_FOLDED */
656653

657-
void __init create_pgd_mapping(pgd_t *pgdp,
658-
uintptr_t va, phys_addr_t pa,
659-
phys_addr_t sz, pgprot_t prot)
654+
void __meminit create_pgd_mapping(pgd_t *pgdp, uintptr_t va, phys_addr_t pa, phys_addr_t sz,
655+
pgprot_t prot)
660656
{
661657
pgd_next_t *nextp;
662658
phys_addr_t next_phys;
@@ -681,8 +677,7 @@ void __init create_pgd_mapping(pgd_t *pgdp,
681677
create_pgd_next_mapping(nextp, va, pa, sz, prot);
682678
}
683679

684-
static uintptr_t __init best_map_size(phys_addr_t pa, uintptr_t va,
685-
phys_addr_t size)
680+
static uintptr_t __meminit best_map_size(phys_addr_t pa, uintptr_t va, phys_addr_t size)
686681
{
687682
if (debug_pagealloc_enabled())
688683
return PAGE_SIZE;
@@ -718,7 +713,7 @@ asmlinkage void __init __copy_data(void)
718713
#endif
719714

720715
#ifdef CONFIG_STRICT_KERNEL_RWX
721-
static __init pgprot_t pgprot_from_va(uintptr_t va)
716+
static __meminit pgprot_t pgprot_from_va(uintptr_t va)
722717
{
723718
if (is_va_kernel_text(va))
724719
return PAGE_KERNEL_READ_EXEC;
@@ -743,7 +738,7 @@ void mark_rodata_ro(void)
743738
set_memory_ro);
744739
}
745740
#else
746-
static __init pgprot_t pgprot_from_va(uintptr_t va)
741+
static __meminit pgprot_t pgprot_from_va(uintptr_t va)
747742
{
748743
if (IS_ENABLED(CONFIG_64BIT) && !is_kernel_mapping(va))
749744
return PAGE_KERNEL;
@@ -1235,9 +1230,8 @@ asmlinkage void __init setup_vm(uintptr_t dtb_pa)
12351230
pt_ops_set_fixmap();
12361231
}
12371232

1238-
static void __init create_linear_mapping_range(phys_addr_t start,
1239-
phys_addr_t end,
1240-
uintptr_t fixed_map_size)
1233+
static void __meminit create_linear_mapping_range(phys_addr_t start, phys_addr_t end,
1234+
uintptr_t fixed_map_size)
12411235
{
12421236
phys_addr_t pa;
12431237
uintptr_t va, map_size;

0 commit comments

Comments
 (0)