Merge branch 'core/softirq' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip
* 'core/softirq' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: softirq: remove irqs_disabled warning from local_bh_enable softirq: remove initialization of static per-cpu variable Remove argument from open_softirq which is always NULL
This commit is contained in:
Коммит
666484f025
|
@ -2048,7 +2048,7 @@ int __init blk_dev_init(void)
|
|||
for_each_possible_cpu(i)
|
||||
INIT_LIST_HEAD(&per_cpu(blk_cpu_done, i));
|
||||
|
||||
open_softirq(BLOCK_SOFTIRQ, blk_done_softirq, NULL);
|
||||
open_softirq(BLOCK_SOFTIRQ, blk_done_softirq);
|
||||
register_hotcpu_notifier(&blk_cpu_notifier);
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -285,12 +285,11 @@ enum
|
|||
struct softirq_action
|
||||
{
|
||||
void (*action)(struct softirq_action *);
|
||||
void *data;
|
||||
};
|
||||
|
||||
asmlinkage void do_softirq(void);
|
||||
asmlinkage void __do_softirq(void);
|
||||
extern void open_softirq(int nr, void (*action)(struct softirq_action*), void *data);
|
||||
extern void open_softirq(int nr, void (*action)(struct softirq_action *));
|
||||
extern void softirq_init(void);
|
||||
#define __raise_softirq_irqoff(nr) do { or_softirq_pending(1UL << (nr)); } while (0)
|
||||
extern void raise_softirq_irqoff(unsigned int nr);
|
||||
|
|
|
@ -1677,7 +1677,7 @@ void __init hrtimers_init(void)
|
|||
(void *)(long)smp_processor_id());
|
||||
register_cpu_notifier(&hrtimers_nb);
|
||||
#ifdef CONFIG_HIGH_RES_TIMERS
|
||||
open_softirq(HRTIMER_SOFTIRQ, run_hrtimer_softirq, NULL);
|
||||
open_softirq(HRTIMER_SOFTIRQ, run_hrtimer_softirq);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
|
@ -543,7 +543,7 @@ static void __cpuinit rcu_online_cpu(int cpu)
|
|||
|
||||
rcu_init_percpu_data(cpu, &rcu_ctrlblk, rdp);
|
||||
rcu_init_percpu_data(cpu, &rcu_bh_ctrlblk, bh_rdp);
|
||||
open_softirq(RCU_SOFTIRQ, rcu_process_callbacks, NULL);
|
||||
open_softirq(RCU_SOFTIRQ, rcu_process_callbacks);
|
||||
}
|
||||
|
||||
static int __cpuinit rcu_cpu_notify(struct notifier_block *self,
|
||||
|
|
|
@ -1119,7 +1119,7 @@ void __init __rcu_init(void)
|
|||
for_each_online_cpu(cpu)
|
||||
rcu_cpu_notify(&rcu_nb, CPU_UP_PREPARE, (void *)(long) cpu);
|
||||
|
||||
open_softirq(RCU_SOFTIRQ, rcu_process_callbacks, NULL);
|
||||
open_softirq(RCU_SOFTIRQ, rcu_process_callbacks);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -8152,7 +8152,7 @@ void __init sched_init(void)
|
|||
#endif
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
open_softirq(SCHED_SOFTIRQ, run_rebalance_domains, NULL);
|
||||
open_softirq(SCHED_SOFTIRQ, run_rebalance_domains);
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_RT_MUTEXES
|
||||
|
|
|
@ -131,48 +131,11 @@ void _local_bh_enable(void)
|
|||
|
||||
EXPORT_SYMBOL(_local_bh_enable);
|
||||
|
||||
void local_bh_enable(void)
|
||||
static inline void _local_bh_enable_ip(unsigned long ip)
|
||||
{
|
||||
WARN_ON_ONCE(in_irq() || irqs_disabled());
|
||||
#ifdef CONFIG_TRACE_IRQFLAGS
|
||||
unsigned long flags;
|
||||
|
||||
WARN_ON_ONCE(in_irq());
|
||||
#endif
|
||||
WARN_ON_ONCE(irqs_disabled());
|
||||
|
||||
#ifdef CONFIG_TRACE_IRQFLAGS
|
||||
local_irq_save(flags);
|
||||
#endif
|
||||
/*
|
||||
* Are softirqs going to be turned on now:
|
||||
*/
|
||||
if (softirq_count() == SOFTIRQ_OFFSET)
|
||||
trace_softirqs_on((unsigned long)__builtin_return_address(0));
|
||||
/*
|
||||
* Keep preemption disabled until we are done with
|
||||
* softirq processing:
|
||||
*/
|
||||
sub_preempt_count(SOFTIRQ_OFFSET - 1);
|
||||
|
||||
if (unlikely(!in_interrupt() && local_softirq_pending()))
|
||||
do_softirq();
|
||||
|
||||
dec_preempt_count();
|
||||
#ifdef CONFIG_TRACE_IRQFLAGS
|
||||
local_irq_restore(flags);
|
||||
#endif
|
||||
preempt_check_resched();
|
||||
}
|
||||
EXPORT_SYMBOL(local_bh_enable);
|
||||
|
||||
void local_bh_enable_ip(unsigned long ip)
|
||||
{
|
||||
#ifdef CONFIG_TRACE_IRQFLAGS
|
||||
unsigned long flags;
|
||||
|
||||
WARN_ON_ONCE(in_irq());
|
||||
|
||||
local_irq_save(flags);
|
||||
local_irq_disable();
|
||||
#endif
|
||||
/*
|
||||
* Are softirqs going to be turned on now:
|
||||
|
@ -190,10 +153,21 @@ void local_bh_enable_ip(unsigned long ip)
|
|||
|
||||
dec_preempt_count();
|
||||
#ifdef CONFIG_TRACE_IRQFLAGS
|
||||
local_irq_restore(flags);
|
||||
local_irq_enable();
|
||||
#endif
|
||||
preempt_check_resched();
|
||||
}
|
||||
|
||||
void local_bh_enable(void)
|
||||
{
|
||||
_local_bh_enable_ip((unsigned long)__builtin_return_address(0));
|
||||
}
|
||||
EXPORT_SYMBOL(local_bh_enable);
|
||||
|
||||
void local_bh_enable_ip(unsigned long ip)
|
||||
{
|
||||
_local_bh_enable_ip(ip);
|
||||
}
|
||||
EXPORT_SYMBOL(local_bh_enable_ip);
|
||||
|
||||
/*
|
||||
|
@ -347,9 +321,8 @@ void raise_softirq(unsigned int nr)
|
|||
local_irq_restore(flags);
|
||||
}
|
||||
|
||||
void open_softirq(int nr, void (*action)(struct softirq_action*), void *data)
|
||||
void open_softirq(int nr, void (*action)(struct softirq_action *))
|
||||
{
|
||||
softirq_vec[nr].data = data;
|
||||
softirq_vec[nr].action = action;
|
||||
}
|
||||
|
||||
|
@ -360,10 +333,8 @@ struct tasklet_head
|
|||
struct tasklet_struct **tail;
|
||||
};
|
||||
|
||||
/* Some compilers disobey section attribute on statics when not
|
||||
initialized -- RR */
|
||||
static DEFINE_PER_CPU(struct tasklet_head, tasklet_vec) = { NULL };
|
||||
static DEFINE_PER_CPU(struct tasklet_head, tasklet_hi_vec) = { NULL };
|
||||
static DEFINE_PER_CPU(struct tasklet_head, tasklet_vec);
|
||||
static DEFINE_PER_CPU(struct tasklet_head, tasklet_hi_vec);
|
||||
|
||||
void __tasklet_schedule(struct tasklet_struct *t)
|
||||
{
|
||||
|
@ -503,8 +474,8 @@ void __init softirq_init(void)
|
|||
&per_cpu(tasklet_hi_vec, cpu).head;
|
||||
}
|
||||
|
||||
open_softirq(TASKLET_SOFTIRQ, tasklet_action, NULL);
|
||||
open_softirq(HI_SOFTIRQ, tasklet_hi_action, NULL);
|
||||
open_softirq(TASKLET_SOFTIRQ, tasklet_action);
|
||||
open_softirq(HI_SOFTIRQ, tasklet_hi_action);
|
||||
}
|
||||
|
||||
static int ksoftirqd(void * __bind_cpu)
|
||||
|
|
|
@ -1502,7 +1502,7 @@ void __init init_timers(void)
|
|||
|
||||
BUG_ON(err == NOTIFY_BAD);
|
||||
register_cpu_notifier(&timers_nb);
|
||||
open_softirq(TIMER_SOFTIRQ, run_timer_softirq, NULL);
|
||||
open_softirq(TIMER_SOFTIRQ, run_timer_softirq);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -4585,8 +4585,8 @@ static int __init net_dev_init(void)
|
|||
|
||||
dev_boot_phase = 0;
|
||||
|
||||
open_softirq(NET_TX_SOFTIRQ, net_tx_action, NULL);
|
||||
open_softirq(NET_RX_SOFTIRQ, net_rx_action, NULL);
|
||||
open_softirq(NET_TX_SOFTIRQ, net_tx_action);
|
||||
open_softirq(NET_RX_SOFTIRQ, net_rx_action);
|
||||
|
||||
hotcpu_notifier(dev_cpu_callback, 0);
|
||||
dst_init();
|
||||
|
|
Загрузка…
Ссылка в новой задаче