Commit 777feaba authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'sched_urgent_for_v5.15_rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull scheduler fixes from Borislav Petkov:

 - Tell the compiler to always inline is_percpu_thread()

 - Make sure tunable_scaling buffer is null-terminated after an update
   in sysfs

 - Fix LTP named regression due to cgroup list ordering

* tag 'sched_urgent_for_v5.15_rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  sched: Always inline is_percpu_thread()
  sched/fair: Null terminate buffer when updating tunable_scaling
  sched/fair: Add ancestors of unthrottled undecayed cfs_rq
parents 3a399a2b 83d40a61
...@@ -1720,7 +1720,7 @@ extern struct pid *cad_pid; ...@@ -1720,7 +1720,7 @@ extern struct pid *cad_pid;
#define tsk_used_math(p) ((p)->flags & PF_USED_MATH) #define tsk_used_math(p) ((p)->flags & PF_USED_MATH)
#define used_math() tsk_used_math(current) #define used_math() tsk_used_math(current)
static inline bool is_percpu_thread(void) static __always_inline bool is_percpu_thread(void)
{ {
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
return (current->flags & PF_NO_SETAFFINITY) && return (current->flags & PF_NO_SETAFFINITY) &&
......
...@@ -173,16 +173,22 @@ static ssize_t sched_scaling_write(struct file *filp, const char __user *ubuf, ...@@ -173,16 +173,22 @@ static ssize_t sched_scaling_write(struct file *filp, const char __user *ubuf,
size_t cnt, loff_t *ppos) size_t cnt, loff_t *ppos)
{ {
char buf[16]; char buf[16];
unsigned int scaling;
if (cnt > 15) if (cnt > 15)
cnt = 15; cnt = 15;
if (copy_from_user(&buf, ubuf, cnt)) if (copy_from_user(&buf, ubuf, cnt))
return -EFAULT; return -EFAULT;
buf[cnt] = '\0';
if (kstrtouint(buf, 10, &sysctl_sched_tunable_scaling)) if (kstrtouint(buf, 10, &scaling))
return -EINVAL; return -EINVAL;
if (scaling >= SCHED_TUNABLESCALING_END)
return -EINVAL;
sysctl_sched_tunable_scaling = scaling;
if (sched_update_scaling()) if (sched_update_scaling())
return -EINVAL; return -EINVAL;
......
...@@ -4936,8 +4936,12 @@ void unthrottle_cfs_rq(struct cfs_rq *cfs_rq) ...@@ -4936,8 +4936,12 @@ void unthrottle_cfs_rq(struct cfs_rq *cfs_rq)
/* update hierarchical throttle state */ /* update hierarchical throttle state */
walk_tg_tree_from(cfs_rq->tg, tg_nop, tg_unthrottle_up, (void *)rq); walk_tg_tree_from(cfs_rq->tg, tg_nop, tg_unthrottle_up, (void *)rq);
if (!cfs_rq->load.weight) /* Nothing to run but something to decay (on_list)? Complete the branch */
if (!cfs_rq->load.weight) {
if (cfs_rq->on_list)
goto unthrottle_throttle;
return; return;
}
task_delta = cfs_rq->h_nr_running; task_delta = cfs_rq->h_nr_running;
idle_task_delta = cfs_rq->idle_h_nr_running; idle_task_delta = cfs_rq->idle_h_nr_running;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment