|
@@ -89,7 +89,7 @@ static void wakeup_softirqd(void)
|
|
|
* where hardirqs are disabled legitimately:
|
|
|
*/
|
|
|
#ifdef CONFIG_TRACE_IRQFLAGS
|
|
|
-static void __local_bh_disable(unsigned long ip, unsigned int cnt)
|
|
|
+void __local_bh_disable_ip(unsigned long ip, unsigned int cnt)
|
|
|
{
|
|
|
unsigned long flags;
|
|
|
|
|
@@ -114,21 +114,9 @@ static void __local_bh_disable(unsigned long ip, unsigned int cnt)
|
|
|
if (preempt_count() == cnt)
|
|
|
trace_preempt_off(CALLER_ADDR0, get_parent_ip(CALLER_ADDR1));
|
|
|
}
|
|
|
-#else /* !CONFIG_TRACE_IRQFLAGS */
|
|
|
-static inline void __local_bh_disable(unsigned long ip, unsigned int cnt)
|
|
|
-{
|
|
|
- preempt_count_add(cnt);
|
|
|
- barrier();
|
|
|
-}
|
|
|
+EXPORT_SYMBOL(__local_bh_disable_ip);
|
|
|
#endif /* CONFIG_TRACE_IRQFLAGS */
|
|
|
|
|
|
-void local_bh_disable(void)
|
|
|
-{
|
|
|
- __local_bh_disable(_RET_IP_, SOFTIRQ_DISABLE_OFFSET);
|
|
|
-}
|
|
|
-
|
|
|
-EXPORT_SYMBOL(local_bh_disable);
|
|
|
-
|
|
|
static void __local_bh_enable(unsigned int cnt)
|
|
|
{
|
|
|
WARN_ON_ONCE(!irqs_disabled());
|
|
@@ -151,7 +139,7 @@ void _local_bh_enable(void)
|
|
|
|
|
|
EXPORT_SYMBOL(_local_bh_enable);
|
|
|
|
|
|
-static inline void _local_bh_enable_ip(unsigned long ip)
|
|
|
+void __local_bh_enable_ip(unsigned long ip, unsigned int cnt)
|
|
|
{
|
|
|
WARN_ON_ONCE(in_irq() || irqs_disabled());
|
|
|
#ifdef CONFIG_TRACE_IRQFLAGS
|
|
@@ -166,7 +154,7 @@ static inline void _local_bh_enable_ip(unsigned long ip)
|
|
|
* Keep preemption disabled until we are done with
|
|
|
* softirq processing:
|
|
|
*/
|
|
|
- preempt_count_sub(SOFTIRQ_DISABLE_OFFSET - 1);
|
|
|
+ preempt_count_sub(cnt - 1);
|
|
|
|
|
|
if (unlikely(!in_interrupt() && local_softirq_pending())) {
|
|
|
/*
|
|
@@ -182,18 +170,7 @@ static inline void _local_bh_enable_ip(unsigned long ip)
|
|
|
#endif
|
|
|
preempt_check_resched();
|
|
|
}
|
|
|
-
|
|
|
-void local_bh_enable(void)
|
|
|
-{
|
|
|
- _local_bh_enable_ip(_RET_IP_);
|
|
|
-}
|
|
|
-EXPORT_SYMBOL(local_bh_enable);
|
|
|
-
|
|
|
-void local_bh_enable_ip(unsigned long ip)
|
|
|
-{
|
|
|
- _local_bh_enable_ip(ip);
|
|
|
-}
|
|
|
-EXPORT_SYMBOL(local_bh_enable_ip);
|
|
|
+EXPORT_SYMBOL(__local_bh_enable_ip);
|
|
|
|
|
|
/*
|
|
|
* We restart softirq processing for at most MAX_SOFTIRQ_RESTART times,
|
|
@@ -230,7 +207,7 @@ asmlinkage void __do_softirq(void)
|
|
|
pending = local_softirq_pending();
|
|
|
account_irq_enter_time(current);
|
|
|
|
|
|
- __local_bh_disable(_RET_IP_, SOFTIRQ_OFFSET);
|
|
|
+ __local_bh_disable_ip(_RET_IP_, SOFTIRQ_OFFSET);
|
|
|
lockdep_softirq_enter();
|
|
|
|
|
|
cpu = smp_processor_id();
|