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>
This commit is contained in:
parent
9dffdb38d8
commit
21c8f9154d
1 changed files with 4 additions and 9 deletions
|
@ -920,23 +920,18 @@ static void msg_written_handler(struct ssif_info *ssif_info, int result,
|
|||
msg_done_handler(ssif_info, -EIO, NULL, 0);
|
||||
}
|
||||
} else {
|
||||
/* Ready to request the result. */
|
||||
unsigned long oflags, *flags;
|
||||
bool got_alert;
|
||||
|
||||
ssif_inc_stat(ssif_info, sent_messages);
|
||||
ssif_inc_stat(ssif_info, sent_messages_parts);
|
||||
|
||||
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->waiting_alert = false;
|
||||
}
|
||||
|
||||
if (got_alert) {
|
||||
ipmi_ssif_unlock_cond(ssif_info, flags);
|
||||
/* The alert already happened, try now. */
|
||||
retry_timeout((unsigned long) ssif_info);
|
||||
start_get(ssif_info);
|
||||
} else {
|
||||
/* Wait a jiffie then request the next message */
|
||||
ssif_info->waiting_alert = true;
|
||||
|
|
Loading…
Reference in a new issue