ipmi: Turn off all activity on an idle ipmi interface
authorCorey Minyard <cminyard@mvista.com>
Mon, 14 Apr 2014 14:46:54 +0000 (09:46 -0500)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 17 Apr 2014 19:23:07 +0000 (12:23 -0700)
commit89986496de141213206d49450ffdd36098d41209
tree8e58ac04ee38226de409ad2f6594c83b9e18f59a
parent0dfe6e7ed47feeb22f3cf8c7d8ac7e65bd4e87f5
ipmi: Turn off all activity on an idle ipmi interface

The IPMI driver would wake up periodically looking for events and
watchdog pretimeouts.  If there is nothing waiting for these events,
it's really kind of pointless to be checking for them.  So modify the
driver so the message handler can pass down if it needs the lower layer
to be waiting for these.  Modify the system interface lower layer to
turn off all timer and thread activity if the upper layer doesn't need
anything and it is not currently handling messages.  And modify the
message handler to not restart the timer if its timer is not needed.

The timers and kthread will still be enabled if:
 - the SI interface is handling a message.
 - a user has enabled watching for events.
 - the IPMI watchdog timer is in use (since it uses pretimeouts).
 - the message handler is waiting on a remote response.
 - a user has registered to receive commands.

This mostly affects interfaces without interrupts.  Interfaces with
interrupts already don't use CPU in the system interface when the
interface is idle.

Signed-off-by: Corey Minyard <cminyard@mvista.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
drivers/char/ipmi/ipmi_msghandler.c
drivers/char/ipmi/ipmi_si_intf.c
include/linux/ipmi.h
include/linux/ipmi_smi.h