Commit 59bf6c3c authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'sched-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull scheduler fixes from Ingo Molnar:
 "Three small fixes"

* 'sched-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  sched/clock: Prevent tracing recursion in sched_clock_cpu()
  stop_machine: Fix^2 race between stop_two_cpus() and stop_cpus()
  sched/deadline: Deny unprivileged users to set/change SCHED_DEADLINE policy
parents b44eeb4d 96b3d28b
...@@ -301,14 +301,14 @@ u64 sched_clock_cpu(int cpu) ...@@ -301,14 +301,14 @@ u64 sched_clock_cpu(int cpu)
if (unlikely(!sched_clock_running)) if (unlikely(!sched_clock_running))
return 0ull; return 0ull;
preempt_disable(); preempt_disable_notrace();
scd = cpu_sdc(cpu); scd = cpu_sdc(cpu);
if (cpu != smp_processor_id()) if (cpu != smp_processor_id())
clock = sched_clock_remote(scd); clock = sched_clock_remote(scd);
else else
clock = sched_clock_local(scd); clock = sched_clock_local(scd);
preempt_enable(); preempt_enable_notrace();
return clock; return clock;
} }
......
...@@ -3338,6 +3338,15 @@ static int __sched_setscheduler(struct task_struct *p, ...@@ -3338,6 +3338,15 @@ static int __sched_setscheduler(struct task_struct *p,
return -EPERM; return -EPERM;
} }
/*
* Can't set/change SCHED_DEADLINE policy at all for now
* (safest behavior); in the future we would like to allow
* unprivileged DL tasks to increase their relative deadline
* or reduce their runtime (both ways reducing utilization)
*/
if (dl_policy(policy))
return -EPERM;
/* /*
* Treat SCHED_IDLE as nice 20. Only allow a switch to * Treat SCHED_IDLE as nice 20. Only allow a switch to
* SCHED_NORMAL if the RLIMIT_NICE would normally permit it. * SCHED_NORMAL if the RLIMIT_NICE would normally permit it.
......
...@@ -293,7 +293,7 @@ int stop_two_cpus(unsigned int cpu1, unsigned int cpu2, cpu_stop_fn_t fn, void * ...@@ -293,7 +293,7 @@ int stop_two_cpus(unsigned int cpu1, unsigned int cpu2, cpu_stop_fn_t fn, void *
*/ */
smp_call_function_single(min(cpu1, cpu2), smp_call_function_single(min(cpu1, cpu2),
&irq_cpu_stop_queue_work, &irq_cpu_stop_queue_work,
&call_args, 0); &call_args, 1);
lg_local_unlock(&stop_cpus_lock); lg_local_unlock(&stop_cpus_lock);
preempt_enable(); preempt_enable();
......
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