On Tue, Aug 12, 2025 at 08:39:36PM +0200, Christophe Leroy wrote: > Hi Lorenzo, > > Le 12/08/2025 à 20:23, Lorenzo Stoakes a écrit : > > On Mon, Aug 11, 2025 at 01:26:26PM +0200, David Hildenbrand wrote: > > > We want to make use of "pgtable_level" for an enum in core-mm. Other > > > architectures seem to call "struct pgtable_level" either: > > > * "struct pg_level" when not exposed in a header (riscv, arm) > > > * "struct ptdump_pg_level" when expose in a header (arm64) > > > > > > So let's follow what arm64 does. > > > > > > Signed-off-by: David Hildenbrand <da...@redhat.com> > > > > This LGTM, but I'm super confused what these are for, they don't seem to be > > used anywhere? Maybe I'm missing some macro madness, but it seems like dead > > code anyway? > > pg_level[] are used several times in arch/powerpc/mm/ptdump/ptdump.c, for > instance here: > > static void note_page_update_state(struct pg_state *st, unsigned long addr, > int level, u64 val) > { > u64 flag = level >= 0 ? val & pg_level[level].mask : 0; > u64 pa = val & PTE_RPN_MASK; > > st->level = level; > st->current_flags = flag; > st->start_address = addr; > st->start_pa = pa; > > while (addr >= st->marker[1].start_address) { > st->marker++; > pt_dump_seq_printf(st->seq, "---[ %s ]---\n", st->marker->name); > } > } >
Ahhhh ok so you're _always_ happening to reference a field in the global value, thereby not referencing the _type_ anywhere but referencing fields of the global. Thanks, that clears that up! :)