浏览代码

ipmi_ssif: Fix logic around alert handling

There was a mistake in the logic, if an alert came in very quickly
it would hang the driver.

Signed-off-by: Corey Minyard <cminyard@mvista.com>
Corey Minyard 9 年之前
父节点
当前提交
21c8f9154d
共有 1 个文件被更改,包括 4 次插入9 次删除
  1. 4 9
      drivers/char/ipmi/ipmi_ssif.c

+ 4 - 9
drivers/char/ipmi/ipmi_ssif.c

@@ -920,23 +920,18 @@ static void msg_written_handler(struct ssif_info *ssif_info, int result,
 			msg_done_handler(ssif_info, -EIO, NULL, 0);
 			msg_done_handler(ssif_info, -EIO, NULL, 0);
 		}
 		}
 	} else {
 	} else {
+		/* Ready to request the result. */
 		unsigned long oflags, *flags;
 		unsigned long oflags, *flags;
-		bool got_alert;
 
 
 		ssif_inc_stat(ssif_info, sent_messages);
 		ssif_inc_stat(ssif_info, sent_messages);
 		ssif_inc_stat(ssif_info, sent_messages_parts);
 		ssif_inc_stat(ssif_info, sent_messages_parts);
 
 
 		flags = ipmi_ssif_lock_cond(ssif_info, &oflags);
 		flags = ipmi_ssif_lock_cond(ssif_info, &oflags);
-		got_alert = ssif_info->got_alert;
-		if (got_alert) {
+		if (ssif_info->got_alert) {
+			/* The result is already ready, just start it. */
 			ssif_info->got_alert = false;
 			ssif_info->got_alert = false;
-			ssif_info->waiting_alert = false;
-		}
-
-		if (got_alert) {
 			ipmi_ssif_unlock_cond(ssif_info, flags);
 			ipmi_ssif_unlock_cond(ssif_info, flags);
-			/* The alert already happened, try now. */
-			retry_timeout((unsigned long) ssif_info);
+			start_get(ssif_info);
 		} else {
 		} else {
 			/* Wait a jiffie then request the next message */
 			/* Wait a jiffie then request the next message */
 			ssif_info->waiting_alert = true;
 			ssif_info->waiting_alert = true;