X-Git-Url: http://git.monstr.eu/?a=blobdiff_plain;f=kernel%2Fsched%2Fcore.c;h=c94895bc5a2c14dc05117a7050fb9b3964db0357;hb=72573481eb7c4397db7eec57d5592efe882a2ab5;hp=e7c535eee0a6d493a2a43eba210c08c6858b63d1;hpb=7225a442788e20ee108ef2cb97d511375e20acf9;p=linux-2.6-microblaze.git diff --git a/kernel/sched/core.c b/kernel/sched/core.c index e7c535eee0a6..c94895bc5a2c 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -6683,13 +6683,18 @@ static int tg_cfs_schedulable_down(struct task_group *tg, void *data) parent_quota = parent_b->hierarchical_quota; /* - * Ensure max(child_quota) <= parent_quota, inherit when no + * Ensure max(child_quota) <= parent_quota. On cgroup2, + * always take the min. On cgroup1, only inherit when no * limit is set: */ - if (quota == RUNTIME_INF) - quota = parent_quota; - else if (parent_quota != RUNTIME_INF && quota > parent_quota) - return -EINVAL; + if (cgroup_subsys_on_dfl(cpu_cgrp_subsys)) { + quota = min(quota, parent_quota); + } else { + if (quota == RUNTIME_INF) + quota = parent_quota; + else if (parent_quota != RUNTIME_INF && quota > parent_quota) + return -EINVAL; + } } cfs_b->hierarchical_quota = quota;