lkml.org 
[lkml]   [2003]   [Jul]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
From
Subject[PATCH] Remove "cpu" arg to cpu_raise_softirq().
Date
Linus, please reject if you want renaming as well.

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.

I didn't change the name, but I dislike the layering:
raise_softirq(int nr): completely general
cpu_raise_softirq(int nr): must have interrupts off
__cpu_raise_softirq(int nr): doesn't wake ksoftirqd

Better would be:
raise_softirq(int nr): completely general
__raise_softirq(int nr): must have interrupts off
__raise_softirq_noksoftirqd(int nr): doesn't wake ksoftirqd

Feedback welcome!
Rusty.

Name: Remove CPU arg from softirq functions
Author: Rusty Russell
Status: Tested on 2.5.73-bk8
Depends: Percpu/ksoftirqd_percpu.patch.gz

D: The function cpu_raise_softirq() takes a softirq number, and a cpu number,
D: but cannot be used with cpu != smp_processor_id(), because there's no
D: locking around the pending softirq lists. Since noone does this, remove
D: that arg.
D:
D: I didn't change the name, but I dislike the layering:
D: raise_softirq(int nr): completely general
D: cpu_raise_softirq(int nr): must have interrupts off
D: __cpu_raise_softirq(int nr): doesn't wake ksoftirqd

diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal .2637-2.5.73-bk3-softirq_local.pre/drivers/scsi/scsi.c .2637-2.5.73-bk3-softirq_local/drivers/scsi/scsi.c
--- .2637-2.5.73-bk3-softirq_local.pre/drivers/scsi/scsi.c 2003-06-23 10:52:50.000000000 +1000
+++ .2637-2.5.73-bk3-softirq_local/drivers/scsi/scsi.c 2003-06-26 16:04:32.000000000 +1000
@@ -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);
+ cpu_raise_softirq(SCSI_SOFTIRQ);
local_irq_restore(flags);
}

diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal .2637-2.5.73-bk3-softirq_local.pre/include/linux/interrupt.h .2637-2.5.73-bk3-softirq_local/include/linux/interrupt.h
--- .2637-2.5.73-bk3-softirq_local.pre/include/linux/interrupt.h 2003-05-27 15:02:21.000000000 +1000
+++ .2637-2.5.73-bk3-softirq_local/include/linux/interrupt.h 2003-06-26 16:04:32.000000000 +1000
@@ -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 __cpu_raise_softirq(nr) do { local_softirq_pending() |= 1UL << (nr); } while (0)
+extern void FASTCALL(cpu_raise_softirq(unsigned int nr));
extern void FASTCALL(raise_softirq(unsigned int nr));

#ifndef invoke_softirq
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal .2637-2.5.73-bk3-softirq_local.pre/include/linux/netdevice.h .2637-2.5.73-bk3-softirq_local/include/linux/netdevice.h
--- .2637-2.5.73-bk3-softirq_local.pre/include/linux/netdevice.h 2003-06-23 10:52:58.000000000 +1000
+++ .2637-2.5.73-bk3-softirq_local/include/linux/netdevice.h 2003-06-26 16:04:32.000000000 +1000
@@ -555,7 +555,7 @@ static inline void __netif_schedule(stru
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);
+ cpu_raise_softirq(NET_TX_SOFTIRQ);
local_irq_restore(flags);
}
}
@@ -606,7 +606,7 @@ static inline void dev_kfree_skb_irq(str
cpu = smp_processor_id();
skb->next = softnet_data[cpu].completion_queue;
softnet_data[cpu].completion_queue = skb;
- cpu_raise_softirq(cpu, NET_TX_SOFTIRQ);
+ cpu_raise_softirq(NET_TX_SOFTIRQ);
local_irq_restore(flags);
}
}
@@ -773,7 +773,7 @@ static inline void __netif_rx_schedule(s
dev->quota += dev->weight;
else
dev->quota = dev->weight;
- __cpu_raise_softirq(cpu, NET_RX_SOFTIRQ);
+ __cpu_raise_softirq(NET_RX_SOFTIRQ);
local_irq_restore(flags);
}

@@ -799,7 +799,7 @@ static inline int netif_rx_reschedule(st
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);
+ __cpu_raise_softirq(NET_RX_SOFTIRQ);
local_irq_restore(flags);
return 1;
}
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal .2637-2.5.73-bk3-softirq_local.pre/kernel/softirq.c .2637-2.5.73-bk3-softirq_local/kernel/softirq.c
--- .2637-2.5.73-bk3-softirq_local.pre/kernel/softirq.c 2003-06-26 16:04:32.000000000 +1000
+++ .2637-2.5.73-bk3-softirq_local/kernel/softirq.c 2003-06-26 16:04:32.000000000 +1000
@@ -121,9 +121,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 cpu_raise_softirq(unsigned int nr)
{
- __cpu_raise_softirq(cpu, nr);
+ __cpu_raise_softirq(nr);

/*
* If we're in an interrupt or softirq, we're done
@@ -143,7 +143,7 @@ void raise_softirq(unsigned int nr)
unsigned long flags;

local_irq_save(flags);
- cpu_raise_softirq(smp_processor_id(), nr);
+ cpu_raise_softirq(nr);
local_irq_restore(flags);
}

@@ -172,7 +172,7 @@ void __tasklet_schedule(struct tasklet_s
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);
+ cpu_raise_softirq(TASKLET_SOFTIRQ);
local_irq_restore(flags);
}

@@ -183,7 +183,7 @@ void __tasklet_hi_schedule(struct taskle
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);
+ cpu_raise_softirq(HI_SOFTIRQ);
local_irq_restore(flags);
}

@@ -215,7 +215,7 @@ static void tasklet_action(struct softir
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);
+ __cpu_raise_softirq(TASKLET_SOFTIRQ);
local_irq_enable();
}
}
@@ -248,7 +248,7 @@ static void tasklet_hi_action(struct sof
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);
+ __cpu_raise_softirq(HI_SOFTIRQ);
local_irq_enable();
}
}
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal .2637-2.5.73-bk3-softirq_local.pre/net/core/dev.c .2637-2.5.73-bk3-softirq_local/net/core/dev.c
--- .2637-2.5.73-bk3-softirq_local.pre/net/core/dev.c 2003-06-23 10:52:59.000000000 +1000
+++ .2637-2.5.73-bk3-softirq_local/net/core/dev.c 2003-06-26 16:04:32.000000000 +1000
@@ -1712,7 +1712,7 @@ out:

softnet_break:
netdev_rx_stat[this_cpu].time_squeeze++;
- __cpu_raise_softirq(this_cpu, NET_RX_SOFTIRQ);
+ __cpu_raise_softirq(NET_RX_SOFTIRQ);
goto out;
}

--
Anyone who quotes me in their sig is an idiot. -- Rusty Russell.
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-03-22 13:46    [W:0.044 / U:0.136 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site