sched: Extract the basic add/sub preempt_count modifiers
Rewrite the preempt_count macros in order to extract the 3 basic preempt_count value modifiers: __preempt_count_add() __preempt_count_sub() and the new: __preempt_count_dec_and_test() And since we're at it anyway, replace the unconventional $op_preempt_count names with the more conventional preempt_count_$op. Since these basic operators are equivalent to the previous _notrace() variants, do away with the _notrace() versions. Signed-off-by: Peter Zijlstra <peterz@infradead.org> Link: http://lkml.kernel.org/n/tip-ewbpdbupy9xpsjhg960zwbv8@git.kernel.org Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
parent
0102874755
commit
bdb4380658
10 changed files with 113 additions and 103 deletions
|
@ -100,13 +100,13 @@ static void __local_bh_disable(unsigned long ip, unsigned int cnt)
|
|||
|
||||
raw_local_irq_save(flags);
|
||||
/*
|
||||
* The preempt tracer hooks into add_preempt_count and will break
|
||||
* The preempt tracer hooks into preempt_count_add and will break
|
||||
* lockdep because it calls back into lockdep after SOFTIRQ_OFFSET
|
||||
* is set and before current->softirq_enabled is cleared.
|
||||
* We must manually increment preempt_count here and manually
|
||||
* call the trace_preempt_off later.
|
||||
*/
|
||||
add_preempt_count_notrace(cnt);
|
||||
__preempt_count_add(cnt);
|
||||
/*
|
||||
* Were softirqs turned off above:
|
||||
*/
|
||||
|
@ -120,7 +120,7 @@ static void __local_bh_disable(unsigned long ip, unsigned int cnt)
|
|||
#else /* !CONFIG_TRACE_IRQFLAGS */
|
||||
static inline void __local_bh_disable(unsigned long ip, unsigned int cnt)
|
||||
{
|
||||
add_preempt_count(cnt);
|
||||
preempt_count_add(cnt);
|
||||
barrier();
|
||||
}
|
||||
#endif /* CONFIG_TRACE_IRQFLAGS */
|
||||
|
@ -139,7 +139,7 @@ static void __local_bh_enable(unsigned int cnt)
|
|||
|
||||
if (softirq_count() == cnt)
|
||||
trace_softirqs_on(_RET_IP_);
|
||||
sub_preempt_count(cnt);
|
||||
preempt_count_sub(cnt);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -169,12 +169,12 @@ static inline void _local_bh_enable_ip(unsigned long ip)
|
|||
* Keep preemption disabled until we are done with
|
||||
* softirq processing:
|
||||
*/
|
||||
sub_preempt_count(SOFTIRQ_DISABLE_OFFSET - 1);
|
||||
preempt_count_sub(SOFTIRQ_DISABLE_OFFSET - 1);
|
||||
|
||||
if (unlikely(!in_interrupt() && local_softirq_pending()))
|
||||
do_softirq();
|
||||
|
||||
dec_preempt_count();
|
||||
preempt_count_dec();
|
||||
#ifdef CONFIG_TRACE_IRQFLAGS
|
||||
local_irq_enable();
|
||||
#endif
|
||||
|
@ -360,7 +360,7 @@ void irq_exit(void)
|
|||
|
||||
account_irq_exit_time(current);
|
||||
trace_hardirq_exit();
|
||||
sub_preempt_count(HARDIRQ_OFFSET);
|
||||
preempt_count_sub(HARDIRQ_OFFSET);
|
||||
if (!in_interrupt() && local_softirq_pending())
|
||||
invoke_softirq();
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue