ipmi: This patch decreases the IPMI message transaction time in Interrupt mode
PATCH 1/1 ipmi: This patch decreases the IPMI message transaction time in Interrupt mode
Subject: [PATCH] This patch decreases the IPMI message transaction time in Interrupt mode
---------------------------------------------------------------------------------------------
In function sender(), start_next_msg(smi_info) is when the driver is ready to send the data to BMC, but counts on the timeout to start the transaction.In interrupt mode what I observed is that driver simply wastes time, counting on the timer to trigger the transaction. What I have done here is to cut the wait,and trigger the call to the handler.
This patch considerably decreases the IPMI transaction time (cuts off ~9ms for a single ipmitool transaction).
---
drivers/char/ipmi/ipmi_si_intf.c +3 -1
@@ -932,8 +932,10 @@ static void sender(void *send_info,spin_unlock_irqrestore (&smi_info->msg_lock, flags);spin_lock_irqsave (&smi_info->si_lock, flags); -if (smi_info->si_state ==SI_NORMAL && smi_info->curr_msg ==NULL ) +if (smi_info->si_state ==SI_NORMAL && smi_info->curr_msg ==NULL ) {start_next_msg (smi_info); +mod_timer (&smi_info->si_timer, jiffies +1 ); + }spin_unlock_irqrestore (&smi_info->si_lock, flags); }
On 10/19/2011 11:01 AM, Gowda, Srinivas G wrote:
Subject: [PATCH] This patch decreases the IPMI message transaction time in Interrupt mode
---------------------------------------------------------------------------------------------
What I have done this time is to directly call the handler
This patch considerably decreases the IPMI transaction time (cuts off ~9ms for a single ipmitool transaction).
---
drivers/char/ipmi/ipmi_si_intf.c +3 -1
@@ -932,8 +932,10 @@ static void sender(void *send_info,spin_unlock_irqrestore (&smi_info->msg_lock, flags);spin_lock_irqsave (&smi_info->si_lock, flags); -if (smi_info->si_state ==SI_NORMAL && smi_info->curr_msg ==NULL ) +if (smi_info->si_state ==SI_NORMAL && smi_info->curr_msg ==NULL ) {start_next_msg (smi_info); +smi_event_handler (smi_info,0 ); + }spin_unlock_irqrestore (&smi_info->si_lock, flags); }