Commit 4cf2934f authored by Scott Breyer's avatar Scott Breyer

Update to latest from build 10.4.0.0.197 (IFS 10.4.0.0.214)

parent 9cf710ea
......@@ -1428,7 +1428,7 @@ sub delta_rpm_install_list($$$@)
if ( "$delta_rpm_info{$package}{'Mode'}" eq "kernel" ) {
if ( "$CUR_VENDOR_VER" eq "ES72" || "$CUR_VENDOR_VER" eq "ES73" || "$CUR_VENDOR_VER" eq "ES122" ) {
if ( $package =~ /ifs-kernel-updates/ ) {
if ($GPU_Install == 1 ){
if ( $GPU_Install == 1 ) {
$rpmdir_t=$rpmdir."/CUDA";
}
next if ( $skip_kernelib);
......@@ -1445,13 +1445,16 @@ sub delta_rpm_install_list($$$@)
$ret = 1;
}
}
rpm_install_with_options($rpmdir, $osver, $package, " -U --nodeps ");
rpm_install_with_options($rpmdir_t, $osver, $package, " -U --nodeps ");
} else {
if ( "$CUR_VENDOR_VER" eq "ES72" || "$CUR_VENDOR_VER" eq "ES73" || "$CUR_VENDOR_VER" eq "ES122" ) {
if ( $package =~ /libpsm/ ) {
if ($GPU_Install == 1 ){
if ( $GPU_Install == 1 ) {
if ( -d $rpmdir."/CUDA" ) {
if ( $package =~ /libpsm/ || $package =~ /ifs-kernel-updates/) {
$rpmdir_t=$rpmdir."/CUDA";
}
} else {
NormalPrint("CUDA specific packages do not exist\n");
exit 0;
}
}
rpm_install_with_options($rpmdir_t, "user", $package, " -U --nodeps ");
......@@ -1588,8 +1591,23 @@ sub delta_srpm_file($$)
{
my $srcdir = shift();
my $globname = shift(); # in $srcdir
my $result;
if ( $GPU_Install == 1 ) {
if ( -d $srcdir."/SRPMS/CUDA" ) {
if ("$globname" eq "libpsm2*.src.rpm") {
$result = file_glob("$srcdir/$SRPMS_SUBDIR/CUDA/$globname");
} elsif ("$globname" eq "ifs-kernel-updates*.src.rpm"){
$result = file_glob("$srcdir/$SRPMS_SUBDIR/CUDA/$globname");
}
} else {
NormalPrint("CUDA specific SRPMs do not exist\n");
exit 0;
}
} else {
$result = file_glob("$srcdir/$SRPMS_SUBDIR/$globname");
}
my $result = file_glob("$srcdir/$SRPMS_SUBDIR/$globname");
$result =~ s|^$srcdir/||;
return $result;
}
......@@ -2657,9 +2675,12 @@ sub install_kernel_ib($$)
}
$rpmdir_t = $rpmdir;
if ( "$CUR_VENDOR_VER" eq "ES72" || "$CUR_VENDOR_VER" eq "ES73" || "$CUR_VENDOR_VER" eq "ES122" ) {
if ($GPU_Install == 1 ){
if ( $GPU_Install == 1 ) {
if ( -d $rpmdir."/CUDA" ) {
$rpmdir_t=$rpmdir."/CUDA";
} else {
NormalPrint("CUDA specific packages do not exist\n");
exit 0;
}
}
......@@ -3112,6 +3133,11 @@ sub uninstall_intel_hfi($$)
rebuild_ramdisk();
}
sub check_os_prereqs_intel_hfi
{
return rpm_check_os_prereqs("intel_hfi", "any");
}
# ==========================================================================
# ib_wfr_lite installation
......
......@@ -62,6 +62,7 @@ $comp_prereq_hash{'mpi_selector_prereq'} = \@mpi_selector_prereq;
my @intel_hfi_prereq = (
"bash",
"libhfi1",
"glibc",
"libgcc",
"libuuid",
......
......@@ -77,7 +77,6 @@ my @intel_hfi_prereq = (
"bash",
"glibc",
"libgcc_s1",
"libhfi1",
"libibverbs1",
"libncurses5",
"libuuid1",
......
......@@ -59,6 +59,7 @@ $comp_prereq_hash{'mpi_selector_prereq'} = \@mpi_selector_prereq;
my @intel_hfi_prereq = (
"glibc",
"libhfi1verbs-rdmav2",
"libgcc_s1",
"libuuid1",
"bash",
......
......@@ -435,6 +435,13 @@ sub rpm_check_os_prereqs($$)
DebugPrint "Checking prereqs for $comp\n";
foreach (@rpm_list){
DebugPrint "Checking installation of $_\n";
#Don't check dependencies for kernel RPMS if their installation is skipped
if($skip_kernel == 1){
if( "$_" =~ /kernel/ || "$_" =~ /kmod/ || "$_" eq "pciutils" ) {
DebugPrint("Skipping check for $_ \n");
next;
}
}
if(!rpm_is_installed($_, $mode)){
NormalPrint("--> $comp requires $_ \n");
$prereq_check = 1;
......
......@@ -43,7 +43,7 @@ Specifies the port, numbered 1..n. Using 0 specifies the first active port. (Def
Specifies the text describing the reason hosts are being disabled. \fIreason\fR is saved in the reason field of the output file.
.IP
Information about the links disabled is written to a CSV file. By default, this file is named /opa/disabled:hfi:port.csv where the hfi:port part of the file name is replaced by the HFI number and the port number being operated on (such as 0:0 or 1:2). This CSV file can be used as input to opaenableports.
Information about the links disabled is written to a CSV file. By default, this file is named /opa/disabled:hfi:port.csv where the hfi:port part of the file name is replaced by the HFI number and the port number being operated on (such as 1:1 or 2:1). This CSV file can be used as input to opaenableports.
.IP
The list is of the form: NodeGUID;PortNum;NodeType;NodeDesc;NodeGUID; PortNum;NodeType;NodeDesc;Reason For each listed link, the switch port closer to this is the one that has been disabled.
.NL
......
......@@ -55,7 +55,7 @@ Specifies the input file listing the links to disable. The list is of the form:
.IP
For each listed link, the switch port closer to this node is disabled. The \fIreason\fR field is optional. An input file such as this can be generated by using opaextractbadlinks, opaextractmissinglinks, or opaextractsellinks.
.IP
Information about the links disabled and the reason is saved (in the same format) to an output file named /etc/opa/disabled:hfi:port.csv where the hfi:port part of the file name is replaced by the HFI number and the port number being operated on (such as 0:0 or 1:2). This CSV file can be used as input to opaenableports.
Information about the links disabled and the reason is saved (in the same format) to an output file named /etc/opa/disabled:hfi:port.csv where the hfi:port part of the file name is replaced by the HFI number and the port number being operated on (such as 1:1 or 2:1). This CSV file can be used as input to opaenableports.
.NL
.SH -h and -p options permit a variety of selections:
......
......@@ -83,6 +83,11 @@ HFI \fIx\fR, port \fIy\fR.
.NL
opaenableports < disabled.csv
.br
opaenableports < /etc/opa/disabled:0:0.csv
opaenableports < /etc/opa/disabled:1:1.csv
.br
opaenableports -h 1 -p 1 < disabled.csv
.SH Other Information
.NL
.PP
For messages containing skipping ports, either the device is offline or the other end of the link has been disabled and the device is no longer accessible in-band. The end of the link previously disabled by opedisableports or opadisablehosts can be found in /etc/opa/disabled:1:1.csv.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -41,6 +41,7 @@ FMConfigErrors 1
LinkErrorRecovery 0
LocalLinkIntegrityErrors 0
RcvRemotePhysicalErrors 0 # side effect of errors elsewhere, ignore
NumLanesDown 0 # LinkWidthDowngrade
# Security
# --------
......
......@@ -49,6 +49,7 @@ FMConfigErrors 1 # can be a side effect of SI
LinkErrorRecovery 0 # not expected to be 0
LocalLinkIntegrityErrors 0 # not expected to be 0
RcvRemotePhysicalErrors 0 # side effect of errors elsewhere, ignore
NumLanesDown 1 # LinkWidthDowngrade
# Security
# --------
......
......@@ -4901,6 +4901,8 @@ static boolean PortCountersExceedThreshold(PortData *portp)
PortCounterExceedsThreshold64(pPortStatus->field, g_Thresholds.field)
#define BELOW_THRESHOLD_LQI(field) \
PortCounterBelowThreshold(pPortStatus->lq.s.field, g_Thresholds.lq.s.field)
#define EXCEEDS_THRESHOLD_NLD(field) \
PortCounterExceedsThreshold((pPortStatus->lq.field >> 4), (g_Thresholds.lq.field >> 4))
// Data movement
return EXCEEDS_THRESHOLD64(PortXmitData)
......@@ -4919,6 +4921,7 @@ static boolean PortCountersExceedThreshold(PortData *portp)
|| EXCEEDS_THRESHOLD(LinkErrorRecovery)
|| EXCEEDS_THRESHOLD64(LocalLinkIntegrityErrors)
|| EXCEEDS_THRESHOLD64(PortRcvRemotePhysicalErrors)
|| EXCEEDS_THRESHOLD_NLD(AsReg8)
// Security
|| EXCEEDS_THRESHOLD64(PortXmitConstraintErrors)
|| EXCEEDS_THRESHOLD64(PortRcvConstraintErrors)
......@@ -4939,6 +4942,7 @@ static boolean PortCountersExceedThreshold(PortData *portp)
#undef EXCEEDS_THRESHOLD
#undef EXCEEDS_THRESHOLD64
#undef BELOW_THRESHOLD_LQI
#undef EXCEEDS_THRESHOLD_NLD
}
void ShowPortCounterBelowThreshold(const char* field, uint32 value, uint32 threshold, Format_t format, int indent, int detail)
......@@ -5032,6 +5036,8 @@ void ShowLinkPortErrorSummary(PortData *portp, Format_t format, int indent, int
ShowPortCounterExceedingThreshold64(#name, pPortStatus->field, g_Thresholds.field, format, indent, detail)
#define SHOW_EXCEEDING_MB_THRESHOLD(field, name) \
ShowPortCounterExceedingMbThreshold64(#name, pPortStatus->field, g_Thresholds.field, format, indent, detail)
#define SHOW_EXCEEDING_NLD_THRESHOLD(field, name) \
ShowPortCounterExceedingThreshold(#name, (pPortStatus->lq.field >> 4), (g_Thresholds.lq.field >> 4), format, indent, detail)
// Data movement
SHOW_EXCEEDING_MB_THRESHOLD(PortXmitData, XmitData);
SHOW_EXCEEDING_MB_THRESHOLD(PortRcvData, RcvData);
......@@ -5049,6 +5055,7 @@ void ShowLinkPortErrorSummary(PortData *portp, Format_t format, int indent, int
SHOW_EXCEEDING_THRESHOLD(LinkErrorRecovery, LinkErrorRecovery);
SHOW_EXCEEDING_THRESHOLD64(LocalLinkIntegrityErrors, LocalLinkIntegrityErrors);
SHOW_EXCEEDING_THRESHOLD64(PortRcvRemotePhysicalErrors, RcvRemotePhysicalErrors);
SHOW_EXCEEDING_NLD_THRESHOLD(AsReg8, NumLanesDown);
// Security
SHOW_EXCEEDING_THRESHOLD64(PortXmitConstraintErrors, XmitConstraintErrors);
SHOW_EXCEEDING_THRESHOLD64(PortRcvConstraintErrors, RcvConstraintErrors);
......@@ -5070,6 +5077,7 @@ void ShowLinkPortErrorSummary(PortData *portp, Format_t format, int indent, int
#undef SHOW_EXCEEDING_THRESHOLD
#undef SHOW_EXCEEDING_THRESHOLD64
#undef SHOW_EXCEEDING_MB_THRESHOLD
#undef SHOW_EXCEEDING_NLD_THRESHOLD
}
// returns TRUE if thresholds are configured
......@@ -5095,6 +5103,9 @@ boolean ShowThresholds(Format_t format, int indent, int detail)
#define SHOW_MB_THRESHOLD(field, name) \
do { if (g_Thresholds.field) { switch (format) { case FORMAT_TEXT: printf("%*s%-30s %lu MB\n", indent+4, "", #name, (uint64)g_Thresholds.field/FLITS_PER_MB); break; case FORMAT_XML: printf("%*s<%sMB>%lu</%sMB>\n", indent+4, "", #name, (uint64)g_Thresholds.field/FLITS_PER_MB, #name); break; default: break; } didoutput = TRUE; } } while (0)
#define SHOW_THRESHOLD_NLD(field, name) \
do { if (g_Thresholds.lq.field >> 4) { switch (format) { case FORMAT_TEXT: printf("%*s%-30s %lu\n", indent+4, "", #name, (uint64)(g_Thresholds.lq.field >> 4)); break; case FORMAT_XML: printf("%*s<%s>%lu</%s>\n", indent+4, "", #name, (uint64)(g_Thresholds.lq.field >> 4), #name); break; default: break; } didoutput = TRUE; } } while (0)
// Data movement
SHOW_MB_THRESHOLD(PortXmitData, XmitData);
SHOW_MB_THRESHOLD(PortRcvData, RcvData);
......@@ -5113,6 +5124,7 @@ boolean ShowThresholds(Format_t format, int indent, int detail)
SHOW_THRESHOLD(LinkErrorRecovery, LinkErrorRecovery);
SHOW_THRESHOLD(LocalLinkIntegrityErrors, LocalLinkIntegrityErrors);
SHOW_THRESHOLD(PortRcvRemotePhysicalErrors, RcvRemotePhysicalErrors);
SHOW_THRESHOLD_NLD(AsReg8, NumLanesDown);
// Security
SHOW_THRESHOLD(PortXmitConstraintErrors, XmitConstraintErrors);
......@@ -5149,6 +5161,8 @@ boolean ShowThresholds(Format_t format, int indent, int detail)
#undef SHOW_THRESHOLD
#undef SHOW_MB_THRESHOLD
#undef SHOW_THRESHOLD_LQI
#undef SHOW_THRESHOLD_NLD
return didoutput;
}
......@@ -11644,7 +11658,13 @@ int parse(const char* filename)
} else {
g_Thresholds.lq.s.LinkQualityIndicator = threshold;
/* can't be cleared. */
}
}
} else if (strcmp(param,"NumLanesDown") == 0) {
if (threshold > 4) {
fprintf(stderr, "opareport: NumLanesDown max threshold setting is 4, ignoring: %llu\n", threshold);
} else {
g_Thresholds.lq.AsReg8 |= (threshold << 4);
}
#define PARSE_THRESHOLD(field, name, max) \
if (strcmp(param, #name) == 0) { \
if (threshold > (max)) { \
......
......@@ -740,13 +740,6 @@ do
s)
hfi_suffix=$OPTARG
if [[ "$hfi_suffix" =~ $HFI_SUFFIX_REGEX ]] ; then
hfiNum=`echo "$hfi_suffix" | cut -d "_" -f2`
FILE_TOPOLOGY_OUT="topology.$((hfiNum+1)):0.xml"
else
echo "opaxlattopology: Invalid Argument for -s option, should be like hfi1_0"
exit 1
fi
;;
*)
......
# BEGIN_ICS_COPYRIGHT8 ****************************************
#
# Copyright (c) 2015, Intel Corporation
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
# * Neither the name of Intel Corporation nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
# END_ICS_COPYRIGHT8 ****************************************
#[ICS VERSION STRING: unknown]
#!/bin/bash
# PURPOSE:
#
# This file sets environment variables for an IntelMPI job.
# Note that there are many, many such variables.
#
# SYNTAX:
#
# This file must be a valid BASH script. In general, anything that's valid
# in BASH is valid here. To pass variables to IntelMPI, they
# may take either of these forms:
#
# export MPI_CMD_ARGS="$MPI_CMD_ARGS -genv VARIABLE_NAME variablevalue"
# export VARIABLE_NAME=variablevalue
#
# This script generally both exports the variable and provides it via -genv
# As such MPI_CMD_ARGS shown in the log of running the MPI app will explicitly
# show the variables used.
# SAMPLE Tuning variables:
#
# Uncomment the following lines to enable them.
#
. /usr/sbin/opagetvf_env # defines bash function opagetvf_func
export MPI_CMD_ARGS=
# It is recommended to use the TMI interface over PSM2 within IntelMPI
export I_MPI_FABRICS=shm:tmi
export I_MPI_TMI_PROVIDER=psm2
# These 3 lines select a Virtual Fabric by name and configure PKEY, SL, MTU
# opagetvf_func "-d 'Compute'" PSM2_PKEY HFI_SL PSM2_MTU
# export MPI_CMD_ARGS="-genv PSM2_PKEY $PSM2_PKEY -genv HFI_SL $HFI_SL"
# [ -n "$PSM2_MTU" ] && export MPI_CMD_ARGS="$MPI_CMD_ARGS -genv PSM2_MTU $PSM2_MTU"
# These 3 lines select a Virtual Fabric by ServiceId and configure PKEY, SL, MTU
# opagetvf_func "-S '0x1000117500000000'" PSM2_PKEY HFI_SL PSM2_MTU
# export MPI_CMD_ARGS="-genv PSM2_PKEY $PSM2_PKEY -genv HFI_SL $HFI_SL"
# [ -n "$PSM2_MTU" ] && export MPI_CMD_ARGS="$MPI_CMD_ARGS -genv PSM2_MTU $PSM2_MTU"
# These 3 lines select a Virtual Fabric by ServiceId and uses dist_sa
# to directly fetch the PathRecord at job startup.
# This mechanism is only supported for Intel HFIs when using PSM (-hfi MPIs)
#export PSM2_PATH_REC=opp
#export PSM2_IB_SERVICE_ID=0x1000117500000000
#export MPI_CMD_ARGS="-genv PSM2_PATH_REC $PSM2_PATH_REC -genv PSM2_IB_SERVICE_ID $PSM2_IB_SERVICE_ID"
# This line can enable dispersive routing. The following choices are allowed:
# adaptive, static_src, static_dest, static_base
# If LMC is enabled in the SM, adaptive will automatically be used.
# This mechanism is only supported for Intel HFIs when using PSM
#export PSM2_PATH_SELECTION=adaptive
#export MPI_CMD_ARGS="$MPI_CMD_ARGS -genv PSM2_PATH_SELECTION $PSM2_PATH_SELECTION"
# Use this to explicitly specify a pkey (for virtual fabrics)
#export PSM2_PKEY=0x8002
#export MPI_CMD_ARGS="$MPI_CMD_ARGS -genv PSM2_PKEY $PSM2_PKEY"
# Use this to explicitly specify a service level (for virtual fabrics)
#export HFI_SL=0
#export MPI_CMD_ARGS="$MPI_CMD_ARGS -genv HFI_SL $HFI_SL"
# Use this to explicitly specify a MTU (for virtual fabrics)
#export PSM2_MTU=4096
#export MPI_CMD_ARGS="$MPI_CMD_ARGS -genv PSM2_MTU $PSM2_MTU"
# Use this to enable core dumps
# (in addition ulimit and /etc/security/limits must enable core dumps too)
#export HFI_NO_BACKTRACE=1
#export MPI_CMD_ARGS="$MPI_CMD_ARGS -genv HFI_NO_BACKTRACE $HFI_NO_BACKTRACE"
# Normally Congestion Control is completely configured in the SM config file.
# However, if desired, the fabric interface settings can be overridden for
# the given job.
#export PSM2_DISABLE_CCA=0
#export PSM2_CCTI_INCREMENT=1
#export PSM2_CCTI_TIMER=1
#export PSM2_CCTI_TABLE_SIZE=128
#export MPI_CMD_ARGS="$MPI_CMD_ARGS -genv PSM2_DISABLE_CCA $PSM2_DISABLE_CCA -genv PSM2_CCTI_INCREMENT $PSM2_CCTI_INCREMENT -genv PSM2_CCTI_TIMER $PSM2_CCTI_TIMER -genv PSM2_CCTI_TABLE_SIZE $PSM2_CCTI_TABLE_SIZE"
# These values can enable and control PSM Multi-Rail
# In most cases the default automatic selections will be sufficient
# The sample shown is for Dual HFI server with port 1 per HFI connected
#export PSM2_MULTIRAIL=1
#export PSM2_MULTIRAIL_MAP="0:1,1:1"
#export MPI_CMD_ARGS="$MPI_CMD_ARGS -genv PSM2_MULTIRAIL $PSM2_MULTIRAIL -genv PSM2_MULTIRAIL_MAP $PSM2_MULTIRAIL_MAP"
# This can be enabled to force benchmarks to run on selected CPU cores
#export MPI_TASKSET="${MPI_TASKSET:- -c 1-7}"
# Adjust the environment variables if necessary
export PRODUCT=OPENIB_FF
export RELEASE_TAG=10_4_0_0_174
export RELEASE_TAG=10_4_0_0_197
export BUILD_CONFIG=${BUILD_CONFIG:-"release"}
export BUILD_WITH_STACK=
export MODULEVERSION=10.4.0.0.174
export MODULEVERSION=10.4.0.0.197
Build of OPENIB_FF 03/09/17 21:14 Tag: OPENIB_FF_LINUX_opa-10_4_0_0_10_4_0_0_174
Build of OPENIB_FF 04/04/17 19:20 Tag: OPENIB_FF_LINUX_opa-10_4_0_0_10_4_0_0_197
Name: opa-mpi-apps
Version: 10.4.0.0
Release: 92%{?dist}
Release: 197%{?dist}
Summary: Intel MPI benchmarks and Applications used by opa-fast-fabric
Group: System Environment/Libraries
License: GPLv2/BSD
......
......@@ -718,12 +718,13 @@ proc get_switch_info { ibnode } {
if { "$numPS" == "2" } {
check_exit_status 60 0
send_unix_cmd "$toolsdir/opaswquery -t $trimmed_ibnode $hfi_port_args -Q 8 -i 1"
set out [expect_list_with_punchlist "$ibnode" "Unable to query switch" 60 { "PS 1: [A-Z ]+" } { "Error" }]
regexp {([PS 1:]+) ([A-Z ]+)} $out p1 p2 p3
set out [expect_list_with_punchlist "$ibnode" "Unable to query switch" 60 { "PS 1: [A-Z\/ ]+" } { "Error" }]
regexp {([PS 1:]+) ([A-Z\/ ]+)} $out p1 p2 p3
if { ! [ string equal "$p3" "ONLINE" ] &&
! [ string equal "$p3" "OFFLINE" ] &&
! [ string equal "$p3" "NOT PRESENT" ] &&
! [ string equal "$p3" "N/A" ] &&
! [ string equal "$p3" "INVALID" ] } {
set ps1Status "ERROR"
} else {
......@@ -734,11 +735,12 @@ proc get_switch_info { ibnode } {
}
check_exit_status 60 0
send_unix_cmd "$toolsdir/opaswquery -t $trimmed_ibnode $hfi_port_args -Q 8 -i 2"
set out [expect_list_with_punchlist "$ibnode" "Unable to query switch" 60 { "PS 2: [A-Z ]+" } { "Error" }]
regexp {([PS 2:]+) ([A-Z ]+)} $out p1 p2 p3
set out [expect_list_with_punchlist "$ibnode" "Unable to query switch" 60 { "PS 2: [A-Z\/ ]+" } { "Error" }]
regexp {([PS 2:]+) ([A-Z\/ ]+)} $out p1 p2 p3
if { ! [ string equal "$p3" "ONLINE" ] &&
! [ string equal "$p3" "OFFLINE" ] &&
! [ string equal "$p3" "NOT PRESENT" ] &&
! [ string equal "$p3" "N/A" ] &&
! [ string equal "$p3" "INVALID" ] } {
set ps2Status "ERROR"
} else {
......
......@@ -2388,12 +2388,14 @@ static void McGMemberXmlParserEnd(IXmlParserState_t *state, const IXML_FIELD *fi
//fill McMemberData with info from group
if ((pMCH->MemberInfo.RID.PortGID.AsReg64s.H !=0) || (pMCH->MemberInfo.RID.PortGID.AsReg64s.L!=0)) {
// add switches that belong to this group
if (pMCH->pPort->neighbor->nodep->NodeInfo.NodeType == STL_NODE_SW) {
NodeData *groupswitch = pMCH->pPort->neighbor->nodep;
uint8 switchentryport = pMCH->pPort->neighbor->PortNum ;
if (FSUCCESS !=XMLAddEdgeSwitchToGroup(fabricp, mcgmemberp, groupswitch, switchentryport)){
IXmlParserPrintError(state, "No switch found for MC Group\n");
return;
if (pMCH->pPort && pMCH->pPort->neighbor) {
if (pMCH->pPort->neighbor->nodep->NodeInfo.NodeType == STL_NODE_SW) {
NodeData *groupswitch = pMCH->pPort->neighbor->nodep;
uint8 switchentryport = pMCH->pPort->neighbor->PortNum ;
if (FSUCCESS !=XMLAddEdgeSwitchToGroup(fabricp, mcgmemberp, groupswitch, switchentryport)){
IXmlParserPrintError(state, "No switch found for MC Group\n");
return;
}
}
}
}
......
......@@ -1882,12 +1882,13 @@ FSTATUS GetAllMCGroupMember(FabricData_t *fabricp, McGroupData *mcgroupp, struct
mcmemberp->MemberInfo.RID.PortGID = pIbMCRR->McMemberRecords[i].RID.PortGID;
mcmemberp->pPort = FindPortGuid(fabricp, pIbMCRR->McMemberRecords[i].RID.PortGID.AsReg64s.L );
if (mcmemberp->pPort !=NULL)
if (mcmemberp->pPort && mcmemberp->pPort->neighbor) {
if (mcmemberp->pPort->neighbor->nodep->NodeInfo.NodeType == STL_NODE_SW) {
NodeData *groupswitch = mcmemberp->pPort->neighbor->nodep;
uint16 switchentryport = mcmemberp->pPort->neighbor->PortNum ;
AddEdgeSwitchToGroup(fabricp, mcgroupp, groupswitch, switchentryport );
}
}
if ((mcmemberp->MemberInfo.RID.PortGID.AsReg64s.H == 0) && (mcmemberp->MemberInfo.RID.PortGID.AsReg64s.L ==0 ))
mcgroupp->NumOfMembers--; // do count as valid member if PortGID is zero
QListSetObj(&mcmemberp->McMembersEntry, mcmemberp);
......@@ -2513,6 +2514,9 @@ FSTATUS GetAllPortCounters(EUI64 portGuid, IB_GID localGid, FabricData_t *fabric
PortStatusData.LinkDowned = PortStatus.LinkDowned;
PortStatusData.UncorrectableErrors = PortStatus.UncorrectableErrors;
PortStatusData.lq = PortStatus.lq;
PortStatusData.lq.AsReg8 |= ((portp->PortInfo.LinkWidthDowngrade.RxActive < portp->PortInfo.LinkWidth.Active ?
StlLinkWidthToInt(portp->PortInfo.LinkWidth.Active) -
StlLinkWidthToInt(portp->PortInfo.LinkWidthDowngrade.RxActive) : 0) << 4);
}
}
......
Name: opa
Version: 10.4.0.0
Release: 174%{?dist}
Release: 197%{?dist}
Summary: Intel Omni-Path basic tools and libraries for fabric managment.
Group: System Environment/Libraries
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment