Commit 26e48e57 authored by Rusty Russell's avatar Rusty Russell Committed by Linus Torvalds

[PATCH] Remove cpu arg from cpu_raise_irq

The function cpu_raise_softirq() takes a softirq number, and a cpu number,
but cannot be used with cpu != smp_processor_id(), because there's no
locking around the pending softirq lists.  Since noone does this, remove
that arg.

As per Linus' suggestion, names changed:
	raise_softirq(int nr)
	cpu_raise_softirq(int cpu, int nr) -> raise_softirq_irqoff(int nr)
	__cpu_raise_softirq(int cpu, int nr) -> __raise_softirq_irqoff(int nr)
parent b9d6ea3c
......@@ -582,7 +582,7 @@ void scsi_done(struct scsi_cmnd *cmd)
local_irq_save(flags);
cpu = smp_processor_id();
list_add_tail(&cmd->eh_entry, &done_q[cpu]);
cpu_raise_softirq(cpu, SCSI_SOFTIRQ);
raise_softirq_irqoff(SCSI_SOFTIRQ);
local_irq_restore(flags);
}
......
......@@ -94,8 +94,8 @@ struct softirq_action
asmlinkage void do_softirq(void);
extern void open_softirq(int nr, void (*action)(struct softirq_action*), void *data);
extern void softirq_init(void);
#define __cpu_raise_softirq(cpu, nr) do { softirq_pending(cpu) |= 1UL << (nr); } while (0)
extern void FASTCALL(cpu_raise_softirq(unsigned int cpu, unsigned int nr));
#define __raise_softirq_irqoff(nr) do { local_softirq_pending() |= 1UL << (nr); } while (0)
extern void FASTCALL(raise_softirq_irqoff(unsigned int nr));
extern void FASTCALL(raise_softirq(unsigned int nr));
#ifndef invoke_softirq
......
......@@ -561,7 +561,7 @@ static inline void __netif_schedule(struct net_device *dev)
cpu = smp_processor_id();
dev->next_sched = softnet_data[cpu].output_queue;
softnet_data[cpu].output_queue = dev;
cpu_raise_softirq(cpu, NET_TX_SOFTIRQ);
raise_softirq_irqoff(NET_TX_SOFTIRQ);
local_irq_restore(flags);
}
}
......@@ -612,7 +612,7 @@ static inline void dev_kfree_skb_irq(struct sk_buff *skb)
cpu = smp_processor_id();
skb->next = softnet_data[cpu].completion_queue;
softnet_data[cpu].completion_queue = skb;
cpu_raise_softirq(cpu, NET_TX_SOFTIRQ);
raise_softirq_irqoff(NET_TX_SOFTIRQ);
local_irq_restore(flags);
}
}
......@@ -779,7 +779,7 @@ static inline void __netif_rx_schedule(struct net_device *dev)
dev->quota += dev->weight;
else
dev->quota = dev->weight;
__cpu_raise_softirq(cpu, NET_RX_SOFTIRQ);
__raise_softirq_irqoff(NET_RX_SOFTIRQ);
local_irq_restore(flags);
}
......@@ -805,7 +805,7 @@ static inline int netif_rx_reschedule(struct net_device *dev, int undo)
local_irq_save(flags);
cpu = smp_processor_id();
list_add_tail(&dev->poll_list, &softnet_data[cpu].poll_list);
__cpu_raise_softirq(cpu, NET_RX_SOFTIRQ);
__raise_softirq_irqoff(NET_RX_SOFTIRQ);
local_irq_restore(flags);
return 1;
}
......
......@@ -587,7 +587,7 @@ EXPORT_SYMBOL(tasklet_kill);
EXPORT_SYMBOL(do_softirq);
EXPORT_SYMBOL(raise_softirq);
EXPORT_SYMBOL(open_softirq);
EXPORT_SYMBOL(cpu_raise_softirq);
EXPORT_SYMBOL(raise_softirq_irqoff);
EXPORT_SYMBOL(__tasklet_schedule);
EXPORT_SYMBOL(__tasklet_hi_schedule);
......
......@@ -117,9 +117,9 @@ EXPORT_SYMBOL(local_bh_enable);
/*
* This function must run with irqs disabled!
*/
inline void cpu_raise_softirq(unsigned int cpu, unsigned int nr)
inline void raise_softirq_irqoff(unsigned int nr)
{
__cpu_raise_softirq(cpu, nr);
__raise_softirq_irqoff(nr);
/*
* If we're in an interrupt or softirq, we're done
......@@ -139,7 +139,7 @@ void raise_softirq(unsigned int nr)
unsigned long flags;
local_irq_save(flags);
cpu_raise_softirq(smp_processor_id(), nr);
raise_softirq_irqoff(nr);
local_irq_restore(flags);
}
......@@ -168,7 +168,7 @@ void __tasklet_schedule(struct tasklet_struct *t)
local_irq_save(flags);
t->next = __get_cpu_var(tasklet_vec).list;
__get_cpu_var(tasklet_vec).list = t;
cpu_raise_softirq(smp_processor_id(), TASKLET_SOFTIRQ);
raise_softirq_irqoff(TASKLET_SOFTIRQ);
local_irq_restore(flags);
}
......@@ -179,7 +179,7 @@ void __tasklet_hi_schedule(struct tasklet_struct *t)
local_irq_save(flags);
t->next = __get_cpu_var(tasklet_hi_vec).list;
__get_cpu_var(tasklet_hi_vec).list = t;
cpu_raise_softirq(smp_processor_id(), HI_SOFTIRQ);
raise_softirq_irqoff(HI_SOFTIRQ);
local_irq_restore(flags);
}
......@@ -211,7 +211,7 @@ static void tasklet_action(struct softirq_action *a)
local_irq_disable();
t->next = __get_cpu_var(tasklet_vec).list;
__get_cpu_var(tasklet_vec).list = t;
__cpu_raise_softirq(smp_processor_id(), TASKLET_SOFTIRQ);
__raise_softirq_irqoff(TASKLET_SOFTIRQ);
local_irq_enable();
}
}
......@@ -244,7 +244,7 @@ static void tasklet_hi_action(struct softirq_action *a)
local_irq_disable();
t->next = __get_cpu_var(tasklet_hi_vec).list;
__get_cpu_var(tasklet_hi_vec).list = t;
__cpu_raise_softirq(smp_processor_id(), HI_SOFTIRQ);
__raise_softirq_irqoff(HI_SOFTIRQ);
local_irq_enable();
}
}
......
......@@ -1712,7 +1712,7 @@ static void net_rx_action(struct softirq_action *h)
softnet_break:
netdev_rx_stat[this_cpu].time_squeeze++;
__cpu_raise_softirq(this_cpu, NET_RX_SOFTIRQ);
__raise_softirq_irqoff(NET_RX_SOFTIRQ);
goto out;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment