Message ID | 20230404084308.813-2-zhangqing@loongson.cn (mailing list archive) |
---|---|
State | Mainlined |
Commit | fb6d5c1d99ab6958c5e284f7aa5f0cc553f0268c |
Headers | show |
Series | LoongArch: Add kernel address sanitizer support | expand |
On Tue, Apr 4, 2023 at 10:43 AM Qing Zhang <zhangqing@loongson.cn> wrote: > > Loongarch populate pmd/pud with invalid_pmd_table/invalid_pud_table in > pagetable_init, So pmd_init/pud_init(p) is required, define them as __weak > in mm/kasan/init.c, like mm/sparse-vmemmap.c. > > Signed-off-by: Qing Zhang <zhangqing@loongson.cn> > --- > mm/kasan/init.c | 18 ++++++++++++++---- > 1 file changed, 14 insertions(+), 4 deletions(-) > > diff --git a/mm/kasan/init.c b/mm/kasan/init.c > index cc64ed6858c6..a7fa223b96e4 100644 > --- a/mm/kasan/init.c > +++ b/mm/kasan/init.c > @@ -139,6 +139,10 @@ static int __ref zero_pmd_populate(pud_t *pud, unsigned long addr, > return 0; > } > > +void __weak __meminit pmd_init(void *addr) > +{ > +} > + > static int __ref zero_pud_populate(p4d_t *p4d, unsigned long addr, > unsigned long end) > { > @@ -166,8 +170,9 @@ static int __ref zero_pud_populate(p4d_t *p4d, unsigned long addr, > if (!p) > return -ENOMEM; > } else { > - pud_populate(&init_mm, pud, > - early_alloc(PAGE_SIZE, NUMA_NO_NODE)); > + p = early_alloc(PAGE_SIZE, NUMA_NO_NODE); > + pmd_init(p); > + pud_populate(&init_mm, pud, p); > } > } > zero_pmd_populate(pud, addr, next); > @@ -176,6 +181,10 @@ static int __ref zero_pud_populate(p4d_t *p4d, unsigned long addr, > return 0; > } > > +void __weak __meminit pud_init(void *addr) > +{ > +} > + > static int __ref zero_p4d_populate(pgd_t *pgd, unsigned long addr, > unsigned long end) > { > @@ -207,8 +216,9 @@ static int __ref zero_p4d_populate(pgd_t *pgd, unsigned long addr, > if (!p) > return -ENOMEM; > } else { > - p4d_populate(&init_mm, p4d, > - early_alloc(PAGE_SIZE, NUMA_NO_NODE)); > + p = early_alloc(PAGE_SIZE, NUMA_NO_NODE); > + pud_init(p); > + p4d_populate(&init_mm, p4d, p); > } > } > zero_pud_populate(p4d, addr, next); > -- > 2.20.1 > Reviewed-by: Andrey Konovalov <andreyknvl@gmail.com> Thanks!
diff --git a/mm/kasan/init.c b/mm/kasan/init.c index cc64ed6858c6..a7fa223b96e4 100644 --- a/mm/kasan/init.c +++ b/mm/kasan/init.c @@ -139,6 +139,10 @@ static int __ref zero_pmd_populate(pud_t *pud, unsigned long addr, return 0; } +void __weak __meminit pmd_init(void *addr) +{ +} + static int __ref zero_pud_populate(p4d_t *p4d, unsigned long addr, unsigned long end) { @@ -166,8 +170,9 @@ static int __ref zero_pud_populate(p4d_t *p4d, unsigned long addr, if (!p) return -ENOMEM; } else { - pud_populate(&init_mm, pud, - early_alloc(PAGE_SIZE, NUMA_NO_NODE)); + p = early_alloc(PAGE_SIZE, NUMA_NO_NODE); + pmd_init(p); + pud_populate(&init_mm, pud, p); } } zero_pmd_populate(pud, addr, next); @@ -176,6 +181,10 @@ static int __ref zero_pud_populate(p4d_t *p4d, unsigned long addr, return 0; } +void __weak __meminit pud_init(void *addr) +{ +} + static int __ref zero_p4d_populate(pgd_t *pgd, unsigned long addr, unsigned long end) { @@ -207,8 +216,9 @@ static int __ref zero_p4d_populate(pgd_t *pgd, unsigned long addr, if (!p) return -ENOMEM; } else { - p4d_populate(&init_mm, p4d, - early_alloc(PAGE_SIZE, NUMA_NO_NODE)); + p = early_alloc(PAGE_SIZE, NUMA_NO_NODE); + pud_init(p); + p4d_populate(&init_mm, p4d, p); } } zero_pud_populate(p4d, addr, next);
Loongarch populate pmd/pud with invalid_pmd_table/invalid_pud_table in pagetable_init, So pmd_init/pud_init(p) is required, define them as __weak in mm/kasan/init.c, like mm/sparse-vmemmap.c. Signed-off-by: Qing Zhang <zhangqing@loongson.cn> --- mm/kasan/init.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-)