diff options
author | Corey Minyard <cminyard@mvista.com> | 2018-10-23 11:29:02 -0500 |
---|---|---|
committer | Corey Minyard <cminyard@mvista.com> | 2019-02-09 19:48:42 -0600 |
commit | c65ea996595005be470fbfa16711deba414fd33b (patch) | |
tree | 55b50d2d008afe4411e7085bf48f1f7e9e032f11 /drivers/char/ipmi/ipmi_si_intf.c | |
parent | a1466ec5b671651b848df17fc9233ecbb7d35f9f (diff) | |
download | linux-c65ea996595005be470fbfa16711deba414fd33b.tar.gz |
ipmi: Fix how the lower layers are told to watch for messages
The IPMI driver has a mechanism to tell the lower layers it needs
to watch for messages, commands, and watchdogs (so it doesn't
needlessly poll). However, it needed some extensions, it needed
a way to tell what is being waited for so it could set the timeout
appropriately.
The update to the lower layer was also being done once a second
at best because it was done in the main timeout handler. However,
if a command is sent and a response message is coming back,
it needed to be started immediately. So modify the code to
update immediately if it needs to be enabled. Disable is still
lazy.
Signed-off-by: Corey Minyard <cminyard@mvista.com>
Tested-by: Kamlakant Patel <kamlakant.patel@cavium.com>
Diffstat (limited to 'drivers/char/ipmi/ipmi_si_intf.c')
-rw-r--r-- | drivers/char/ipmi/ipmi_si_intf.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/char/ipmi/ipmi_si_intf.c b/drivers/char/ipmi/ipmi_si_intf.c index f1b9fda6b9df..c81c84a723b6 100644 --- a/drivers/char/ipmi/ipmi_si_intf.c +++ b/drivers/char/ipmi/ipmi_si_intf.c @@ -1060,10 +1060,13 @@ static void request_events(void *send_info) atomic_set(&smi_info->req_events, 1); } -static void set_need_watch(void *send_info, bool enable) +static void set_need_watch(void *send_info, unsigned int watch_mask) { struct smi_info *smi_info = send_info; unsigned long flags; + int enable; + + enable = !!(watch_mask & ~IPMI_WATCH_MASK_INTERNAL); atomic_set(&smi_info->need_watch, enable); spin_lock_irqsave(&smi_info->si_lock, flags); |