Commit 81410c66 authored by Scott Breyer's avatar Scott Breyer

Update to latest from build 10.4.0.0.64 (FF 10.4.0.0.59)

parent 8e3a2172
......@@ -346,10 +346,6 @@ sub Build_ifcfg($$$)
DebugPrint("cmd '$SysCmd'\n");
system $SysCmd;
$SysCmd = "echo \"NM_CONTROLLED='no'\" >> $target";
DebugPrint("cmd '$SysCmd'\n");
system $SysCmd;
# SLES11 and newer have IPOIB_MODE option in ifcfg
$SysCmd = "echo \"IPOIB_MODE='connected'\" >> $target";
DebugPrint("cmd '$SysCmd'\n");
......@@ -397,10 +393,6 @@ sub Build_ifcfg($$$)
DebugPrint("cmd '$SysCmd'\n");
system $SysCmd;
$SysCmd = "echo NM_CONTROLLED=no >> $target";
DebugPrint("cmd '$SysCmd'\n");
system $SysCmd;
$SysCmd = "echo CONNECTED_MODE=yes >> $target";
DebugPrint("cmd '$SysCmd'\n");
system $SysCmd;
......
......@@ -28,6 +28,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
** END_ICS_COPYRIGHT4 ****************************************/
#include <pthread.h>
#include <signal.h>
#include <unistd.h>
/* work around conflicting names */
#include <infiniband/mad.h>
......@@ -887,6 +889,11 @@ void dsap_port_event(uint64 src_guid, uint64 src_subnet, uint64 dest_guid,
EventTrigger(&dsap_scanner_event);
}
static void kill_proc_handler(int signo){
if (signo == SIGTERM)
dsap_scanner_cleanup();
}
#define SCAN_DELAY 5
static void * dsap_scanner(void* dummy)
......@@ -902,6 +909,8 @@ static void * dsap_scanner(void* dummy)
uint64 since_scan;
acm_log(2, "\n");
if(signal(SIGTERM, kill_proc_handler) == SIG_ERR)
acm_log(2, "Signal handler Init failed \n");
timeout_sec = 0;
......
......@@ -390,7 +390,7 @@ extern uint32_t cs_log_masks[VIEO_LAST_MOD_ID+1];
#define IB_FATAL_ERROR_NODUMP(p1) do { \
smCsmLogMessage(CSM_SEV_NOTICE, CSM_COND_SM_SHUTDOWN, NULL, NULL, p1); \
vs_log_output(VS_LOG_FATAL, LOCAL_MOD_ID, __func__, NULL, "%s", p1); \
exit(1); \
exit(2); \
} while (0)
#define IB_FATAL_ERROR(p1) do { \
smCsmLogMessage(CSM_SEV_NOTICE, CSM_COND_SM_SHUTDOWN, NULL, NULL, p1); \
......@@ -1180,4 +1180,25 @@ vs_log_output_memory(uint32_t sev, /* severity */
void vs_fatal_error(uint8_t *string);
#endif
//
// IB_*_NOREPEAT(lastMst, msgNum, [argument list])
//
// Prevent the same error from coming out over and over by tracking the
// previous error that was logged. Functions using these macros should locally
// declare an (optionally static) unsigned variable to track the last message
// sent and clear that variable before returning successfully. In addition,
// each invocation of IB_WARN_NOREPEAT and IB_ERROR_NOREPEAT in that function should
// be assigned a unique msgNum.
#define IB_WARN_NOREPEAT(lastMsg, msgNum, fmt...) \
if (lastMsg != msgNum) { \
cs_log(VS_LOG_WARN,__func__, ## fmt); \
lastMsg = msgNum; \
}
#define IB_ERROR_NOREPEAT(lastMsg, msgNum, fmt...) \
if (lastMsg != msgNum) { \
cs_log(VS_LOG_ERROR,__func__, ## fmt); \
lastMsg = msgNum; \
}
#endif /*__VIEO_VS_LOG__*/
......@@ -433,9 +433,6 @@ typedef struct _VFConfig {
uint8_t qos_enable;
uint8_t base_sl;
uint8_t flowControlDisable;
#ifdef CONFIG_INCLUDE_DOR
uint8_t updown_only;
#endif
uint8_t percent_bandwidth;
// uint8_t absolute_bandwidth;
uint8_t priority;
......@@ -574,7 +571,6 @@ typedef struct _VFabric {
uint8_t qos_enable; // defaults to 0 if undefined
uint8_t base_sl; // base SL assigned to VF - 0xff if undefined
uint8_t base_sc; // base SC assigned to VF
uint8_t updown_only; //
uint8_t mcast_isolate; // Used when multicast must be
uint8_t mcast_sl; // independent of other
......@@ -800,6 +796,7 @@ typedef struct _SmHypercubeRouting_t {
#define MAX_DOR_DIMENSIONS 20
#define DEFAULT_DOR_PORT_PAIR_WARN_THRESHOLD 5
#define DEFAULT_UPDN_MC_SAME_SPANNING_TREE 1
#define DEFAULT_ESCAPE_VLS_IN_USE 1
typedef enum {
DOR_MESH,
......@@ -814,22 +811,21 @@ typedef struct _SmPortPair {
typedef struct _SmDimension {
uint8_t toroidal;
uint8_t length;
uint8_t portCount;
uint8_t created;
SmPortPair_t portPair[MAX_SWITCH_PORTS];
} SmDimension_t;
typedef struct _SmDorRouting {
uint8_t debug;
uint8_t dimensionCount;
uint8_t numToroidal;
uint8_t updownOnly; // setup by SM
SmDimension_t dimension[MAX_DOR_DIMENSIONS];
uint8_t debug;
uint32_t warn_threshold;
uint32_t updn_mc_same_spanning_tree;
uint8_t routingSCs;
uint8_t useUpDownOnDisruption;
uint32_t warn_threshold;
SmDimension_t dimension[MAX_DOR_DIMENSIONS];
DorTop_t topology;
uint8_t escapeVLs;
} SmDorRouting_t;
#endif
......@@ -1003,6 +999,7 @@ typedef struct _SMXmlConfig {
uint32_t sm_debug_perf;
uint32_t sa_debug_perf;
uint32_t sm_debug_vf;
uint32_t sm_debug_routing;
uint32_t sm_debug_lid_assign;
uint32_t trap_log_suppress_trigger_interval;
uint32_t debug_jm;
......
......@@ -300,6 +300,12 @@ extern Status_t vs_thread_exit (Thread_t * handle);
*/
extern void vs_thread_sleep (uint64_t sleep_time);
/*
** Wait for the specified thread to exit.
*/
extern Status_t
vs_thread_join (Thread_t *handle, void **value_ptr);
/*=== Threads ===*/
/*=== Pool Services ===*/
......
......@@ -1722,6 +1722,7 @@ void smInitConfig(SMXmlConfig_t *smp, SMDPLXmlConfig_t *dplp, SMMcastConfig_t *m
DEFAULT_AND_CKSUM_U32(smp->sm_debug_perf, 0, CKSUM_OVERALL_DISRUPT);
DEFAULT_AND_CKSUM_U32(smp->sa_debug_perf, 0, CKSUM_OVERALL_DISRUPT);
DEFAULT_AND_CKSUM_U32(smp->sm_debug_vf, 0, CKSUM_OVERALL_DISRUPT);
DEFAULT_AND_CKSUM_U32(smp->sm_debug_routing, 0, CKSUM_OVERALL_DISRUPT);
DEFAULT_AND_CKSUM_U32(smp->sm_debug_lid_assign, 0, CKSUM_OVERALL_DISRUPT);
DEFAULT_AND_CKSUM_U32(smp->debug_jm, 0, CKSUM_OVERALL_DISRUPT);
DEFAULT_AND_CKSUM_U32(smp->sa_rmpp_checksum, 0, CKSUM_OVERALL_DISRUPT);
......@@ -1832,13 +1833,11 @@ void smInitConfig(SMXmlConfig_t *smp, SMDPLXmlConfig_t *dplp, SMMcastConfig_t *m
// If using dor, checksum the smDorRouting config.
CKSUM_DATA(smp->smDorRouting.dimensionCount, CKSUM_OVERALL_DISRUPT_CONSIST);
CKSUM_DATA(smp->smDorRouting.numToroidal, CKSUM_OVERALL_DISRUPT_CONSIST);
//CKSUM_DATA(smp->smDorRouting.updownOnly, CKSUM_OVERALL_DISRUPT_CONSIST); // Set by SM
CKSUM_DATA(smp->smDorRouting.dimension, CKSUM_OVERALL_DISRUPT_CONSIST);
CKSUM_DATA(smp->smDorRouting.escapeVLs, CKSUM_OVERALL_DISRUPT_CONSIST);
CKSUM_DATA(smp->smDorRouting.debug, CKSUM_OVERALL_DISRUPT);
CKSUM_DATA(smp->smDorRouting.warn_threshold, CKSUM_OVERALL_DISRUPT);
CKSUM_DATA(smp->smDorRouting.updn_mc_same_spanning_tree, CKSUM_OVERALL_DISRUPT_CONSIST);
CKSUM_DATA(smp->smDorRouting.routingSCs, CKSUM_OVERALL_DISRUPT_CONSIST);
CKSUM_DATA(smp->smDorRouting.useUpDownOnDisruption, CKSUM_OVERALL_DISRUPT_CONSIST);
CKSUM_DATA(smp->smDorRouting.topology, CKSUM_OVERALL_DISRUPT_CONSIST);
}
#endif
......@@ -2070,6 +2069,7 @@ void smShowConfig(SMXmlConfig_t *smp, SMDPLXmlConfig_t *dplp, SMMcastConfig_t *m
printf("XML - sm_debug_perf %u\n", (unsigned int)smp->sm_debug_perf);
printf("XML - sa_debug_perf %u\n", (unsigned int)smp->sa_debug_perf);
printf("XML - sm_debug_vf %u\n", (unsigned int)smp->sm_debug_vf);
printf("XML - sm_debug_routing %u\n", (unsigned int)smp->sm_debug_routing);
printf("XML - sm_debug_lid_assign %u\n", (unsigned int)smp->sm_debug_lid_assign);
printf("XML - debug_jm %u\n", (unsigned int)smp->debug_jm);
printf("XML - sa_rmpp_checksum %u\n", (unsigned int)smp->sa_rmpp_checksum);
......@@ -3199,7 +3199,6 @@ void checksumOneVirtualFabricsConfig(VF_t *vfp, SMXmlConfig_t *smp)
CKSUM_DATA(vfp->qos_enable, CKSUM_OVERALL_DISRUPT_CONSIST);
CKSUM_DATA(vfp->base_sl, CKSUM_OVERALL_DISRUPT_CONSIST);
CKSUM_DATA(vfp->base_sc, CKSUM_OVERALL_DISRUPT_CONSIST);
CKSUM_DATA(vfp->updown_only, CKSUM_OVERALL_DISRUPT_CONSIST);
CKSUM_DATA(vfp->mcast_isolate, CKSUM_OVERALL_DISRUPT_CONSIST);
CKSUM_DATA(vfp->mcast_sl, CKSUM_OVERALL_DISRUPT_CONSIST);
CKSUM_DATA(vfp->mcast_sc, CKSUM_OVERALL_DISRUPT_CONSIST);
......@@ -3500,7 +3499,6 @@ addDefaultVirtualFabric(uint32_t fm, FMXmlCompositeConfig_t *config, VFXmlConfig
vfp->qos_enable = 0;
vfp->base_sl = UNDEFINED_XML8;
vfp->flowControlDisable = UNDEFINED_XML8;
vfp->updown_only = 0;
vfp->percent_bandwidth = UNDEFINED_XML8;
// uint8_t absolute_bandwidth;
vfp->priority = 0;
......@@ -4018,7 +4016,6 @@ VirtualFabrics_t* renderVirtualFabricsConfig(uint32_t fm, FMXmlCompositeConfig_t
vfip->routing_scs = 1;
vfip->routing_sls = 1;
vfip->updown_only = vfp->updown_only;
vfip->percent_bandwidth = vfp->percent_bandwidth;
if (vfp->qos_enable &&
......@@ -5758,10 +5755,8 @@ static void* SmDorRoutingXmlParserStart(IXmlParserState_t *state, void *parent,
dor->warn_threshold = DEFAULT_DOR_PORT_PAIR_WARN_THRESHOLD;
dor->updn_mc_same_spanning_tree = DEFAULT_UPDN_MC_SAME_SPANNING_TREE;
// Set default for following.
dor->useUpDownOnDisruption = UNDEFINED_XML8;
dor->escapeVLs = DEFAULT_ESCAPE_VLS_IN_USE;
return dor;
}
......@@ -5802,6 +5797,9 @@ static void SmDorRoutingXmlParserEnd(IXmlParserState_t *state, const IXML_FIELD
nonToroidalEdges = 1;
}
if (dor->dimension[dim].length == 0)
IXmlParserPrintError(state, "The length of the dimension must be specified");
// Verify no overlap for port pairs
for (port=0; port<dor->dimension[dim].portCount; port++) {
if (dor->dimension[dim].toroidal && dor->dimension[dim].portPair[port].port1 == dor->dimension[dim].portPair[port].port2) {
......@@ -5837,13 +5835,11 @@ static void SmDorRoutingXmlParserEnd(IXmlParserState_t *state, const IXML_FIELD
dor->topology = DOR_MESH;
}
if (dor->useUpDownOnDisruption == 0xff) dor->useUpDownOnDisruption = 0;
if (dor->topology == DOR_MESH) {
dor->routingSCs = 1;
dor->routingSCs = dor->escapeVLs ? 2 : 1;
} else {
dor->routingSCs = 2;
dor->routingSCs = dor->escapeVLs ? 4 : 2;
}
smp->smDorRouting = *dor;
......@@ -5853,16 +5849,16 @@ static void SmDorRoutingXmlParserEnd(IXmlParserState_t *state, const IXML_FIELD
static IXML_FIELD SmDimensionFields[] = {
{ tag:"Toroidal", format:'u', IXML_FIELD_INFO(SmDimension_t, toroidal) },
{ tag:"Length", format:'u', IXML_FIELD_INFO(SmDimension_t, length) },
{ tag:"PortPair", format:'s', end_func:SmPortPairEnd },
{ NULL }
};
static IXML_FIELD SmDorRoutingFields[] = {
{ tag:"Debug", format:'u', IXML_FIELD_INFO(SmDorRouting_t, debug) },
{ tag:"UseUpDownOnDisruption", format:'u', IXML_FIELD_INFO(SmDorRouting_t, useUpDownOnDisruption) },
{ tag:"UseEscapeVLs", format:'u', IXML_FIELD_INFO(SmDorRouting_t, escapeVLs) },
{ tag:"Dimension", format:'k', subfields:SmDimensionFields, start_func:SmDimensionStart },
{ tag:"WarnThreshold", format:'u', IXML_FIELD_INFO(SmDorRouting_t, warn_threshold) },
{ tag:"UpDownMcastSameSpanningTree", format:'u', IXML_FIELD_INFO(SmDorRouting_t, updn_mc_same_spanning_tree) },
{ NULL }
};
#endif
......@@ -6386,6 +6382,7 @@ static IXML_FIELD SmFields[] = {
{ tag:"MeshTorusTopology", format:'k', subfields:SmDorRoutingFields, start_func:SmDorRoutingXmlParserStart, end_func:SmDorRoutingXmlParserEnd },
#endif
{ tag:"DebugVf", format:'u', IXML_FIELD_INFO(SMXmlConfig_t, sm_debug_vf) },
{ tag:"DebugRouting", format:'u', IXML_FIELD_INFO(SMXmlConfig_t, sm_debug_routing) },
{ tag:"DebugLidAssign", format:'u', IXML_FIELD_INFO(SMXmlConfig_t, sm_debug_lid_assign) },
{ tag:"NoReplyIfBusy", format:'u', IXML_FIELD_INFO(SMXmlConfig_t, NoReplyIfBusy) },
{ tag:"LftMultiblock", format:'u', IXML_FIELD_INFO(SMXmlConfig_t, lft_multi_block) },
......@@ -7994,9 +7991,6 @@ static IXML_FIELD VfFields[] = {
{ tag:"Security", format:'u', IXML_FIELD_INFO(VFConfig_t, security) },
{ tag:"BaseSL", format:'u', IXML_FIELD_INFO(VFConfig_t, base_sl) },
{ tag:"FlowControlDisable", format:'u', IXML_FIELD_INFO(VFConfig_t, flowControlDisable) },
#ifdef CONFIG_INCLUDE_DOR
{ tag:"SecondaryRouteOnly", format:'u', IXML_FIELD_INFO(VFConfig_t, updown_only) },
#endif
{ tag:"QOS", format:'u', IXML_FIELD_INFO(VFConfig_t, qos_enable) },
{ tag:"Bandwidth", format:'k', IXML_FIELD_INFO(VFConfig_t, percent_bandwidth), end_func:PercentU8XmlParserEnd },
{ tag:"HighPriority", format:'u', IXML_FIELD_INFO(VFConfig_t, priority) },
......@@ -8096,19 +8090,6 @@ static void VfXmlParserEnd(IXmlParserState_t *state, const IXML_FIELD *field, vo
return;
}
#ifdef CONFIG_INCLUDE_DOR
// updown checks
if (vfp->updown_only == UNDEFINED_XML8)
vfp->updown_only = 0;
else if (vfp->updown_only > 1) {
IXmlParserPrintError(state, "SecondaryRouteOnly must be 0=no 1=yes");
freeXmlMemory(vfp, sizeof(VFConfig_t), "VFConfig_t VfXmlParserEnd");
return;
}
vfp->updown_only = 0; //SecondaryRouteOnly for DOR; DOR currently not supported
#endif
// validate BaseSL
if (vfp->base_sl != UNDEFINED_XML8 && vfp->base_sl > 15) {
IXmlParserPrintError(state, "BaseSL must be 0-15");
......@@ -9157,9 +9138,6 @@ void printXmlDebug(FMXmlCompositeConfig_t *config, uint32_t fm)
fprintf(stdout, "VF %u qos_enable %u\n", i, test->v_fabric[i].qos_enable);
fprintf(stdout, "VF %u flowControlDisable %u\n", i, test->v_fabric[i].flowControlDisable);
fprintf(stdout, "VF %u base_sl %u\n", i, test->v_fabric[i].base_sl);
#ifdef CONFIG_INCLUDE_DOR
fprintf(stdout, "VF %u updown_only %u\n", i, test->v_fabric[i].updown_only);
#endif
fprintf(stdout, "VF %u percent_bandwidth %u\n", i, test->v_fabric[i].percent_bandwidth);
fprintf(stdout, "VF %u priority %u\n", i, test->v_fabric[i].priority);
fprintf(stdout, "VF %u pkt_lifetime_mult %u\n", i, test->v_fabric[i].pkt_lifetime_mult);
......
......@@ -97,6 +97,9 @@ impl_vs_thread_kill (Thread_t *thr);
extern void
impl_vs_thread_sleep (uint64_t sleep_time);
extern Status_t
impl_vs_thread_join(Thread_t *thr,
void **value_ptr);
/**********************************************************************
*
......@@ -545,3 +548,50 @@ vs_thread_sleep (uint64_t sleep_time)
IB_EXIT (function, VSTATUS_OK);
return;
}
/**********************************************************************
*
* FUNCTION
* vs_thread_join
*
* DESCRIPTION
* Wait for the specified thread to exit.
*
* INPUTS
*
* OUTPUTS
* Status_t - On success VSTATUS_OK is returned, otherwise
* the cause of the error.
*
*
* HISTORY
*
* NAME DATE REMARKS
* SR 10/24/16 Initial creation of function.
**********************************************************************/
Status_t
vs_thread_join (Thread_t *handle, void **value_ptr)
{
Status_t status;
IB_ENTER (function, (unint) handle, (unint) value_ptr, (uint32_t) 0U,
(uint32_t) 0U);
/*
** Verify required pointer arguments.
*/
if (handle == 0)
{
IB_LOG_ERROR0 ("handle parameter is null");
IB_EXIT (function, VSTATUS_ILLPARM);
return VSTATUS_ILLPARM;
}
/*
** Invoke environment specific implmentation and return status.
*/
status = impl_vs_thread_join(handle, value_ptr);
IB_EXIT (function, status);
return status;
}
......@@ -663,3 +663,48 @@ impl_vs_thread_start (void *impl)
return 0;
}
/**********************************************************************
*
* FUNCTION
* impl_vs_thread_join
*
* DESCRIPTION
* Linux user space specific implementation of the vs_thread_join()
* API. This routine is called by the vs_thread_join() API.
*
* INPUTS
*
* OUTPUTS
* Status_t - On success VSTATUS_OK is returned, otherwise
* the cause of the error.
*
*
* HISTORY
*
* NAME DATE REMARKS
* SR 10/24/16 Initial creation of function.
**********************************************************************/
Status_t
impl_vs_thread_join (Thread_t *handle, void **value_ptr)
{
static const char function[] = "impl_vs_thread_join";
Status_t status;
Implpriv_Thread_t *impl;
IB_ENTER (function, (unint)handle, (unint) value_ptr, (uint32_t) 0U,
(uint32_t) 0U);
impl = (Implpriv_Thread_t *)handle->opaque;
if (!impl)
{
IB_LOG_ERROR0("Internal logic error, no create data");
IB_EXIT (function, VSTATUS_ILLPARM);
return -1;
}
status = pthread_join(impl->thread, NULL);
IB_EXIT (function, status);
return status;
}
......@@ -223,9 +223,23 @@ enable_instance()
fm_enabled[$instance]=1
echo "SM_${instance}_start=yes" >> $TEMP
echo "PM_${instance}_start=yes" >> $TEMP
echo "BM_${instance}_start=yes" >> $TEMP
echo "FE_${instance}_start=yes" >> $TEMP
enable_default=y
get_yes_no "Should PM instance $instance (${fm_device[$instance]}) be enabled" $enable_default
if [ "$ans" -eq 1 ]
then
echo " Enabling Start of PM instance $instance"
echo "PM_${instance}_start=yes" >> $TEMP
fi
enable_default=n
get_yes_no "Should FE instance $instance (${fm_device[$instance]}) be enabled" $enable_default
if [ "$ans" -eq 1 ]
then
echo " Enabling Start of FE instance $instance"
echo "FE_${instance}_start=yes" >> $TEMP
fi
}
set_instance_priority()
......@@ -235,8 +249,8 @@ set_instance_priority()
priority=$2
echo "SM_${instance}_priority=$priority" >> $TEMP
echo "PM_${instance}_priority=$priority" >> $TEMP
echo "BM_${instance}_priority=$priority" >> $TEMP
#echo "PM_${instance}_priority=$priority" >> $TEMP
#echo "BM_${instance}_priority=$priority" >> $TEMP
#echo "FE_${instance}_priority=$priority" >> $TEMP
}
......@@ -371,14 +385,17 @@ else
for instance in 0 1 2 3
do
get_yes_no "Should FM instance $instance (${fm_device[$instance]}) be enabled" $default
default=n # only default to instance 0 enabled
if [ "$ans" -eq 1 ]
then
echo " Enabling Start of FM instance $instance SM, PM, BM and FE"
echo " Enabling Start of SM instance $instance"
enable_instance $instance
instances="$instances $instance"
num_instances=$(($num_instances + 1))
fi
default=n # only default to instance 0 enabled
done
fi
......@@ -480,14 +497,14 @@ then
fi
if [ $ans -eq 1 ]
then
get_yes_no "Will this FM be the preferrred primary" "y"
get_yes_no "Will this FM be the preferred primary" "y"
if [ $ans -eq 1 ]
then
set_instance_priority 0 8 # sets for all instances
echo " Setting Priority of SM, PM, BM and FE to 8"
echo " Setting Priority of SM and PM to 8"
else
set_instance_priority 0 1 # sets for all instances
echo " Setting Priority of SM, PM, BM and FE to 1"
echo " Setting Priority of SM and PM to 1"
fi
else
for instance in $instances
......@@ -495,10 +512,10 @@ then
get_yes_no "Will FM instance $instance (${fm_name[$instance]}) (${fm_device[$instance]}) be the preferred primary" "y"
if [ $ans -eq 1 ]
then
echo " Setting Priority of FM instance $instance SM, PM, BM and FE to 8"
echo " Setting Priority of FM instance $instance SM and PM to 8"
set_instance_priority $instance 8 # sets for all instances
else
echo " Setting Priority of FM instance $instance SM, PM, BM and FE to 1"
echo " Setting Priority of FM instance $instance SM and PM to 1"
set_instance_priority $instance 1 # sets for all instances
fi
done
......@@ -515,9 +532,9 @@ if [ $ans -eq 1 ]
then
echo "SM_0_elevated_priority=14" >> $TEMP # sets for all instances
echo "PM_0_elevated_priority=14" >> $TEMP # sets for all instances
echo "BM_0_elevated_priority=14" >> $TEMP # sets for all instances
#echo "BM_0_elevated_priority=14" >> $TEMP # sets for all instances
#echo "FE_0_elevated_priority=14" >> $TEMP # sets for all instances
echo " Setting ElevatedPriority of SM, PM, and BM to 14"
echo " Setting ElevatedPriority of SM and PM to 14"
fi
print_separator
......@@ -638,6 +655,15 @@ then
#fi
echo " Setting Pm.FreezeFrameImages to $ans"
echo "PM_0_FreezeFrameImages=$ans" >> $TEMP # sets for all instances
fi
print_separator
get_yes_no "Should SslSecurityEnable be enabled" "y"
if [ "$ans" -eq 0 ]
then
echo " Setting SslSecurityEnable to 0"
echo "FE_0_ssl_security_enable=0" >> $TEMP
fi
print_separator
......
......@@ -1384,7 +1384,8 @@ FSTATUS paGetPortStats(Pm_t *pm, STL_LID_32 lid, uint8 portNum, PmCompositePortC
GET_DELTA_PORTCOUNTERS(UncorrectableErrors);
#undef GET_DELTA_PORTCOUNTERS
portCountersP->lq.s.NumLanesDown = pmPortImageP->StlPortCounters.lq.s.NumLanesDown;
portCountersP->lq.s.LinkQualityIndicator = pmPortImageP->StlPortCounters.lq.s.LinkQualityIndicator;
portCountersP->lq.s.LinkQualityIndicator = MIN(pmPortImageP->StlPortCounters.lq.s.LinkQualityIndicator,
pmPortImagePreviousP->StlPortCounters.lq.s.LinkQualityIndicator);
*flagsp = STL_PA_PC_FLAG_DELTA|(pmPortImageP->u.s.UnexpectedClear?STL_PA_PC_FLAG_UNEXPECTED_CLEAR:0);
} else {
*flagsp = (pmPortImageP->u.s.UnexpectedClear?STL_PA_PC_FLAG_UNEXPECTED_CLEAR:0);
......@@ -2229,7 +2230,7 @@ FSTATUS addSortedPorts(PmFocusPorts_t *pmFocusPorts, sortInfo_t *sortInfo, uint3
pmFocusPorts->portList[portCount].guid = (uint64_t)(listp->portp->pmnodep->guid);
strncpy(pmFocusPorts->portList[portCount].nodeDesc, (char *)listp->portp->pmnodep->nodeDesc.NodeString,
sizeof(pmFocusPorts->portList[portCount].nodeDesc)-1);
if (listp->portNum != 0) {
if (listp->portNum != 0 && listp->neighborPortp != NULL) {
pmFocusPorts->portList[portCount].neighborFlags = listp->neighborFlags;
pmFocusPorts->portList[portCount].neighborLid = listp->neighborPortp->pmnodep->Image[imageIndex].lid;
pmFocusPorts->portList[portCount].neighborPortNum = listp->neighborPortp->portNum;
......@@ -3286,6 +3287,7 @@ FSTATUS paGetVFPortStats(Pm_t *pm, STL_LID_32 lid, uint8 portNum, char *vfName,
status = FNOT_FOUND | STL_MAD_STATUS_STL_PA_NO_VF;
goto error;
}
imageIndex = 0; // STH always uses imageIndex 0
if (!pmVFP->Image[imageIndex].isActive) {
IB_LOG_WARN_FMT(__func__, "VF %.*s not active", (int)sizeof(pmVFP->Name), pmVFP->Name);
status = FNOT_FOUND | STL_MAD_STATUS_STL_PA_NO_VF;
......@@ -3610,7 +3612,7 @@ FSTATUS addVFSortedPorts(PmVFFocusPorts_t *pmVFFocusPorts, sortInfo_t *sortInfo,
pmVFFocusPorts->portList[portCount].guid = (uint64_t)(listp->portp->pmnodep->guid);
strncpy(pmVFFocusPorts->portList[portCount].nodeDesc, (char *)listp->portp->pmnodep->nodeDesc.NodeString,
sizeof(pmVFFocusPorts->portList[portCount].nodeDesc)-1);
if (listp->portNum != 0) {
if (listp->portNum != 0 && listp->neighborPortp != NULL) {
pmVFFocusPorts->portList[portCount].neighborFlags = listp->neighborFlags;
pmVFFocusPorts->portList[portCount].neighborLid = listp->neighborPortp->pmnodep->Image[imageIndex].lid;
pmVFFocusPorts->portList[portCount].neighborPortNum = listp->neighborPortp->portNum;
......
This diff is collapsed.
......@@ -43,8 +43,34 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#define _SM_DOR_H_
#define SM_UPDN_MC_SAME_SPANNING_TREE 1 /* controls default behavior of whether updn and multicast have same spanning tree */
#define SM_DOR_MAX_TOROIDAL_DIMENSIONS 6
// DorBitMaps are indexed by ij using switch indexes.
//
// When switches disappear from the fabric and sm_compactSwitchSpace() runs
// it changes switch indices and the max switch count. This compaction is
// done after the closure bit maps were allocated and set based on
// the old max switch count. Though the closure bit maps are altered
// to take into account the change in switch indices (done in process_swIdx_change),
// the bit map space isn't reallocated, so any index calculations should be based
// on the old count of switches when the closure was computed
#define DorBitMapsIndex(X,Y) (((X) * (((DorTopology_t *)(sm_topop->routingModule->data))->closure_max_sws)) + (Y))
static __inline__ void ijSet(uint32* ijBitmap, int ij) {
ijBitmap[ij >> 5] |= 1 << (ij & 0x1f);
}
static __inline__ void ijClear(uint32* ijBitmap, int ij) {
ijBitmap[ij >> 5] &= ~((uint32_t)(1 << (ij & 0x1f)));
}
static __inline__ int ijTest(uint32* ijBitmap, int ij) {
return ((ijBitmap[ij >> 5] & (1 << (ij & 0x1f))) ? 1 : 0);
}
// DOR Topology Information
//
typedef struct _DorTopology {
// mesh sizing
uint8_t numDimensions;
......@@ -53,10 +79,6 @@ typedef struct _DorTopology {
// contiguous within these bounds
int8_t coordMaximums[SM_DOR_MAX_DIMENSIONS];
int8_t coordMinimums[SM_DOR_MAX_DIMENSIONS];
// true if cycle-free routing is enabled
uint8_t cycleFreeRouting;
// true if the alternate VL for routing around switch failures is enabled
uint8_t alternateRouting;
// for each dimension, true if toroidal
uint8_t toroidal[SM_DOR_MAX_DIMENSIONS];
// the configured number of toroidal dimensions
......@@ -71,20 +93,67 @@ typedef struct _DorTopology {
// flat 2d bitfield indexed on switch indices marking whether
// the cycle-free DOR path is realizable between nodes
size_t dorClosureSize;
uint32_t *dorClosure;
// flat 2d bitfield indexed on switch indices marking whether
// j is downstream of i for a given (i, j) pair using up/down
// routing (basically directional closure)
uint32_t *updnDownstream;
uint32_t *dorLeft;
uint32_t *dorRight;
uint32_t closure_max_sws; //the switch count when the closures were computed
} DorTopology_t;
typedef struct _DorNode {
int8_t coords[SM_DOR_MAX_DIMENSIONS];
Node_t *node;
struct _DorNode *left[SM_DOR_MAX_DIMENSIONS];
struct _DorNode *right[SM_DOR_MAX_DIMENSIONS];
int8_t coords[SM_DOR_MAX_DIMENSIONS];
Node_t *node;
int multipleBrokenDims;
struct _DorNode *left[SM_DOR_MAX_DIMENSIONS];
struct _DorNode *right[SM_DOR_MAX_DIMENSIONS];
} DorNode_t;
typedef enum {
DorAny = 0,
DorLeft = 1,
DorRight = 2,
} DorDirection;
static __inline__ int dorClosure(DorTopology_t* dorTop, int i, int j) {
int ij = DorBitMapsIndex(i, j);
if (i == j) return 1;
return (ijTest(dorTop->dorLeft, ij) || ijTest(dorTop->dorRight, ij));
}
//===========================================================================//
// DOR COORDINATE ASSIGNMENT
//
typedef struct _detected_dim {
uint8_t dim;
uint64_t neighbor_nodeGuid;
uint8_t port;
uint8_t neighbor_port;
int pos;
Node_t *neighbor_nodep;
} detected_dim_t;
#define PORT_PAIR_WARN_ARR_SIZE 40
#define PORT_PAIR_WARN_IDX(X,Y) (((X) * PORT_PAIR_WARN_ARR_SIZE) + (Y))
typedef enum {
DIM_LOOKUP_RVAL_FOUND,
DIM_LOOKUP_RVAL_NOTFOUND,
DIM_LOOKUP_RVAL_INVALID
} DimLookupRval_t;
typedef struct _DorDimension {
uint8_t ingressPort;
uint8_t dimension;
int8_t direction;
uint8_t hyperlink;
cl_map_obj_t portObj;
} DorDimension_t;
typedef struct _DorDiscoveryState {
uint8_t nextDimension;
uint8_t toroidalOverflow;
uint8_t scsAvailable; // min of SC support of all fabric ISLs
DorDimension_t *dimensionMap[256]; // indexed by egress port
} DorDiscoveryState_t;
#endif
This diff is collapsed.
......@@ -44,6 +44,34 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
extern "C" {
#endif