From 37307c93e956e5d0fbc17ee3cc15c69204c3f0bf Mon Sep 17 00:00:00 2001 From: Dmitry Bazhenov Date: Wed, 4 Nov 2015 11:24:21 +0500 Subject: [PATCH] ID:401 - Fixed 30 second delay when activating SOL on 'dumb' Intel MACs. Boards equipped with 'dumb' Intel MAC can do only SOL. IPMITool performs several autodetection requests before initiating SOL, which are not recognized by the boards. With each request retried 5 times it takes about 30 seconds to establish SOL. This patch resolves the problem. --- lib/ipmi_main.c | 23 +++++++++++++---------- src/plugins/lanplus/lanplus.c | 12 ++++++++---- 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/lib/ipmi_main.c b/lib/ipmi_main.c index 1f019ad..a752b59 100644 --- a/lib/ipmi_main.c +++ b/lib/ipmi_main.c @@ -952,20 +952,23 @@ ipmi_main(int argc, char ** argv, goto out_free; } } - /* - * Attempt picmg/vita discovery of the actual interface address unless - * the users specified an address. - * Address specification always overrides discovery - */ - if (picmg_discover(ipmi_main_intf)) { - ipmi_main_intf->picmg_avail = 1; - } else if (vita_discover(ipmi_main_intf)) { - ipmi_main_intf->vita_avail = 1; + + if (!ipmi_oem_active(ipmi_main_intf, "i82571spt")) { + /* + * Attempt picmg/vita discovery of the actual interface + * address, unless the users specified an address. + * Address specification always overrides discovery + */ + if (picmg_discover(ipmi_main_intf)) { + ipmi_main_intf->picmg_avail = 1; + } else if (vita_discover(ipmi_main_intf)) { + ipmi_main_intf->vita_avail = 1; + } } if (arg_addr) { addr = arg_addr; - } else { + } else if (!ipmi_oem_active(ipmi_main_intf, "i82571spt")) { lprintf(LOG_DEBUG, "Acquire IPMB address"); addr = ipmi_acquire_ipmb_address(ipmi_main_intf); lprintf(LOG_INFO, "Discovered IPMB address 0x%x", addr); diff --git a/src/plugins/lanplus/lanplus.c b/src/plugins/lanplus/lanplus.c index 490d3f5..8776212 100644 --- a/src/plugins/lanplus/lanplus.c +++ b/src/plugins/lanplus/lanplus.c @@ -3471,13 +3471,17 @@ ipmi_lanplus_open(struct ipmi_intf * intf) if (rc < 0) { goto fail; } - } - intf->manufacturer_id = ipmi_get_oem(intf); - /* automatically detect interface request and response sizes */ - hpm2_detect_max_payload_size(intf); + /* automatically detect interface request and response sizes */ + hpm2_detect_max_payload_size(intf); + } bridgePossible = 1; + + if (!ipmi_oem_active(intf, "i82571spt")) { + intf->manufacturer_id = ipmi_get_oem(intf); + } + return intf->fd; fail: