ipmi: Factor out message flushing procedure
authorHidehiro Kawai <hidehiro.kawai.ez@hitachi.com>
Mon, 27 Jul 2015 05:55:16 +0000 (14:55 +0900)
committerCorey Minyard <cminyard@mvista.com>
Thu, 3 Sep 2015 20:02:28 +0000 (15:02 -0500)
Factor out message flushing procedure which is used in run-to-completion
mode.  This patch doesn't change the logic.

Signed-off-by: Hidehiro Kawai <hidehiro.kawai.ez@hitachi.com>
Signed-off-by: Corey Minyard <cminyard@mvista.com>
drivers/char/ipmi/ipmi_si_intf.c

index 4a4a13dc98b3ae7083b409878bf7dde5093e0516..5bd6d5b974cd7807c97a97f17ad78e10321ee8ed 100644 (file)
@@ -924,11 +924,25 @@ static void check_start_timer_thread(struct smi_info *smi_info)
        }
 }
 
+static void flush_messages(struct smi_info *smi_info)
+{
+       enum si_sm_result result;
+
+       /*
+        * Currently, this function is called only in run-to-completion
+        * mode.  This means we are single-threaded, no need for locks.
+        */
+       result = smi_event_handler(smi_info, 0);
+       while (result != SI_SM_IDLE) {
+               udelay(SI_SHORT_TIMEOUT_USEC);
+               result = smi_event_handler(smi_info, SI_SHORT_TIMEOUT_USEC);
+       }
+}
+
 static void sender(void                *send_info,
                   struct ipmi_smi_msg *msg)
 {
        struct smi_info   *smi_info = send_info;
-       enum si_sm_result result;
        unsigned long     flags;
 
        debug_timestamp("Enqueue");
@@ -940,17 +954,7 @@ static void sender(void                *send_info,
                 */
                smi_info->waiting_msg = msg;
 
-               /*
-                * Run to completion means we are single-threaded, no
-                * need for locks.
-                */
-
-               result = smi_event_handler(smi_info, 0);
-               while (result != SI_SM_IDLE) {
-                       udelay(SI_SHORT_TIMEOUT_USEC);
-                       result = smi_event_handler(smi_info,
-                                                  SI_SHORT_TIMEOUT_USEC);
-               }
+               flush_messages(smi_info);
                return;
        }
 
@@ -971,17 +975,10 @@ static void sender(void                *send_info,
 static void set_run_to_completion(void *send_info, bool i_run_to_completion)
 {
        struct smi_info   *smi_info = send_info;
-       enum si_sm_result result;
 
        smi_info->run_to_completion = i_run_to_completion;
-       if (i_run_to_completion) {
-               result = smi_event_handler(smi_info, 0);
-               while (result != SI_SM_IDLE) {
-                       udelay(SI_SHORT_TIMEOUT_USEC);
-                       result = smi_event_handler(smi_info,
-                                                  SI_SHORT_TIMEOUT_USEC);
-               }
-       }
+       if (i_run_to_completion)
+               flush_messages(smi_info);
 }
 
 /*