On Sun, May 24, 2020 at 2:44 PM Alexandre Ghiti <a...@ghiti.fr> wrote: > > This is a preparatory patch for sv48 support that will introduce > dynamic PAGE_OFFSET. > > Dynamic PAGE_OFFSET implies that all zones (vmalloc, vmemmap, fixaddr...) > whose addresses depend on PAGE_OFFSET become dynamic and can't be used > to statically initialize the array used by ptdump to identify the > different zones of the vm layout. > > Signed-off-by: Alexandre Ghiti <a...@ghiti.fr> > --- > arch/riscv/mm/ptdump.c | 49 ++++++++++++++++++++++++++++++++++-------- > 1 file changed, 40 insertions(+), 9 deletions(-) > > diff --git a/arch/riscv/mm/ptdump.c b/arch/riscv/mm/ptdump.c > index 7eab76a93106..7d9386a7f5c2 100644 > --- a/arch/riscv/mm/ptdump.c > +++ b/arch/riscv/mm/ptdump.c > @@ -49,22 +49,41 @@ struct addr_marker { > const char *name; > }; > > +enum address_markers_idx { > +#ifdef CONFIG_KASAN > + KASAN_SHADOW_START_NR, > + KASAN_SHADOW_END_NR, > +#endif > + FIXMAP_START_NR, > + FIXMAP_END_NR, > + PCI_IO_START_NR, > + PCI_IO_END_NR, > +#ifdef CONFIG_SPARSEMEM_VMEMMAP > + VMEMMAP_START_NR, > + VMEMMAP_END_NR, > +#endif > + VMALLOC_START_NR, > + VMALLOC_END_NR, > + PAGE_OFFSET_NR, > + END_OF_SPACE_NR > +}; > + > static struct addr_marker address_markers[] = { > #ifdef CONFIG_KASAN > {KASAN_SHADOW_START, "Kasan shadow start"}, > {KASAN_SHADOW_END, "Kasan shadow end"}, > #endif > - {FIXADDR_START, "Fixmap start"}, > - {FIXADDR_TOP, "Fixmap end"}, > - {PCI_IO_START, "PCI I/O start"}, > - {PCI_IO_END, "PCI I/O end"}, > + {0, "Fixmap start"}, > + {0, "Fixmap end"}, > + {0, "PCI I/O start"}, > + {0, "PCI I/O end"}, > #ifdef CONFIG_SPARSEMEM_VMEMMAP > - {VMEMMAP_START, "vmemmap start"}, > - {VMEMMAP_END, "vmemmap end"}, > + {0, "vmemmap start"}, > + {0, "vmemmap end"}, > #endif > - {VMALLOC_START, "vmalloc() area"}, > - {VMALLOC_END, "vmalloc() end"}, > - {PAGE_OFFSET, "Linear mapping"}, > + {0, "vmalloc() area"}, > + {0, "vmalloc() end"}, > + {0, "Linear mapping"}, > {-1, NULL}, > }; > > @@ -304,6 +323,18 @@ static int ptdump_init(void) > { > unsigned int i, j; > > + address_markers[FIXMAP_START_NR].start_address = FIXADDR_START; > + address_markers[FIXMAP_END_NR].start_address = FIXADDR_TOP; > + address_markers[PCI_IO_START_NR].start_address = PCI_IO_START; > + address_markers[PCI_IO_END_NR].start_address = PCI_IO_END; > +#ifdef CONFIG_SPARSEMEM_VMEMMAP > + address_markers[VMEMMAP_START_NR].start_address = VMEMMAP_START; > + address_markers[VMEMMAP_END_NR].start_address = VMEMMAP_END; > +#endif > + address_markers[VMALLOC_START_NR].start_address = VMALLOC_START; > + address_markers[VMALLOC_END_NR].start_address = VMALLOC_END; > + address_markers[PAGE_OFFSET_NR].start_address = PAGE_OFFSET; > + > for (i = 0; i < ARRAY_SIZE(pg_level); i++) > for (j = 0; j < ARRAY_SIZE(pte_bits); j++) > pg_level[i].mask |= pte_bits[j].mask; > -- > 2.20.1 >
Looks good to me. Reviewed-by: Anup Patel <a...@brainfault.org> Regards, Anup