diff --git a/include/linux/sched.h b/include/linux/sched.h index b6c3da92107d..8892be6ba5d4 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -1677,16 +1677,6 @@ current_restore_flags(unsigned long orig_flags, unsigned long flags) extern int cpuset_cpumask_can_shrink(const struct cpumask *cur, const struct cpumask *trial); extern int task_can_attach(struct task_struct *p, const struct cpumask *cs_cpus_allowed); - -#ifdef CONFIG_RT_SOFTINT_OPTIMIZATION -extern bool cpupri_check_rt(void); -#else -static inline bool cpupri_check_rt(void) -{ - return false; -} -#endif - #ifdef CONFIG_SMP extern void do_set_cpus_allowed(struct task_struct *p, const struct cpumask *new_mask); extern int set_cpus_allowed_ptr(struct task_struct *p, const struct cpumask *new_mask); diff --git a/kernel/sched/cpupri.c b/kernel/sched/cpupri.c index 4b6f21c88741..73ecc1190da1 100644 --- a/kernel/sched/cpupri.c +++ b/kernel/sched/cpupri.c @@ -355,16 +355,3 @@ void cpupri_cleanup(struct cpupri *cp) for (i = 0; i < CPUPRI_NR_PRIORITIES; i++) free_cpumask_var(cp->pri_to_cpu[i].mask); } - -#ifdef CONFIG_RT_SOFTINT_OPTIMIZATION -/* - * cpupri_check_rt - check if CPU has a RT task - * should be called from rcu-sched read section. - */ -bool cpupri_check_rt(void) -{ - int cpu = raw_smp_processor_id(); - - return cpu_rq(cpu)->rd->cpupri.cpu_to_pri[cpu] > CPUPRI_NORMAL; -} -#endif diff --git a/kernel/softirq.c b/kernel/softirq.c index a7956c5d55e4..d715589078c3 100644 --- a/kernel/softirq.c +++ b/kernel/softirq.c @@ -262,16 +262,6 @@ static inline bool lockdep_softirq_start(void) { return false; } static inline void lockdep_softirq_end(bool in_hardirq) { } #endif -#define softirq_deferred_for_rt(pending) \ -({ \ - __u32 deferred = 0; \ - if (cpupri_check_rt()) { \ - deferred = pending & LONG_SOFTIRQ_MASK; \ - pending &= ~LONG_SOFTIRQ_MASK; \ - } \ - deferred; \ -}) - asmlinkage __visible void __softirq_entry __do_softirq(void) { unsigned long end = jiffies + MAX_SOFTIRQ_TIME; @@ -279,7 +269,6 @@ asmlinkage __visible void __softirq_entry __do_softirq(void) int max_restart = MAX_SOFTIRQ_RESTART; struct softirq_action *h; bool in_hardirq; - __u32 deferred; __u32 pending; int softirq_bit; @@ -291,14 +280,14 @@ asmlinkage __visible void __softirq_entry __do_softirq(void) current->flags &= ~PF_MEMALLOC; pending = local_softirq_pending(); - deferred = softirq_deferred_for_rt(pending); account_irq_enter_time(current); + __local_bh_disable_ip(_RET_IP_, SOFTIRQ_OFFSET); in_hardirq = lockdep_softirq_start(); restart: /* Reset the pending bitmask before enabling irqs */ - set_softirq_pending(deferred); + set_softirq_pending(0); __this_cpu_write(active_softirqs, pending); local_irq_enable(); @@ -335,18 +324,14 @@ restart: local_irq_disable(); pending = local_softirq_pending(); - deferred = softirq_deferred_for_rt(pending); - if (pending) { if (time_before(jiffies, end) && !need_resched() && --max_restart) goto restart; + + wakeup_softirqd(); } -#ifdef CONFIG_RT_SOFTINT_OPTIMIZATION - if (pending | deferred) - wakeup_softirqd(); -#endif lockdep_softirq_end(in_hardirq); account_irq_exit_time(current); __local_bh_enable(SOFTIRQ_OFFSET);