On Sat, Oct 17, 2026 at 9:52 PM Suren Baghdasaryan <[email protected]> wrote: > > On Thu, Oct 8, 2026 at 2:40 AM Abhishek Bapat <[email protected]> > wrote: > > > > Extend the allocinfo filtering mechanism to allow users to filter tags > > based on their trace state. > > > > Signed-off-by: Abhishek Bapat <[email protected]> > > Acked-by: Suren Baghdasaryan <[email protected]> > > > --- > > include/uapi/linux/alloc_tag.h | 8 ++++++-- > > mm/alloc_tag.c | 8 ++++++++ > > 2 files changed, 14 insertions(+), 2 deletions(-) > > > > diff --git a/include/uapi/linux/alloc_tag.h b/include/uapi/linux/alloc_tag.h > > index dafcba2f7e2c..a96054ac2237 100644 > > --- a/include/uapi/linux/alloc_tag.h > > +++ b/include/uapi/linux/alloc_tag.h > > @@ -38,7 +38,8 @@ struct allocinfo_counter { > > __u64 bytes; > > __u64 calls; > > __u8 accurate; > > - __u8 pad[7]; > > + __u8 trace_on; > > + __u8 pad[6]; > > } __attribute__((aligned(8))); > > > > struct allocinfo_tag_data { > > @@ -54,7 +55,8 @@ enum { > > ALLOCINFO_FILTER_INACCURATE, > > ALLOCINFO_FILTER_MIN_SIZE, > > ALLOCINFO_FILTER_MAX_SIZE, > > - __ALLOCINFO_FILTER_LAST = ALLOCINFO_FILTER_MAX_SIZE > > + ALLOCINFO_FILTER_TRACE_ON, > > + __ALLOCINFO_FILTER_LAST = ALLOCINFO_FILTER_TRACE_ON > > }; > > > > #define ALLOCINFO_FILTER_MASK_MODNAME (1 << > > ALLOCINFO_FILTER_MODNAME) > > @@ -64,6 +66,7 @@ enum { > > #define ALLOCINFO_FILTER_MASK_INACCURATE (1 << > > ALLOCINFO_FILTER_INACCURATE) > > #define ALLOCINFO_FILTER_MASK_MIN_SIZE (1 << > > ALLOCINFO_FILTER_MIN_SIZE) > > #define ALLOCINFO_FILTER_MASK_MAX_SIZE (1 << > > ALLOCINFO_FILTER_MAX_SIZE) > > +#define ALLOCINFO_FILTER_MASK_TRACE_ON (1 << > > ALLOCINFO_FILTER_TRACE_ON) > > > > #define ALLOCINFO_FILTER_MASKS \ > > ((1 << (__ALLOCINFO_FILTER_LAST + 1)) - 1) > > @@ -75,6 +78,7 @@ struct allocinfo_filter { > > __u64 max_size; > > /* filter criteria only; see allocinfo_counter.accurate for actual > > accuracy */ > > __u64 inaccurate; > > + __u64 tracing; > > }; > > > > struct allocinfo_get_at { > > diff --git a/mm/alloc_tag.c b/mm/alloc_tag.c > > index 262f00f2bba9..8e63f347657b 100644 > > --- a/mm/alloc_tag.c > > +++ b/mm/alloc_tag.c > > @@ -250,6 +250,7 @@ static void allocinfo_to_params(struct codetag *ct, > > data->counter.bytes = counters->bytes; > > data->counter.calls = counters->calls; > > data->counter.accurate = > > !alloc_tag_is_inaccurate(ct_to_alloc_tag(ct)); > > + data->counter.trace_on = alloc_tag_is_traced(ct_to_alloc_tag(ct)); > > } > > > > /* > > @@ -323,6 +324,13 @@ static bool matches_filter(struct codetag *ct, struct > > allocinfo_filter *filter, > > return false; > > } > > > > + if (filter->mask & ALLOCINFO_FILTER_MASK_TRACE_ON) { > > + bool tracing = alloc_tag_is_traced(ct_to_alloc_tag(ct)); > > + > > + if (tracing != !!(filter->tracing)) > > nit: Compilers are smart enough nowadays to convert u8 to bool without !! >
There's a similar check right above it that checks "inaccurate != !!(filter->inaccurate)". I just want to be consistent and less ambiguous. Also strictly speaking, compilers convert a bool to an int implicitly, so if filter->tracing is > 1, the if condition without the !! will result in false. > > + return false; > > + } > > + > > return true; > > } > > > > -- > > 2.56.0.385.gd3acb90ef8-goog > >
