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:
		
						commit
						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(); | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user