0, 1); /* Don't retry, and don't wait. */
        if (rv)
                atomic_sub(2, &panic_done_count);
+       else if (intf->handlers->flush_messages)
+               intf->handlers->flush_messages(intf->send_info);
+
        while (atomic_read(&panic_done_count) != 0)
                ipmi_poll(intf);
 }
 
        }
 }
 
-static void flush_messages(struct smi_info *smi_info)
+static void flush_messages(void *send_info)
 {
+       struct smi_info *smi_info = send_info;
        enum si_sm_result result;
 
        /*
 
        if (smi_info->run_to_completion) {
                /*
-                * If we are running to completion, start it and run
-                * transactions until everything is clear.
+                * If we are running to completion, start it.  Upper
+                * layer will call flush_messages to clear it out.
                 */
                smi_info->waiting_msg = msg;
-
-               flush_messages(smi_info);
                return;
        }
 
        .set_need_watch         = set_need_watch,
        .set_maintenance_mode   = set_maintenance_mode,
        .set_run_to_completion  = set_run_to_completion,
+       .flush_messages         = flush_messages,
        .poll                   = poll,
 };
 
 
           implement it. */
        void (*set_need_watch)(void *send_info, bool enable);
 
+       /*
+        * Called when flushing all pending messages.
+        */
+       void (*flush_messages)(void *send_info);
+
        /* Called when the interface should go into "run to
           completion" mode.  If this call sets the value to true, the
           interface should make sure that all messages are flushed