On Sat, 8 Mar 2025 03:46:01 +0000 Martin Liu <liumartin@xxxxxxxxxx> wrote: > --- > include/trace/events/kmem.h | 27 +++++++++++++++++++++++++++ > mm/page_alloc.c | 2 ++ > 2 files changed, 29 insertions(+) > > diff --git a/include/trace/events/kmem.h b/include/trace/events/kmem.h > index 5fd392dae503..9623e68d4d26 100644 > --- a/include/trace/events/kmem.h > +++ b/include/trace/events/kmem.h > @@ -375,6 +375,33 @@ TRACE_EVENT(mm_setup_per_zone_wmarks, > __entry->watermark_promo) > ); > > +TRACE_EVENT(mm_setup_per_zone_lowmem_reserve, > + > + TP_PROTO(struct zone *zone, struct zone *upper_zone, long lowmem_reserve), > + > + TP_ARGS(zone, upper_zone, lowmem_reserve), > + > + TP_STRUCT__entry( > + __field(int, node_id) > + __string(name, zone->name) > + __string(upper_name, upper_zone->name) > + __field(long, lowmem_reserve) Nit, but may be useful. If you want to remove "holes" from the trace event, I would move the lowmem_reserve to the top. The __string() macro adds a 4 byte meta data into the structure (that defines the size and offset of where the string is). That means you can think of __string() as the same as "int". The above has three int's followed by a long which on 64bit, would leave a 4 byte hole just before lowmem_reserve. -- Steve > + ), > + > + TP_fast_assign( > + __entry->node_id = zone->zone_pgdat->node_id; > + __assign_str(name); > + __assign_str(upper_name); > + __entry->lowmem_reserve = lowmem_reserve; > + ), > + > + TP_printk("node_id=%d zone name=%s upper_zone name=%s lowmem_reserve_pages=%ld", > + __entry->node_id, > + __get_str(name), > + __get_str(upper_name), > + __entry->lowmem_reserve) > +); > +