Messages in this thread | | | Date | Mon, 2 Oct 2017 20:52:23 +0200 (CEST) | From | Thomas Gleixner <> | Subject | Re: [PATCH/RFC] cpuhp code and data usage on UP systems |
| |
On Mon, 2 Oct 2017, Nicolas Pitre wrote: > > On !SMP systems, we end up with the following array definition: > > static struct cpuhp_step cpuhp_ap_states[] = { > [CPUHP_ONLINE] = { > .name = "online", > .startup.single = NULL, > .teardown.single = NULL, > }, > }; > > where CPUHP_ONLINE = 187. That means up to 99.5% of this array is unused > but still allocated in the kernel's .data section i.e. 3760 bytes. > > The same issue exists with cpuhp_bp_states being 1720 bytes. > > The goal of this patch is mainly about illustrating the issue and > reducing .data usage. I have no clear idea when this stuff is really > needed besides standard CPU hotplug. Not knowing exactly what I'm doing > here, I made it conditional on CONFIG_SMP for now. There might be a case > for moving that code to a separate file (cpuhp.c maybe?) and omitting it > from the kernel when unneeded. > > Comments?
Sure.
> +#ifdef CONFIG_CPUHP > +#define ___P(proto, def_retcode) extern proto; > +#else > +#define ___P(proto, def_retcode) static inline proto { return def_retcode } > +#endif > + > +___P( > int __cpuhp_setup_state(enum cpuhp_state state, const char *name, bool invoke, > int (*startup)(unsigned int cpu), > - int (*teardown)(unsigned int cpu), bool multi_instance); > - > + int (*teardown)(unsigned int cpu), bool multi_instance), 0; )
What exactly is invoking the callbacks of states in the proper context and manages instances on registration? Ditto for teardwon in case of modules.
Thanks,
tglx
| |