Hi Steve, On Tue, Jan 06, 2026 at 06:38:15PM -0500, Steven Rostedt wrote: > On Tue, 6 Jan 2026 15:05:25 -0800 > Guenter Roeck <[email protected]> wrote: > > > > > /* > > > > * Use ftrace_number_of_pages to determine how many pages were > > > > * allocated > > > > */ > > > > pages = ftrace_number_of_pages; > > > > > > > > start_pg = ftrace_allocate_pages(count); > > > > if (!start_pg) > > > > return -ENOMEM; > > > > > > > > /* ftrace_allocate_pages() increments ftrace_number_of_pages */ > > > > pages = ftrace_number_of_pages - pages; > > > > > > > > > > That might work, assuming that the code updating ftrace_number_of_pages > > > is (mutex) protected. I don't immediately see that, and the > > > "mutex_lock(&ftrace_lock);" right after the above code makes me a bit > > > concerned. > > > > > > > One way to avoid the locking problem without potentially risky code changes > > would be to pass a pointer to pages to ftrace_allocate_pages() and to > > ftrace_allocate_records(), and to update it from there. I tested that and > > confirmed that it works. > > I was originally going to suggest that, but when looking at the code, I > noticed that these variables could be useful. They are only updated on boot > up, module load, module unload and when module memory is freed. > > But looking into the module code, these updates are done outside of the > module_mutex. This means these values need to be converted to atomics as > they are updated without any protection. > > Yeah, better to just get the value from passing in a parameter to both > ftrace_allocate_pages() and to ftrace_allocate_records(). > > Something like: > > unsigend long pages = 0; > > [..] > start_pg = ftrace_allocate_pages(count, &pages); > > [..] > ftrace_allocate_pages(unsigned long num_to_init, unsigned long > *num_pages) { > [..] > cnt = ftrace_allocate_records(pg, num_to_init, > num_pages); > > And have ftrace_allocte_records() have: > > pages = 1 << order; > *num_pages += pages; > ftrace_number_of_pages += pages; >
That is exactly what I tested. With that, I assume I can drop the code to update pages in ftrace_process_locs(), inclusing the warning backtraces. I'll send v2 with those changes. Thanks, Guenter
