Re: [RFC PATCH 1/5] mm: intorduce __GFP_UNMAPPED and unmapped_alloc()

From: Thomas Gleixner
Date: Mon May 22 2023 - 18:05:20 EST


On Fri, May 19 2023 at 08:42, Song Liu wrote:
> On Fri, May 19, 2023 at 1:30 AM Mike Rapoport <rppt@xxxxxxxxxx> wrote:
>> What I was thinking is that we can replace module_alloc() calls in your
>> allocator with something based on my unmapped_alloc(). If we make the part
>> that refills the cache also take care of creating the mapping in the
>> module address space, that should cover everything.
>
> Here are what I found as I work more on the code:
>
> 1. It takes quite some work to create a clean interface and make sure
> all the users of module_alloc can use the new allocator on all archs.
> (archs with text poke need to work with ROX memory from the
> allocator; archs without text poke need to have a clean fall back
> mechanism, etc.). Most of this work is independent of the actual
> allocator, so we can do this part and plug in whatever allocator we
> want (buddy+slab or vmap-based or any other solutions).
>
> 2. vmap_area based solution will work. And it will be one solution for
> both < PAGE_SIZE and > PAGE_SIZE allocations. Given
> module_alloc is not in any hot path (AFAIK), I don't see any
> practical issues with this solution. It will be a little tricky to place
> and name the code, as it uses vmalloc logic, but it is technically a
> module allocator.
>
> I will prioritize building the interface, and migrating users to it. If we
> do this part right, changing the underlying allocator should be
> straightforward.

Correct, that's the only workable approach.

Once you have solved #1 the mechanism of the underlying allocator (#2)
is pretty much exchangeable.

Any attempt to solve #2 before #1 is doomed by definition.

Thanks,

tglx