Skip to contentSkip to conversation

ipmi: This patch decreases the IPMI message transaction time in Interrupt mode

PATCH In review [email protected] 1 participant 2 messages Oct 19, 2011 – Nov 25, 2011 IPMI

lore
Share & tools
lore
#0 lore raw

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
index 9397ab4..5d1e0ca 100644
@@ -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);
 }
 
#1 lore raw

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
index 9397ab4..5d1e0ca 100644
@@ -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);
 }