raise_softirq_irqoff(BLOCK_SOFTIRQ);
 }
 
-#ifdef CONFIG_SMP
 static void trigger_softirq(void *data)
 {
        blk_mq_trigger_softirq(data);
 }
 
-/*
- * Setup and invoke a run of 'trigger_softirq' on the given cpu.
- */
-static int raise_blk_irq(int cpu, struct request *rq)
-{
-       if (cpu_online(cpu)) {
-               call_single_data_t *data = &rq->csd;
-
-               data->func = trigger_softirq;
-               data->info = rq;
-               data->flags = 0;
-
-               smp_call_function_single_async(cpu, data);
-               return 0;
-       }
-
-       return 1;
-}
-#else /* CONFIG_SMP */
-static int raise_blk_irq(int cpu, struct request *rq)
-{
-       return 1;
-}
-#endif
-
 static int blk_softirq_cpu_dead(unsigned int cpu)
 {
        /*
         * support multiple interrupts, so current CPU is unique actually. This
         * avoids IPI sending from current CPU to the first CPU of a group.
         */
-       if (ccpu == cpu || shared) {
-do_local:
+       if (IS_ENABLED(CONFIG_SMP) &&
+           ccpu != cpu && !shared && cpu_online(ccpu)) {
+               call_single_data_t *data = &req->csd;
+
+               data->func = trigger_softirq;
+               data->info = req;
+               data->flags = 0;
+               smp_call_function_single_async(cpu, data);
+       } else {
                blk_mq_trigger_softirq(req);
-       } else if (raise_blk_irq(ccpu, req))
-               goto do_local;
+       }
 
        local_irq_restore(flags);
 }