aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/char
diff options
context:
space:
mode:
authorCorey Minyard <cminyard@mvista.com>2016-01-06 10:32:06 -0500
committerCorey Minyard <cminyard@mvista.com>2016-03-18 08:01:23 -0400
commit21c8f9154d9b3d2d84b619c2afdb6965f9d57975 (patch)
treedeab024c41de970b95229f5d552a2c456076fffb /drivers/char
parent9dffdb38d864ae89e16ff7b3a09451270736e35b (diff)
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>
Diffstat (limited to 'drivers/char')
-rw-r--r--drivers/char/ipmi/ipmi_ssif.c13
1 files changed, 4 insertions, 9 deletions
diff --git a/drivers/char/ipmi/ipmi_ssif.c b/drivers/char/ipmi/ipmi_ssif.c
index 5f1c3d08ba65..8b3be8b92573 100644
--- a/drivers/char/ipmi/ipmi_ssif.c
+++ b/drivers/char/ipmi/ipmi_ssif.c
@@ -920,23 +920,18 @@ static void msg_written_handler(struct ssif_info *ssif_info, int result,
920 msg_done_handler(ssif_info, -EIO, NULL, 0); 920 msg_done_handler(ssif_info, -EIO, NULL, 0);
921 } 921 }
922 } else { 922 } else {
923 /* Ready to request the result. */
923 unsigned long oflags, *flags; 924 unsigned long oflags, *flags;
924 bool got_alert;
925 925
926 ssif_inc_stat(ssif_info, sent_messages); 926 ssif_inc_stat(ssif_info, sent_messages);
927 ssif_inc_stat(ssif_info, sent_messages_parts); 927 ssif_inc_stat(ssif_info, sent_messages_parts);
928 928
929 flags = ipmi_ssif_lock_cond(ssif_info, &oflags); 929 flags = ipmi_ssif_lock_cond(ssif_info, &oflags);
930 got_alert = ssif_info->got_alert; 930 if (ssif_info->got_alert) {
931 if (got_alert) { 931 /* The result is already ready, just start it. */
932 ssif_info->got_alert = false; 932 ssif_info->got_alert = false;
933 ssif_info->waiting_alert = false;
934 }
935
936 if (got_alert) {
937 ipmi_ssif_unlock_cond(ssif_info, flags); 933 ipmi_ssif_unlock_cond(ssif_info, flags);
938 /* The alert already happened, try now. */ 934 start_get(ssif_info);
939 retry_timeout((unsigned long) ssif_info);
940 } else { 935 } else {
941 /* Wait a jiffie then request the next message */ 936 /* Wait a jiffie then request the next message */
942 ssif_info->waiting_alert = true; 937 ssif_info->waiting_alert = true;