[Devel] [PATCH RHEL7] Removed warning from kmalloc in function alloc_rootdomain
Denis V. Lunev
den at virtuozzo.com
Fri Jul 3 19:19:53 MSK 2020
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 $
More information about the Devel
mailing list