[Devel] [PATCH RHEL7] Removed warning from kmalloc in function alloc_rootdomain
Denis V. Lunev
den at virtuozzo.com
Fri Jul 3 19:41:14 MSK 2020
On 7/3/20 7:19 PM, Denis V. Lunev wrote:
> On 7/3/20 7:12 PM, Valeriy Vdovin wrote:
>> 'alloc_rootdomain' is used during cpu hotplug actions when cpu's are
>> removed or added. So it's relatively rare occasion. The size of
>> allocated structure 'struct root_domain' is ~22k, which is a warnable
>> order 3. Because this structure is related to sched domain the code
>> accessing it is considered of high priority due to execution in
>> scheduling codepaths, so we should not fallback to virtualized page
>> continuity in this allocation and suppress order warning instead.
>>
>> Signed-off-by: Valeriy Vdovin <valeriy.vdovin at virtuozzo.com>
>> ---
>> kernel/sched/core.c | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/kernel/sched/core.c b/kernel/sched/core.c
>> index 3fe0d62..8d14614 100644
>> --- a/kernel/sched/core.c
>> +++ b/kernel/sched/core.c
>> @@ -7141,7 +7141,7 @@ static struct root_domain *alloc_rootdomain(void)
>> {
>> struct root_domain *rd;
>>
>> - rd = kmalloc(sizeof(*rd), GFP_KERNEL);
>> + rd = kmalloc(sizeof(*rd), GFP_KERNEL | __GFP_ORDER_NOWARN);
>> if (!rd)
>> return NULL;
>>
> NACK
>
> kvmalloc looks to me MUCH better. This item is no
> used in HW operations thus we could use virtually
> contiguous allocations.
>
> iris ~/src/git/linux-vz7 $ git diff
> diff --git a/kernel/sched/core.c b/kernel/sched/core.c
> index 3fe0d62cc51c..d1c489574284 100644
> --- a/kernel/sched/core.c
> +++ b/kernel/sched/core.c
> @@ -7051,7 +7051,7 @@ static void free_rootdomain(struct rcu_head *rcu)
> free_cpumask_var(rd->rto_mask);
> free_cpumask_var(rd->online);
> free_cpumask_var(rd->span);
> - kfree(rd);
> + kvfree(rd);
> }
>
> static void rq_attach_root(struct rq *rq, struct root_domain *rd)
> @@ -7141,12 +7141,12 @@ static struct root_domain *alloc_rootdomain(void)
> {
> struct root_domain *rd;
>
> - rd = kmalloc(sizeof(*rd), GFP_KERNEL);
> + rd = kvmalloc(sizeof(*rd), GFP_KERNEL);
> if (!rd)
> return NULL;
>
> if (init_rootdomain(rd) != 0) {
> - kfree(rd);
> + kvfree(rd);
> return NULL;
> }
>
> iris ~/src/git/linux-vz7 $
> _______________________________________________
> Devel mailing list
> Devel at openvz.org
> https://lists.openvz.org/mailman/listinfo/devel
commit 4dac0b638310d2e92f6e19958b73d4c97c9734bb
Author: Peter Zijlstra <peterz at infradead.org>
Date: Wed May 14 16:04:26 2014 +0200
sched/cpupri: Replace NR_CPUS arrays
Tejun reported that his resume was failing due to order-3 allocations
from sched_domain building.
Replace the NR_CPUS arrays in there with a dynamically allocated
array.
Reported-by: Tejun Heo <tj at kernel.org>
Signed-off-by: Peter Zijlstra <peterz at infradead.org>
Cc: Johannes Weiner <hannes at cmpxchg.org>
Cc: Steven Rostedt <rostedt at goodmis.org>
Cc: Linus Torvalds <torvalds at linux-foundation.org>
Link:
http://lkml.kernel.org/n/tip-7cysnkw1gik45r864t1nkudh@git.kernel.org
Signed-off-by: Ingo Molnar <mingo at kernel.org>
More information about the Devel
mailing list