is there an efficient module_is_builtin() test ?
Im trying to reduce memory used by internal tables built into DYNAMIC_DEBUG the main savings available is in the per pr_debug* callsite data: modname, filename, funcname. I have segregated those fields to a new __dyndbg_sites section, described by struct _ddebug_site, and now refd by new ptr in struct _ddebug That new ptr enlarges the memory footprint, so I want to replace it with an integer index into the section / array. Existing padding could hold the index. To use the index, I need &dyndbg_sites[], and that only works for builtin-module's callsites. For loaded modules, I can/have added a pointer to the section into module load_info, giving me the base I will need for the ! builtin branch. I just need a not expensive is-it-builtin (modref)
On Tue, 09 Mar 2021 12:55:14 -0700, jim.cromie@gmail.com said:
To use the index, I need &dyndbg_sites[], and that only works for builtin-module's callsites. For loaded modules, I can/have added a pointer to the section into module load_info, giving me the base I will need for the ! builtin branch.
I just need a not expensive is-it-builtin (modref)
One way to sidestep it is to stick in an EXPORT_SYMBOL(dyndbg_sites) in the .c file you're defining it, and let the module loader do all the heavy lifting for you. Not sure if some license purist would insist on EXPORT_SYMBOL_GPL instead - the difference will only matter for out-of-tree non-GPL modules. An slightly uglier solution is to do something like #if defined(MODULE) #define FIND_DEBUG /* code to find via load_info */ #else #define FIND_DEBUG /* code to load &dyndbg_site directly */ #endif which you should probably stick into a suitable .h file, and then stick your newly defined FIND_DEBUG where you need the magic happen (probably in a .h file as well)
On Tue, Mar 9, 2021 at 3:25 PM Valdis Klētnieks <valdis.kletnieks@vt.edu> wrote:
On Tue, 09 Mar 2021 12:55:14 -0700, jim.cromie@gmail.com said:
To use the index, I need &dyndbg_sites[], and that only works for builtin-module's callsites. For loaded modules, I can/have added a pointer to the section into module load_info, giving me the base I will need for the ! builtin branch.
I just need a not expensive is-it-builtin (modref)
thanks Valdis, the back and forth helped. So, to follow up, the above is embodied here; https://lore.kernel.org/lkml/20210316050801.2446401-1-jim.cromie@gmail.com/ in the add index patch, near 13/18
participants (2)
-
jim.cromie@gmail.com -
Valdis Klētnieks