[PATCH v8 1/2] kho: fix deferred initialization of scratch areas
Mike Rapoport
rppt at kernel.org
Wed Apr 22 01:24:39 PDT 2026
On Tue, Apr 21, 2026 at 12:20:27PM +0200, Michał Cłapiński wrote:
> On Tue, Apr 21, 2026 at 8:08 AM Mike Rapoport <rppt at kernel.org> wrote:
> >
> > On Mon, Apr 20, 2026 at 03:11:03PM +0200, Michał Cłapiński wrote:
> > > On Thu, Apr 16, 2026 at 6:13 PM Mike Rapoport <rppt at kernel.org> wrote:
> > > >
> > > > On Thu, Apr 16, 2026 at 05:06:10PM +0200, Michał Cłapiński wrote:
> > > > > On Thu, Apr 16, 2026 at 4:45 PM Mike Rapoport <rppt at kernel.org> wrote:
> > > > > >
> > > > > > Hi Michal,
> > > > > >
> > > > > > On Thu, Apr 16, 2026 at 01:06:53PM +0200, Michal Clapinski wrote:
> > > > > > > @@ -2262,6 +2253,12 @@ static void __init memmap_init_reserved_range(phys_addr_t start,
> > > > > > > * access it yet.
> > > > > > > */
> > > > > > > __SetPageReserved(page);
> > > > > > > +
> > > > > > > +#ifdef CONFIG_MEMBLOCK_KHO_SCRATCH
> > > > > >
> > > > > > No need for #ifdef here, there's a stub returning false for
> > > > > > CONFIG_MEMBLOCK_KHO_SCRATCH=n case.
> > > > >
> > > > > In all 3 places the #ifdef is there because MIGRATE_CMA might be
> > > > > undefined. I already broke mm-new branch in the past because of that.
> > > >
> > > > Hmm, that hurts :/
> > > >
> > > > The best I can think of is to add a static inline in memblock.h and ifdefs
> > > > around it.
> > >
> > > Sorry, I don't understand what you mean. What would that static inline contain?
> >
> > Something like this:
> >
> > #ifdef CONFIG_MEMBLOCK_KHO_SCRATCH
> > static inline enum migratetype kho_scratch_migratetype(unsigned long pfn,
> > enum migratetype mt)
> > {
> > if (memblock_is_kho_scratch_memory(PFN_PHYS(pfn)))
> > return MIGRATE_CMA
> > return mt;
> > }
> > #else
> > static inline enum migratetype kho_scratch_migratetype(unsigned long pfn,
> > enum migratetype mt)
> > {
> > return mt;
> > }
> > #endif
>
> How would I use it for this code?
>
> +#ifdef CONFIG_MEMBLOCK_KHO_SCRATCH
> + if (memblock_is_kho_scratch_memory(PFN_PHYS(pfn)) &&
> + pageblock_aligned(pfn))
> + init_pageblock_migratetype(page, MIGRATE_CMA, false);
> +#endif
Something like this
enum migratetype mt = kho_scratch_migratetype(pfn, MIGRATE_MOVABLE);
...
if (memblock_is_kho_scratch_memory(PFN_PHYS(pfn)) &&
pageblock_aligned(pfn))
init_pageblock_migratetype(page, mt, false);
seems better to me than ifdef, even though MIGRATE_MOVABLE is bogus here.
And since we anyway changing init_pageblock_migratetype() callers in
mm_init.c the entire block in memmap_init_reserved_range() can be dropped
and the change can be done in __init_page_from_nid().
>
> It doesn't invoke init_pageblock_migratetype unless pfn is kho scratch.
>
> > Can't say I'm happy about the name, but could not think of something
> > better.
> >
> > > > > > > + if (memblock_is_kho_scratch_memory(PFN_PHYS(pfn)) &&
> > > > > > > + pageblock_aligned(pfn))
> > > > > > > + init_pageblock_migratetype(page, MIGRATE_CMA, false);
> > > > > > > +#endif
> > > > > > > }
> > > > > > > }
> > > >
> > > > --
> > > > Sincerely yours,
> > > > Mike.
> >
> > --
> > Sincerely yours,
> > Mike.
--
Sincerely yours,
Mike.
More information about the kexec
mailing list