Messages in this thread | | | From | Pavel Tatashin <> | Date | Fri, 27 Jul 2018 10:53:24 -0400 | Subject | Re: [PATCH v2 2/3] mm: calculate deferred pages after skipping mirrored memory |
| |
unsigned long *nr_initialised) > > +static bool __meminit > > +defer_init(int nid, unsigned long pfn, unsigned long end_pfn) > > Hi Pavel, > > maybe I do not understand properly the __init/__meminit macros, but should not > "defer_init" be __init instead of __meminit? > I think that functions marked as __meminit are not freed up, right?
Not exactly. As I understand: __meminit is the same as __init when CONFIG_MEMORY_HOTPLUG=n. But, when memory hotplug is configured, __meminit is not freed, because code that adds memory is shared between boot and hotplug. In this case defer_init() is called only during boot, and could be __init, but it is called from memmap_init_zone() which is __meminit and thus section mismatch would happen.
We could split memmap_init_zone() into two functions: boot and hotplug variants, or we could use __ref, but I do not think any of that is really needed. Keeping defer_init() in __meminit is OK, it does not take that much memory.
> > Reviewed-by: Oscar Salvador <osalvador@suse.de>
Thank you, Pavel
| |