diff options
| author | Mark Brown <broonie@kernel.org> | 2024-10-22 23:18:45 +0100 |
|---|---|---|
| committer | Mark Brown <broonie@kernel.org> | 2024-10-22 23:18:45 +0100 |
| commit | 5ddc236d094d496bcd1e78aaa88bdde530073b6f (patch) | |
| tree | 2435f76086b7bbf9739c05411baa2f1520cd9618 /kernel/sched/syscalls.c | |
| parent | 0d214f27c0e3d9694284c95bac1502c2d247355b (diff) | |
| parent | 602ff58ae4fe4289b0ca71cba9fb82f7de92cd64 (diff) | |
| download | linux-next-5ddc236d094d496bcd1e78aaa88bdde530073b6f.tar.gz linux-next-5ddc236d094d496bcd1e78aaa88bdde530073b6f.zip | |
regulator: init_data handling update
Merge series from Jerome Brunet <jbrunet@baylibre.com>:
This patchset groups the regulator patches around the init_data topic
discussed on pmbus write protect patchset [1]
[1]: https://lore.kernel.org/r/20240920-pmbus-wp-v1-0-d679ef31c483@baylibre.com
Diffstat (limited to 'kernel/sched/syscalls.c')
| -rw-r--r-- | kernel/sched/syscalls.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/kernel/sched/syscalls.c b/kernel/sched/syscalls.c index aa70beee9895..0470bcc3d204 100644 --- a/kernel/sched/syscalls.c +++ b/kernel/sched/syscalls.c @@ -529,7 +529,7 @@ int __sched_setscheduler(struct task_struct *p, { int oldpolicy = -1, policy = attr->sched_policy; int retval, oldprio, newprio, queued, running; - const struct sched_class *prev_class; + const struct sched_class *prev_class, *next_class; struct balance_callback *head; struct rq_flags rf; int reset_on_fork; @@ -706,6 +706,12 @@ change: queue_flags &= ~DEQUEUE_MOVE; } + prev_class = p->sched_class; + next_class = __setscheduler_class(p, newprio); + + if (prev_class != next_class && p->se.sched_delayed) + dequeue_task(rq, p, DEQUEUE_SLEEP | DEQUEUE_DELAYED | DEQUEUE_NOCLOCK); + queued = task_on_rq_queued(p); running = task_current(rq, p); if (queued) @@ -713,11 +719,10 @@ change: if (running) put_prev_task(rq, p); - prev_class = p->sched_class; - if (!(attr->sched_flags & SCHED_FLAG_KEEP_PARAMS)) { __setscheduler_params(p, attr); - __setscheduler_prio(p, newprio); + p->sched_class = next_class; + p->prio = newprio; } __setscheduler_uclamp(p, attr); check_class_changing(rq, p, prev_class); |
