* [PATCH] Remove argument from open_softirq which is always NULL
@ 2008-05-15 14:15 Carlos R. Mafra
2008-05-15 15:22 ` Matthew Wilcox
` (2 more replies)
0 siblings, 3 replies; 7+ messages in thread
From: Carlos R. Mafra @ 2008-05-15 14:15 UTC (permalink / raw)
To: linux-kernel; +Cc: matthew
>From 9371c45e92c308425c0aad4794f61acb6fe6d140 Mon Sep 17 00:00:00 2001
From: Carlos R. Mafra <crmafra@ift.unesp.br>
Date: Wed, 14 May 2008 18:26:06 -0300
Subject: [PATCH] Remove argument from open_softirq which is always NULL
As git-grep shows, open_softirq() is always called with the last argument
being NULL
block/blk-core.c: open_softirq(BLOCK_SOFTIRQ, blk_done_softirq, NULL);
kernel/hrtimer.c: open_softirq(HRTIMER_SOFTIRQ, run_hrtimer_softirq, NULL);
kernel/rcuclassic.c: open_softirq(RCU_SOFTIRQ, rcu_process_callbacks, NULL);
kernel/rcupreempt.c: open_softirq(RCU_SOFTIRQ, rcu_process_callbacks, NULL);
kernel/sched.c: open_softirq(SCHED_SOFTIRQ, run_rebalance_domains, NULL);
kernel/softirq.c: open_softirq(TASKLET_SOFTIRQ, tasklet_action, NULL);
kernel/softirq.c: open_softirq(HI_SOFTIRQ, tasklet_hi_action, NULL);
kernel/timer.c: open_softirq(TIMER_SOFTIRQ, run_timer_softirq, NULL);
net/core/dev.c: open_softirq(NET_TX_SOFTIRQ, net_tx_action, NULL);
net/core/dev.c: open_softirq(NET_RX_SOFTIRQ, net_rx_action, NULL);
This observation has already been made by Matthew Wilcox in June 2002
(http://www.cs.helsinki.fi/linux/linux-kernel/2002-25/0687.html)
"I notice that none of the current softirq routines use the data element
passed to them."
and the situation hasn't changed since them. So it appears we can safely
remove that extra argument to save 128 (54) bytes of kernel data (text).
Signed-off-by: Carlos R. Mafra <crmafra@ift.unesp.br>
---
block/blk-core.c | 2 +-
include/linux/interrupt.h | 3 +--
kernel/hrtimer.c | 2 +-
kernel/rcuclassic.c | 2 +-
kernel/rcupreempt.c | 2 +-
kernel/sched.c | 2 +-
kernel/softirq.c | 7 +++----
kernel/timer.c | 2 +-
net/core/dev.c | 4 ++--
9 files changed, 12 insertions(+), 14 deletions(-)
diff --git a/block/blk-core.c b/block/blk-core.c
index 2987fe4..667efc4 100644
--- a/block/blk-core.c
+++ b/block/blk-core.c
@@ -2049,7 +2049,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;
diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h
index f1fc747..a86186d 100644
--- a/include/linux/interrupt.h
+++ b/include/linux/interrupt.h
@@ -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);
diff --git a/kernel/hrtimer.c b/kernel/hrtimer.c
index 421be5f..861b408 100644
--- a/kernel/hrtimer.c
+++ b/kernel/hrtimer.c
@@ -1669,7 +1669,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
}
diff --git a/kernel/rcuclassic.c b/kernel/rcuclassic.c
index f4ffbd0..f6e01f3 100644
--- a/kernel/rcuclassic.c
+++ b/kernel/rcuclassic.c
@@ -529,7 +529,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,
diff --git a/kernel/rcupreempt.c b/kernel/rcupreempt.c
index e1cdf19..9dd827d 100644
--- a/kernel/rcupreempt.c
+++ b/kernel/rcupreempt.c
@@ -1125,7 +1125,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);
}
/*
diff --git a/kernel/sched.c b/kernel/sched.c
index 8841a91..80f6661 100644
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -8154,7 +8154,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
diff --git a/kernel/softirq.c b/kernel/softirq.c
index 36e0617..0592568 100644
--- a/kernel/softirq.c
+++ b/kernel/softirq.c
@@ -347,9 +347,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;
}
@@ -503,8 +502,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)
diff --git a/kernel/timer.c b/kernel/timer.c
index ceacc66..b4da888 100644
--- a/kernel/timer.c
+++ b/kernel/timer.c
@@ -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);
}
/**
diff --git a/net/core/dev.c b/net/core/dev.c
index a1607bc..692d971 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -4559,8 +4559,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();
--
1.5.4.3
^ permalink raw reply related [flat|nested] 7+ messages in thread* Re: [PATCH] Remove argument from open_softirq which is always NULL
2008-05-15 14:15 [PATCH] Remove argument from open_softirq which is always NULL Carlos R. Mafra
@ 2008-05-15 15:22 ` Matthew Wilcox
2008-05-16 11:57 ` Ingo Molnar
2008-05-16 18:28 ` Paul E. McKenney
2 siblings, 0 replies; 7+ messages in thread
From: Matthew Wilcox @ 2008-05-15 15:22 UTC (permalink / raw)
To: linux-kernel
On Thu, May 15, 2008 at 11:15:37AM -0300, Carlos R. Mafra wrote:
> This observation has already been made by Matthew Wilcox in June 2002
> (http://www.cs.helsinki.fi/linux/linux-kernel/2002-25/0687.html)
>
> "I notice that none of the current softirq routines use the data element
> passed to them."
>
> and the situation hasn't changed since them. So it appears we can safely
> remove that extra argument to save 128 (54) bytes of kernel data (text).
>
> Signed-off-by: Carlos R. Mafra <crmafra@ift.unesp.br>
Reviewed-by: Matthew Wilcox <willy@linux.intel.com>
--
Intel are signing my paycheques ... these opinions are still mine
"Bill, look, we understand that you're interested in selling us this
operating system, but compare it to ours. We can't possibly take such
a retrograde step."
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] Remove argument from open_softirq which is always NULL
2008-05-15 14:15 [PATCH] Remove argument from open_softirq which is always NULL Carlos R. Mafra
2008-05-15 15:22 ` Matthew Wilcox
@ 2008-05-16 11:57 ` Ingo Molnar
2008-05-16 18:28 ` Paul E. McKenney
2 siblings, 0 replies; 7+ messages in thread
From: Ingo Molnar @ 2008-05-16 11:57 UTC (permalink / raw)
To: linux-kernel, matthew, Carlos R. Mafra
* Carlos R. Mafra <crmafra2@gmail.com> wrote:
> Subject: [PATCH] Remove argument from open_softirq which is always
> NULL
>
> As git-grep shows, open_softirq() is always called with the last
> argument being NULL
>
> block/blk-core.c: open_softirq(BLOCK_SOFTIRQ, blk_done_softirq, NULL);
> kernel/hrtimer.c: open_softirq(HRTIMER_SOFTIRQ, run_hrtimer_softirq, NULL);
> kernel/rcuclassic.c: open_softirq(RCU_SOFTIRQ, rcu_process_callbacks, NULL);
> kernel/rcupreempt.c: open_softirq(RCU_SOFTIRQ, rcu_process_callbacks, NULL);
> kernel/sched.c: open_softirq(SCHED_SOFTIRQ, run_rebalance_domains, NULL);
> kernel/softirq.c: open_softirq(TASKLET_SOFTIRQ, tasklet_action, NULL);
> kernel/softirq.c: open_softirq(HI_SOFTIRQ, tasklet_hi_action, NULL);
> kernel/timer.c: open_softirq(TIMER_SOFTIRQ, run_timer_softirq, NULL);
> net/core/dev.c: open_softirq(NET_TX_SOFTIRQ, net_tx_action, NULL);
> net/core/dev.c: open_softirq(NET_RX_SOFTIRQ, net_rx_action, NULL);
>
> This observation has already been made by Matthew Wilcox in June 2002
> (http://www.cs.helsinki.fi/linux/linux-kernel/2002-25/0687.html)
>
> "I notice that none of the current softirq routines use the data element
> passed to them."
>
> and the situation hasn't changed since them. So it appears we can
> safely remove that extra argument to save 128 (54) bytes of kernel
> data (text).
applied to -tip, thanks Carlos. Nice find!
Ingo
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] Remove argument from open_softirq which is always NULL
2008-05-15 14:15 [PATCH] Remove argument from open_softirq which is always NULL Carlos R. Mafra
2008-05-15 15:22 ` Matthew Wilcox
2008-05-16 11:57 ` Ingo Molnar
@ 2008-05-16 18:28 ` Paul E. McKenney
2008-05-16 19:52 ` Carlos R. Mafra
2008-05-17 4:24 ` [PATCH] Remove unused argument from functions invoked by open_softirq Carlos R. Mafra
2 siblings, 2 replies; 7+ messages in thread
From: Paul E. McKenney @ 2008-05-16 18:28 UTC (permalink / raw)
To: linux-kernel, matthew
On Thu, May 15, 2008 at 11:15:37AM -0300, Carlos R. Mafra wrote:
> From 9371c45e92c308425c0aad4794f61acb6fe6d140 Mon Sep 17 00:00:00 2001
> From: Carlos R. Mafra <crmafra@ift.unesp.br>
> Date: Wed, 14 May 2008 18:26:06 -0300
> Subject: [PATCH] Remove argument from open_softirq which is always NULL
>
> As git-grep shows, open_softirq() is always called with the last argument
> being NULL
>
> block/blk-core.c: open_softirq(BLOCK_SOFTIRQ, blk_done_softirq, NULL);
> kernel/hrtimer.c: open_softirq(HRTIMER_SOFTIRQ, run_hrtimer_softirq, NULL);
> kernel/rcuclassic.c: open_softirq(RCU_SOFTIRQ, rcu_process_callbacks, NULL);
> kernel/rcupreempt.c: open_softirq(RCU_SOFTIRQ, rcu_process_callbacks, NULL);
> kernel/sched.c: open_softirq(SCHED_SOFTIRQ, run_rebalance_domains, NULL);
> kernel/softirq.c: open_softirq(TASKLET_SOFTIRQ, tasklet_action, NULL);
> kernel/softirq.c: open_softirq(HI_SOFTIRQ, tasklet_hi_action, NULL);
> kernel/timer.c: open_softirq(TIMER_SOFTIRQ, run_timer_softirq, NULL);
> net/core/dev.c: open_softirq(NET_TX_SOFTIRQ, net_tx_action, NULL);
> net/core/dev.c: open_softirq(NET_RX_SOFTIRQ, net_rx_action, NULL);
>
> This observation has already been made by Matthew Wilcox in June 2002
> (http://www.cs.helsinki.fi/linux/linux-kernel/2002-25/0687.html)
>
> "I notice that none of the current softirq routines use the data element
> passed to them."
>
> and the situation hasn't changed since them. So it appears we can safely
> remove that extra argument to save 128 (54) bytes of kernel data (text).
Good stuff!!!
Will there also be a similar set of patches that removes the extra
argument from the invoked function? For example:
static void rcu_process_callbacks(struct softirq_action *unused)
could now become:
static void rcu_process_callbacks(void)
Acked-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
> Signed-off-by: Carlos R. Mafra <crmafra@ift.unesp.br>
> ---
> block/blk-core.c | 2 +-
> include/linux/interrupt.h | 3 +--
> kernel/hrtimer.c | 2 +-
> kernel/rcuclassic.c | 2 +-
> kernel/rcupreempt.c | 2 +-
> kernel/sched.c | 2 +-
> kernel/softirq.c | 7 +++----
> kernel/timer.c | 2 +-
> net/core/dev.c | 4 ++--
> 9 files changed, 12 insertions(+), 14 deletions(-)
>
> diff --git a/block/blk-core.c b/block/blk-core.c
> index 2987fe4..667efc4 100644
> --- a/block/blk-core.c
> +++ b/block/blk-core.c
> @@ -2049,7 +2049,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;
> diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h
> index f1fc747..a86186d 100644
> --- a/include/linux/interrupt.h
> +++ b/include/linux/interrupt.h
> @@ -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);
> diff --git a/kernel/hrtimer.c b/kernel/hrtimer.c
> index 421be5f..861b408 100644
> --- a/kernel/hrtimer.c
> +++ b/kernel/hrtimer.c
> @@ -1669,7 +1669,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
> }
>
> diff --git a/kernel/rcuclassic.c b/kernel/rcuclassic.c
> index f4ffbd0..f6e01f3 100644
> --- a/kernel/rcuclassic.c
> +++ b/kernel/rcuclassic.c
> @@ -529,7 +529,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,
> diff --git a/kernel/rcupreempt.c b/kernel/rcupreempt.c
> index e1cdf19..9dd827d 100644
> --- a/kernel/rcupreempt.c
> +++ b/kernel/rcupreempt.c
> @@ -1125,7 +1125,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);
> }
>
> /*
> diff --git a/kernel/sched.c b/kernel/sched.c
> index 8841a91..80f6661 100644
> --- a/kernel/sched.c
> +++ b/kernel/sched.c
> @@ -8154,7 +8154,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
> diff --git a/kernel/softirq.c b/kernel/softirq.c
> index 36e0617..0592568 100644
> --- a/kernel/softirq.c
> +++ b/kernel/softirq.c
> @@ -347,9 +347,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;
> }
>
> @@ -503,8 +502,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)
> diff --git a/kernel/timer.c b/kernel/timer.c
> index ceacc66..b4da888 100644
> --- a/kernel/timer.c
> +++ b/kernel/timer.c
> @@ -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);
> }
>
> /**
> diff --git a/net/core/dev.c b/net/core/dev.c
> index a1607bc..692d971 100644
> --- a/net/core/dev.c
> +++ b/net/core/dev.c
> @@ -4559,8 +4559,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();
> --
> 1.5.4.3
>
> --
> 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/
>
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: [PATCH] Remove argument from open_softirq which is always NULL
2008-05-16 18:28 ` Paul E. McKenney
@ 2008-05-16 19:52 ` Carlos R. Mafra
2008-05-17 4:24 ` [PATCH] Remove unused argument from functions invoked by open_softirq Carlos R. Mafra
1 sibling, 0 replies; 7+ messages in thread
From: Carlos R. Mafra @ 2008-05-16 19:52 UTC (permalink / raw)
To: Paul E. McKenney; +Cc: linux-kernel, matthew
On Fri 16.May'08 at 11:28:07 -0700, Paul E. McKenney wrote:
> On Thu, May 15, 2008 at 11:15:37AM -0300, Carlos R. Mafra wrote:
> > From 9371c45e92c308425c0aad4794f61acb6fe6d140 Mon Sep 17 00:00:00 2001
> > From: Carlos R. Mafra <crmafra@ift.unesp.br>
> > Date: Wed, 14 May 2008 18:26:06 -0300
> > Subject: [PATCH] Remove argument from open_softirq which is always NULL
> >
> > As git-grep shows, open_softirq() is always called with the last argument
> > being NULL
> >
> > block/blk-core.c: open_softirq(BLOCK_SOFTIRQ, blk_done_softirq, NULL);
> > kernel/hrtimer.c: open_softirq(HRTIMER_SOFTIRQ, run_hrtimer_softirq, NULL);
> > kernel/rcuclassic.c: open_softirq(RCU_SOFTIRQ, rcu_process_callbacks, NULL);
> > kernel/rcupreempt.c: open_softirq(RCU_SOFTIRQ, rcu_process_callbacks, NULL);
> > kernel/sched.c: open_softirq(SCHED_SOFTIRQ, run_rebalance_domains, NULL);
> > kernel/softirq.c: open_softirq(TASKLET_SOFTIRQ, tasklet_action, NULL);
> > kernel/softirq.c: open_softirq(HI_SOFTIRQ, tasklet_hi_action, NULL);
> > kernel/timer.c: open_softirq(TIMER_SOFTIRQ, run_timer_softirq, NULL);
> > net/core/dev.c: open_softirq(NET_TX_SOFTIRQ, net_tx_action, NULL);
> > net/core/dev.c: open_softirq(NET_RX_SOFTIRQ, net_rx_action, NULL);
> >
> > This observation has already been made by Matthew Wilcox in June 2002
> > (http://www.cs.helsinki.fi/linux/linux-kernel/2002-25/0687.html)
> >
> > "I notice that none of the current softirq routines use the data element
> > passed to them."
> >
> > and the situation hasn't changed since them. So it appears we can safely
> > remove that extra argument to save 128 (54) bytes of kernel data (text).
>
> Good stuff!!!
Thanks a lot!
> Will there also be a similar set of patches that removes the extra
> argument from the invoked function? For example:
>
> static void rcu_process_callbacks(struct softirq_action *unused)
>
> could now become:
>
> static void rcu_process_callbacks(void)
That was my intention at first when I came acroos
run_hrtimer_softirq(struct softirq_action *h) in hrtimer.c, which then led me to
read more code and notice that I could do the cleanup in this patch.
You've just gave me the motivation I needed to keep cleaning (and learning) further,
as the original bug which motivated me to look at those things does not
happen anymore in my laptop :-)
I will try to do another patch soon, but I will travel tomorrow so it
may take a few days.
> Acked-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Thanks,
Carlos
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH] Remove unused argument from functions invoked by open_softirq
2008-05-16 18:28 ` Paul E. McKenney
2008-05-16 19:52 ` Carlos R. Mafra
@ 2008-05-17 4:24 ` Carlos R. Mafra
2008-05-17 6:03 ` Paul E. McKenney
1 sibling, 1 reply; 7+ messages in thread
From: Carlos R. Mafra @ 2008-05-17 4:24 UTC (permalink / raw)
To: Paul E. McKenney; +Cc: linux-kernel, matthew
Remove unused argument from functions invoked by open_softirq
Simplify struct softirq_action to avoid the need of an explicit unused
argument in the functions invoked by open_softirq(). For example,
static void rcu_process_callbacks(struct softirq_action *unused)
can now become
static void rcu_process_callbacks(void)
Signed-off-by: Carlos R. Mafra <crmafra@ift.unesp.br>
---
block/blk-core.c | 2 +-
include/linux/interrupt.h | 4 ++--
kernel/hrtimer.c | 2 +-
kernel/rcuclassic.c | 2 +-
kernel/rcupreempt.c | 2 +-
kernel/sched.c | 2 +-
kernel/softirq.c | 8 ++++----
kernel/timer.c | 2 +-
net/core/dev.c | 4 ++--
9 files changed, 14 insertions(+), 14 deletions(-)
diff --git a/block/blk-core.c b/block/blk-core.c
index 75fdc65..20847b0 100644
--- a/block/blk-core.c
+++ b/block/blk-core.c
@@ -1630,7 +1630,7 @@ static int __end_that_request_first(struct request *req, int error,
* splice the completion data to a local structure and hand off to
* process_completion_queue() to complete the requests
*/
-static void blk_done_softirq(struct softirq_action *h)
+static void blk_done_softirq(void)
{
struct list_head *cpu_list, local_list;
diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h
index a86186d..0fed9e9 100644
--- a/include/linux/interrupt.h
+++ b/include/linux/interrupt.h
@@ -284,12 +284,12 @@ enum
struct softirq_action
{
- void (*action)(struct softirq_action *);
+ void (*action)(void);
};
asmlinkage void do_softirq(void);
asmlinkage void __do_softirq(void);
-extern void open_softirq(int nr, void (*action)(struct softirq_action *));
+extern void open_softirq(int nr, void (*action)(void));
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);
diff --git a/kernel/hrtimer.c b/kernel/hrtimer.c
index 861b408..0d4a864 100644
--- a/kernel/hrtimer.c
+++ b/kernel/hrtimer.c
@@ -1342,7 +1342,7 @@ void hrtimer_interrupt(struct clock_event_device *dev)
raise_softirq(HRTIMER_SOFTIRQ);
}
-static void run_hrtimer_softirq(struct softirq_action *h)
+static void run_hrtimer_softirq(void)
{
run_hrtimer_pending(&__get_cpu_var(hrtimer_bases));
}
diff --git a/kernel/rcuclassic.c b/kernel/rcuclassic.c
index f6e01f3..f207525 100644
--- a/kernel/rcuclassic.c
+++ b/kernel/rcuclassic.c
@@ -442,7 +442,7 @@ static void __rcu_process_callbacks(struct rcu_ctrlblk *rcp,
rcu_do_batch(rdp);
}
-static void rcu_process_callbacks(struct softirq_action *unused)
+static void rcu_process_callbacks(void)
{
__rcu_process_callbacks(&rcu_ctrlblk, &__get_cpu_var(rcu_data));
__rcu_process_callbacks(&rcu_bh_ctrlblk, &__get_cpu_var(rcu_bh_data));
diff --git a/kernel/rcupreempt.c b/kernel/rcupreempt.c
index 9dd827d..81322aa 100644
--- a/kernel/rcupreempt.c
+++ b/kernel/rcupreempt.c
@@ -948,7 +948,7 @@ void __devinit rcu_online_cpu(int cpu)
#endif /* #else #ifdef CONFIG_HOTPLUG_CPU */
-static void rcu_process_callbacks(struct softirq_action *unused)
+static void rcu_process_callbacks(void)
{
unsigned long flags;
struct rcu_head *next, *list;
diff --git a/kernel/sched.c b/kernel/sched.c
index 56ea3a2..3dd9137 100644
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -4078,7 +4078,7 @@ out:
* In CONFIG_NO_HZ case, the idle load balance owner will do the
* rebalancing for all the cpus for whom scheduler ticks are stopped.
*/
-static void run_rebalance_domains(struct softirq_action *h)
+static void run_rebalance_domains(void)
{
int this_cpu = smp_processor_id();
struct rq *this_rq = cpu_rq(this_cpu);
diff --git a/kernel/softirq.c b/kernel/softirq.c
index 0592568..ff8d401 100644
--- a/kernel/softirq.c
+++ b/kernel/softirq.c
@@ -231,7 +231,7 @@ restart:
do {
if (pending & 1) {
- h->action(h);
+ h->action();
rcu_bh_qsctr_inc(cpu);
}
h++;
@@ -347,7 +347,7 @@ void raise_softirq(unsigned int nr)
local_irq_restore(flags);
}
-void open_softirq(int nr, void (*action)(struct softirq_action *))
+void open_softirq(int nr, void (*action)(void))
{
softirq_vec[nr].action = action;
}
@@ -392,7 +392,7 @@ void __tasklet_hi_schedule(struct tasklet_struct *t)
EXPORT_SYMBOL(__tasklet_hi_schedule);
-static void tasklet_action(struct softirq_action *a)
+static void tasklet_action(void)
{
struct tasklet_struct *list;
@@ -427,7 +427,7 @@ static void tasklet_action(struct softirq_action *a)
}
}
-static void tasklet_hi_action(struct softirq_action *a)
+static void tasklet_hi_action(void)
{
struct tasklet_struct *list;
diff --git a/kernel/timer.c b/kernel/timer.c
index b4da888..a7dae57 100644
--- a/kernel/timer.c
+++ b/kernel/timer.c
@@ -1034,7 +1034,7 @@ static inline void calc_load(unsigned long ticks)
/*
* 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)
{
struct tvec_base *base = __get_cpu_var(tvec_bases);
diff --git a/net/core/dev.c b/net/core/dev.c
index 692d971..d2e029f 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -1836,7 +1836,7 @@ static inline struct net_device *skb_bond(struct sk_buff *skb)
}
-static void net_tx_action(struct softirq_action *h)
+static void net_tx_action(void)
{
struct softnet_data *sd = &__get_cpu_var(softnet_data);
@@ -2159,7 +2159,7 @@ void __napi_schedule(struct napi_struct *n)
EXPORT_SYMBOL(__napi_schedule);
-static void net_rx_action(struct softirq_action *h)
+static void net_rx_action(void)
{
struct list_head *list = &__get_cpu_var(softnet_data).poll_list;
unsigned long start_time = jiffies;
--
1.5.5.GIT
^ permalink raw reply related [flat|nested] 7+ messages in thread* Re: [PATCH] Remove unused argument from functions invoked by open_softirq
2008-05-17 4:24 ` [PATCH] Remove unused argument from functions invoked by open_softirq Carlos R. Mafra
@ 2008-05-17 6:03 ` Paul E. McKenney
0 siblings, 0 replies; 7+ messages in thread
From: Paul E. McKenney @ 2008-05-17 6:03 UTC (permalink / raw)
To: Carlos R. Mafra; +Cc: linux-kernel, matthew
On Sat, May 17, 2008 at 01:24:17AM -0300, Carlos R. Mafra wrote:
> Remove unused argument from functions invoked by open_softirq
>
> Simplify struct softirq_action to avoid the need of an explicit unused
> argument in the functions invoked by open_softirq(). For example,
>
> static void rcu_process_callbacks(struct softirq_action *unused)
>
> can now become
>
> static void rcu_process_callbacks(void)
Looks good to me!
Acked-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
> Signed-off-by: Carlos R. Mafra <crmafra@ift.unesp.br>
> ---
> block/blk-core.c | 2 +-
> include/linux/interrupt.h | 4 ++--
> kernel/hrtimer.c | 2 +-
> kernel/rcuclassic.c | 2 +-
> kernel/rcupreempt.c | 2 +-
> kernel/sched.c | 2 +-
> kernel/softirq.c | 8 ++++----
> kernel/timer.c | 2 +-
> net/core/dev.c | 4 ++--
> 9 files changed, 14 insertions(+), 14 deletions(-)
>
> diff --git a/block/blk-core.c b/block/blk-core.c
> index 75fdc65..20847b0 100644
> --- a/block/blk-core.c
> +++ b/block/blk-core.c
> @@ -1630,7 +1630,7 @@ static int __end_that_request_first(struct request *req, int error,
> * splice the completion data to a local structure and hand off to
> * process_completion_queue() to complete the requests
> */
> -static void blk_done_softirq(struct softirq_action *h)
> +static void blk_done_softirq(void)
> {
> struct list_head *cpu_list, local_list;
>
> diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h
> index a86186d..0fed9e9 100644
> --- a/include/linux/interrupt.h
> +++ b/include/linux/interrupt.h
> @@ -284,12 +284,12 @@ enum
>
> struct softirq_action
> {
> - void (*action)(struct softirq_action *);
> + void (*action)(void);
> };
>
> asmlinkage void do_softirq(void);
> asmlinkage void __do_softirq(void);
> -extern void open_softirq(int nr, void (*action)(struct softirq_action *));
> +extern void open_softirq(int nr, void (*action)(void));
> 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);
> diff --git a/kernel/hrtimer.c b/kernel/hrtimer.c
> index 861b408..0d4a864 100644
> --- a/kernel/hrtimer.c
> +++ b/kernel/hrtimer.c
> @@ -1342,7 +1342,7 @@ void hrtimer_interrupt(struct clock_event_device *dev)
> raise_softirq(HRTIMER_SOFTIRQ);
> }
>
> -static void run_hrtimer_softirq(struct softirq_action *h)
> +static void run_hrtimer_softirq(void)
> {
> run_hrtimer_pending(&__get_cpu_var(hrtimer_bases));
> }
> diff --git a/kernel/rcuclassic.c b/kernel/rcuclassic.c
> index f6e01f3..f207525 100644
> --- a/kernel/rcuclassic.c
> +++ b/kernel/rcuclassic.c
> @@ -442,7 +442,7 @@ static void __rcu_process_callbacks(struct rcu_ctrlblk *rcp,
> rcu_do_batch(rdp);
> }
>
> -static void rcu_process_callbacks(struct softirq_action *unused)
> +static void rcu_process_callbacks(void)
> {
> __rcu_process_callbacks(&rcu_ctrlblk, &__get_cpu_var(rcu_data));
> __rcu_process_callbacks(&rcu_bh_ctrlblk, &__get_cpu_var(rcu_bh_data));
> diff --git a/kernel/rcupreempt.c b/kernel/rcupreempt.c
> index 9dd827d..81322aa 100644
> --- a/kernel/rcupreempt.c
> +++ b/kernel/rcupreempt.c
> @@ -948,7 +948,7 @@ void __devinit rcu_online_cpu(int cpu)
>
> #endif /* #else #ifdef CONFIG_HOTPLUG_CPU */
>
> -static void rcu_process_callbacks(struct softirq_action *unused)
> +static void rcu_process_callbacks(void)
> {
> unsigned long flags;
> struct rcu_head *next, *list;
> diff --git a/kernel/sched.c b/kernel/sched.c
> index 56ea3a2..3dd9137 100644
> --- a/kernel/sched.c
> +++ b/kernel/sched.c
> @@ -4078,7 +4078,7 @@ out:
> * In CONFIG_NO_HZ case, the idle load balance owner will do the
> * rebalancing for all the cpus for whom scheduler ticks are stopped.
> */
> -static void run_rebalance_domains(struct softirq_action *h)
> +static void run_rebalance_domains(void)
> {
> int this_cpu = smp_processor_id();
> struct rq *this_rq = cpu_rq(this_cpu);
> diff --git a/kernel/softirq.c b/kernel/softirq.c
> index 0592568..ff8d401 100644
> --- a/kernel/softirq.c
> +++ b/kernel/softirq.c
> @@ -231,7 +231,7 @@ restart:
>
> do {
> if (pending & 1) {
> - h->action(h);
> + h->action();
> rcu_bh_qsctr_inc(cpu);
> }
> h++;
> @@ -347,7 +347,7 @@ void raise_softirq(unsigned int nr)
> local_irq_restore(flags);
> }
>
> -void open_softirq(int nr, void (*action)(struct softirq_action *))
> +void open_softirq(int nr, void (*action)(void))
> {
> softirq_vec[nr].action = action;
> }
> @@ -392,7 +392,7 @@ void __tasklet_hi_schedule(struct tasklet_struct *t)
>
> EXPORT_SYMBOL(__tasklet_hi_schedule);
>
> -static void tasklet_action(struct softirq_action *a)
> +static void tasklet_action(void)
> {
> struct tasklet_struct *list;
>
> @@ -427,7 +427,7 @@ static void tasklet_action(struct softirq_action *a)
> }
> }
>
> -static void tasklet_hi_action(struct softirq_action *a)
> +static void tasklet_hi_action(void)
> {
> struct tasklet_struct *list;
>
> diff --git a/kernel/timer.c b/kernel/timer.c
> index b4da888..a7dae57 100644
> --- a/kernel/timer.c
> +++ b/kernel/timer.c
> @@ -1034,7 +1034,7 @@ static inline void calc_load(unsigned long ticks)
> /*
> * 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)
> {
> struct tvec_base *base = __get_cpu_var(tvec_bases);
>
> diff --git a/net/core/dev.c b/net/core/dev.c
> index 692d971..d2e029f 100644
> --- a/net/core/dev.c
> +++ b/net/core/dev.c
> @@ -1836,7 +1836,7 @@ static inline struct net_device *skb_bond(struct sk_buff *skb)
> }
>
>
> -static void net_tx_action(struct softirq_action *h)
> +static void net_tx_action(void)
> {
> struct softnet_data *sd = &__get_cpu_var(softnet_data);
>
> @@ -2159,7 +2159,7 @@ void __napi_schedule(struct napi_struct *n)
> EXPORT_SYMBOL(__napi_schedule);
>
>
> -static void net_rx_action(struct softirq_action *h)
> +static void net_rx_action(void)
> {
> struct list_head *list = &__get_cpu_var(softnet_data).poll_list;
> unsigned long start_time = jiffies;
> --
> 1.5.5.GIT
>
>
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2008-05-17 6:12 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-05-15 14:15 [PATCH] Remove argument from open_softirq which is always NULL Carlos R. Mafra
2008-05-15 15:22 ` Matthew Wilcox
2008-05-16 11:57 ` Ingo Molnar
2008-05-16 18:28 ` Paul E. McKenney
2008-05-16 19:52 ` Carlos R. Mafra
2008-05-17 4:24 ` [PATCH] Remove unused argument from functions invoked by open_softirq Carlos R. Mafra
2008-05-17 6:03 ` Paul E. McKenney
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox