softirq: Remove unused 'action' parameter from action callback
authorCaleb Sander Mateos <csander@purestorage.com>
Thu, 15 Aug 2024 17:15:40 +0000 (11:15 -0600)
committerThomas Gleixner <tglx@linutronix.de>
Tue, 20 Aug 2024 15:13:40 +0000 (17:13 +0200)
When soft interrupt actions are called, they are passed a pointer to the
struct softirq action which contains the action's function pointer.

This pointer isn't useful, as the action callback already knows what
function it is. And since each callback handles a specific soft interrupt,
the callback also knows which soft interrupt number is running.

No soft interrupt action callback actually uses this parameter, so remove
it from the function pointer signature. This clarifies that soft interrupt
actions are global routines and makes it slightly cheaper to call them.

Signed-off-by: Caleb Sander Mateos <csander@purestorage.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Jens Axboe <axboe@kernel.dk>
Link: https://lore.kernel.org/all/20240815171549.3260003-1-csander@purestorage.com
block/blk-mq.c
include/linux/interrupt.h
kernel/rcu/tiny.c
kernel/rcu/tree.c
kernel/sched/fair.c
kernel/softirq.c
kernel/time/hrtimer.c
kernel/time/timer.c
lib/irq_poll.c
net/core/dev.c

index e3c3c0c21b55367b5710fcd9e02f325d4169bca6..aa28157b1aafcb1dfe4169b6dda8d224a03ebd09 100644 (file)
@@ -1128,7 +1128,7 @@ static void blk_complete_reqs(struct llist_head *list)
                rq->q->mq_ops->complete(rq);
 }
 
-static __latent_entropy void blk_done_softirq(struct softirq_action *h)
+static __latent_entropy void blk_done_softirq(void)
 {
        blk_complete_reqs(this_cpu_ptr(&blk_cpu_done));
 }
index 3f30c88e0b4c59aa238b709a87f43cbe6157092c..694de61e0b383633bbd508f6fca6248fc57ab789 100644 (file)
@@ -594,7 +594,7 @@ extern const char * const softirq_to_name[NR_SOFTIRQS];
 
 struct softirq_action
 {
-       void    (*action)(struct softirq_action *);
+       void    (*action)(void);
 };
 
 asmlinkage void do_softirq(void);
@@ -609,7 +609,7 @@ static inline void do_softirq_post_smp_call_flush(unsigned int unused)
 }
 #endif
 
-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);
 extern void __raise_softirq_irqoff(unsigned int nr);
 
index 4402d6f5f85778b46e332485b1a80628e100cf46..b3b3ce34df6310f7bddba40b2be1bdf6c9f00232 100644 (file)
@@ -105,7 +105,7 @@ static inline bool rcu_reclaim_tiny(struct rcu_head *head)
 }
 
 /* Invoke the RCU callbacks whose grace period has elapsed.  */
-static __latent_entropy void rcu_process_callbacks(struct softirq_action *unused)
+static __latent_entropy void rcu_process_callbacks(void)
 {
        struct rcu_head *next, *list;
        unsigned long flags;
index e641cc681901a5e5c7a7e1791a836ba0db89d7d3..93bd665637c0319ae8f8bd0c95d7060d0cb5e861 100644 (file)
@@ -2855,7 +2855,7 @@ static __latent_entropy void rcu_core(void)
                queue_work_on(rdp->cpu, rcu_gp_wq, &rdp->strict_work);
 }
 
-static void rcu_core_si(struct softirq_action *h)
+static void rcu_core_si(void)
 {
        rcu_core();
 }
index 9057584ec06de948c0032f48d382354623cf1c6a..8dc9385f6da4d0ca86c11c4569fad31efcbee771 100644 (file)
@@ -12483,7 +12483,7 @@ out:
  * - indirectly from a remote scheduler_tick() for NOHZ idle balancing
  *   through the SMP cross-call nohz_csd_func()
  */
-static __latent_entropy void sched_balance_softirq(struct softirq_action *h)
+static __latent_entropy void sched_balance_softirq(void)
 {
        struct rq *this_rq = this_rq();
        enum cpu_idle_type idle = this_rq->idle_balance;
index 02582017759a2ce3bfb42faf4be904a7b432595b..d082e7840f88027a0972e301ec2c455dd3bc662f 100644 (file)
@@ -551,7 +551,7 @@ restart:
                kstat_incr_softirqs_this_cpu(vec_nr);
 
                trace_softirq_entry(vec_nr);
-               h->action(h);
+               h->action();
                trace_softirq_exit(vec_nr);
                if (unlikely(prev_count != preempt_count())) {
                        pr_err("huh, entered softirq %u %s %p with preempt_count %08x, exited with %08x?\n",
@@ -700,7 +700,7 @@ void __raise_softirq_irqoff(unsigned int nr)
        or_softirq_pending(1UL << nr);
 }
 
-void open_softirq(int nr, void (*action)(struct softirq_action *))
+void open_softirq(int nr, void (*action)(void))
 {
        softirq_vec[nr].action = action;
 }
@@ -760,8 +760,7 @@ static bool tasklet_clear_sched(struct tasklet_struct *t)
        return false;
 }
 
-static void tasklet_action_common(struct softirq_action *a,
-                                 struct tasklet_head *tl_head,
+static void tasklet_action_common(struct tasklet_head *tl_head,
                                  unsigned int softirq_nr)
 {
        struct tasklet_struct *list;
@@ -805,16 +804,16 @@ static void tasklet_action_common(struct softirq_action *a,
        }
 }
 
-static __latent_entropy void tasklet_action(struct softirq_action *a)
+static __latent_entropy void tasklet_action(void)
 {
        workqueue_softirq_action(false);
-       tasklet_action_common(a, this_cpu_ptr(&tasklet_vec), TASKLET_SOFTIRQ);
+       tasklet_action_common(this_cpu_ptr(&tasklet_vec), TASKLET_SOFTIRQ);
 }
 
-static __latent_entropy void tasklet_hi_action(struct softirq_action *a)
+static __latent_entropy void tasklet_hi_action(void)
 {
        workqueue_softirq_action(true);
-       tasklet_action_common(a, this_cpu_ptr(&tasklet_hi_vec), HI_SOFTIRQ);
+       tasklet_action_common(this_cpu_ptr(&tasklet_hi_vec), HI_SOFTIRQ);
 }
 
 void tasklet_setup(struct tasklet_struct *t,
index b8ee320208d411743555947746a59e03a3fc027e..836157e09e25d835e2e0f9cb1a9a21b0a74ebc57 100644 (file)
@@ -1757,7 +1757,7 @@ static void __hrtimer_run_queues(struct hrtimer_cpu_base *cpu_base, ktime_t now,
        }
 }
 
-static __latent_entropy void hrtimer_run_softirq(struct softirq_action *h)
+static __latent_entropy void hrtimer_run_softirq(void)
 {
        struct hrtimer_cpu_base *cpu_base = this_cpu_ptr(&hrtimer_bases);
        unsigned long flags;
index 64b0d8a0aa0f100270bc6824a6ede4b59fa6d537..760bbeb1f331f5f4d2f30c5d6b4fcdbc2044073b 100644 (file)
@@ -2440,7 +2440,7 @@ static void run_timer_base(int index)
 /*
  * This function runs timers and the timer-tq in bottom half context.
  */
-static __latent_entropy void run_timer_softirq(struct softirq_action *h)
+static __latent_entropy void run_timer_softirq(void)
 {
        run_timer_base(BASE_LOCAL);
        if (IS_ENABLED(CONFIG_NO_HZ_COMMON)) {
index 2d5329a421058f959ea565a1ea2fed0104aa8968..08b242bbdbdf27775fbce67b01b561228ffa1746 100644 (file)
@@ -75,7 +75,7 @@ void irq_poll_complete(struct irq_poll *iop)
 }
 EXPORT_SYMBOL(irq_poll_complete);
 
-static void __latent_entropy irq_poll_softirq(struct softirq_action *h)
+static void __latent_entropy irq_poll_softirq(void)
 {
        struct list_head *list = this_cpu_ptr(&blk_cpu_iopoll);
        int rearm = 0, budget = irq_poll_budget;
index 6ea1d20676fbe9da53c1b7491fc87202bb100649..e24a3bcb496de7e35460cabe63e2112c5227c3a8 100644 (file)
@@ -5247,7 +5247,7 @@ int netif_rx(struct sk_buff *skb)
 }
 EXPORT_SYMBOL(netif_rx);
 
-static __latent_entropy void net_tx_action(struct softirq_action *h)
+static __latent_entropy void net_tx_action(void)
 {
        struct softnet_data *sd = this_cpu_ptr(&softnet_data);
 
@@ -6920,7 +6920,7 @@ static int napi_threaded_poll(void *data)
        return 0;
 }
 
-static __latent_entropy void net_rx_action(struct softirq_action *h)
+static __latent_entropy void net_rx_action(void)
 {
        struct softnet_data *sd = this_cpu_ptr(&softnet_data);
        unsigned long time_limit = jiffies +