Name: Softirq callback parameter removal Author: Matthew Wilcox Status: Experimental D: Noone uses the softirq_action arg to the softirq handlers. Index: linux-2.6.10-rc2-bk13-Percpu/kernel/timer.c =================================================================== --- linux-2.6.10-rc2-bk13-Percpu.orig/kernel/timer.c 2004-11-30 12:45:23.000000000 +1100 +++ linux-2.6.10-rc2-bk13-Percpu/kernel/timer.c 2004-12-02 14:12:39.825314816 +1100 @@ -919,7 +919,7 @@ /* * This function runs timers and the timer-tq in bottom half context. */ -static void run_timer_softirq(struct softirq_action *h) +static void run_timer_softirq(void) { tvec_base_t *base = &__get_cpu_var(tvec_bases); @@ -1431,7 +1431,7 @@ timer_cpu_notify(&timers_nb, (unsigned long)CPU_UP_PREPARE, (void *)(long)smp_processor_id()); register_cpu_notifier(&timers_nb); - open_softirq(TIMER_SOFTIRQ, run_timer_softirq, NULL); + open_softirq(TIMER_SOFTIRQ, run_timer_softirq); } #ifdef CONFIG_TIME_INTERPOLATION Index: linux-2.6.10-rc2-bk13-Percpu/kernel/softirq.c =================================================================== --- linux-2.6.10-rc2-bk13-Percpu.orig/kernel/softirq.c 2004-12-02 14:05:54.000000000 +1100 +++ linux-2.6.10-rc2-bk13-Percpu/kernel/softirq.c 2004-12-02 14:12:39.824314968 +1100 @@ -92,7 +92,7 @@ do { if (pending & 1) { - h->action(h); + h->action(); rcu_bh_qsctr_inc(cpu); } h++; @@ -183,9 +183,8 @@ local_irq_restore(flags); } -void open_softirq(int nr, void (*action)(struct softirq_action*), void *data) +void open_softirq(int nr, void (*action)(void)) { - softirq_vec[nr].data = data; softirq_vec[nr].action = action; } @@ -228,7 +227,7 @@ EXPORT_SYMBOL(__tasklet_hi_schedule); -static void tasklet_action(struct softirq_action *a) +static void tasklet_action(void) { struct tasklet_struct *list; @@ -261,7 +260,7 @@ } } -static void tasklet_hi_action(struct softirq_action *a) +static void tasklet_hi_action(void) { struct tasklet_struct *list; @@ -325,8 +324,8 @@ void __init softirq_init(void) { - 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) Index: linux-2.6.10-rc2-bk13-Percpu/drivers/scsi/scsi.c =================================================================== --- linux-2.6.10-rc2-bk13-Percpu.orig/drivers/scsi/scsi.c 2004-11-30 12:45:18.000000000 +1100 +++ linux-2.6.10-rc2-bk13-Percpu/drivers/scsi/scsi.c 2004-12-02 14:12:39.822315272 +1100 @@ -772,7 +772,7 @@ * interrupt latency, stack depth, and reentrancy of the low-level * drivers. */ -static void scsi_softirq(struct softirq_action *h) +static void scsi_softirq(void) { int disposition; LIST_HEAD(local_q); @@ -1243,7 +1243,7 @@ INIT_LIST_HEAD(&per_cpu(scsi_done_q, i)); devfs_mk_dir("scsi"); - open_softirq(SCSI_SOFTIRQ, scsi_softirq, NULL); + open_softirq(SCSI_SOFTIRQ, scsi_softirq); register_scsi_cpu(); printk(KERN_NOTICE "SCSI subsystem initialized\n"); return 0; Index: linux-2.6.10-rc2-bk13-Percpu/include/linux/interrupt.h =================================================================== --- linux-2.6.10-rc2-bk13-Percpu.orig/include/linux/interrupt.h 2004-11-16 15:30:07.000000000 +1100 +++ linux-2.6.10-rc2-bk13-Percpu/include/linux/interrupt.h 2004-12-02 14:12:39.823315120 +1100 @@ -98,12 +98,11 @@ struct softirq_action { - void (*action)(struct softirq_action *); - void *data; + void (*action)(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)(void)); extern void softirq_init(void); #define __raise_softirq_irqoff(nr) do { local_softirq_pending() |= 1UL << (nr); } while (0) extern void FASTCALL(raise_softirq_irqoff(unsigned int nr)); Index: linux-2.6.10-rc2-bk13-Percpu/net/core/dev.c =================================================================== --- linux-2.6.10-rc2-bk13-Percpu.orig/net/core/dev.c 2004-12-02 14:05:54.000000000 +1100 +++ linux-2.6.10-rc2-bk13-Percpu/net/core/dev.c 2004-12-02 14:07:17.000000000 +1100 @@ -1512,7 +1512,7 @@ } } -static void net_tx_action(struct softirq_action *h) +static void net_tx_action(void) { struct softnet_data *sd = &__get_cpu_var(softnet_data); @@ -1768,7 +1768,7 @@ return 0; } -static void net_rx_action(struct softirq_action *h) +static void net_rx_action(void) { struct softnet_data *queue = &__get_cpu_var(softnet_data); unsigned long start_time = jiffies; @@ -3194,8 +3194,8 @@ 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();