Re: [PATCH v9 03/12] mm: deferred_init_memmap improvements

From: Michal Hocko
Date: Wed Oct 04 2017 - 04:48:27 EST


On Tue 03-10-17 12:01:08, Pasha Tatashin wrote:
> Hi Michal,
>
> Are you OK, if I replace DEFERRED_FREE() macro with a function like this:
>
> /*
> * Helper for deferred_init_range, free the given range, and reset the
> * counters
> */
> static inline unsigned long __def_free(unsigned long *nr_free,
> unsigned long *free_base_pfn,
> struct page **page)
> {
> unsigned long nr = *nr_free;
>
> deferred_free_range(*free_base_pfn, nr);
> *free_base_pfn = 0;
> *nr_free = 0;
> *page = NULL;
>
> return nr;
> }
>
> Since it is inline, and we operate with non-volatile counters, compiler will
> be smart enough to remove all the unnecessary de-references. As a plus, we
> won't be adding any new branches, and the code is still going to stay
> compact.

OK. It is a bit clunky but we are holding too much state there. I
haven't checked whether that can be simplified but this can be always
done later.
--
Michal Hocko
SUSE Labs