Skip to content

Commit a4eaf22

Browse files
authored
Merge pull request #1555 from mazorasaf/fix_iblinkinfo_incorrect_text
infiniband-diags: use correct port info to get cap_mask for ibnd_get_agg_linkspeedextsup
2 parents 1a1b4c8 + e62f0ae commit a4eaf22

File tree

2 files changed

+20
-17
lines changed

2 files changed

+20
-17
lines changed

infiniband-diags/ibdiag_common.c

+18-15
Original file line numberDiff line numberDiff line change
@@ -777,6 +777,19 @@ static unsigned int get_max(unsigned int num)
777777
return (1 << r);
778778
}
779779

780+
static uint8_t *get_port_info_for_cap_mask(ibnd_port_t *port)
781+
{
782+
uint8_t *info = NULL;
783+
784+
if (port->node->type == IB_NODE_SWITCH) {
785+
if (port->node->ports[0])
786+
info = (uint8_t *)&port->node->ports[0]->info;
787+
} else
788+
info = (uint8_t *)&port->info;
789+
790+
return info;
791+
}
792+
780793
void get_max_msg(char *width_msg, char *speed_msg, int msg_size, ibnd_port_t * port)
781794
{
782795
char buf[64];
@@ -797,24 +810,14 @@ void get_max_msg(char *width_msg, char *speed_msg, int msg_size, ibnd_port_t * p
797810
mad_dump_val(IB_PORT_LINK_WIDTH_ACTIVE_F,
798811
buf, 64, &max_width));
799812

800-
if (port->node->type == IB_NODE_SWITCH) {
801-
if (port->node->ports[0])
802-
info = (uint8_t *)&port->node->ports[0]->info;
803-
}
804-
else
805-
info = (uint8_t *)&port->info;
813+
info = get_port_info_for_cap_mask(port);
806814

807815
if (info)
808816
cap_mask = mad_get_field(info, 0, IB_PORT_CAPMASK_F);
809817
else
810818
cap_mask = 0;
811819

812-
info = NULL;
813-
if (port->remoteport->node->type == IB_NODE_SWITCH) {
814-
if (port->remoteport->node->ports[0])
815-
info = (uint8_t *)&port->remoteport->node->ports[0]->info;
816-
} else
817-
info = (uint8_t *)&port->remoteport->info;
820+
info = get_port_info_for_cap_mask(port->remoteport);
818821

819822
if (info)
820823
rem_cap_mask = mad_get_field(info, 0, IB_PORT_CAPMASK_F);
@@ -845,15 +848,15 @@ void get_max_msg(char *width_msg, char *speed_msg, int msg_size, ibnd_port_t * p
845848
return;
846849

847850
check_ext_speed:
848-
espeed = ibnd_get_agg_linkspeedextsup(port->info, port->info);
849-
e2speed = ibnd_get_agg_linkspeedextsup(port->remoteport->info,
851+
espeed = ibnd_get_agg_linkspeedextsup(get_port_info_for_cap_mask(port), port->info);
852+
e2speed = ibnd_get_agg_linkspeedextsup(get_port_info_for_cap_mask(port->remoteport),
850853
port->remoteport->info);
851854

852855
if (!espeed || !e2speed)
853856
goto check_fdr10_supp;
854857

855858
max_speed = get_max(espeed & e2speed);
856-
espeed = ibnd_get_agg_linkspeedext(port->info, port->info);
859+
espeed = ibnd_get_agg_linkspeedext(get_port_info_for_cap_mask(port), port->info);
857860

858861
if ((max_speed & espeed) == 0)
859862
// we are not at the max supported extended speed

libibnetdisc/ibnetdisc.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -1036,7 +1036,7 @@ int ibnd_get_agg_linkspeedext_field(void *cap_info, void *info,
10361036
enum MAD_FIELDS efield, enum MAD_FIELDS e2field)
10371037
{
10381038
int espeed = 0, e2speed = 0;
1039-
int cap_mask = mad_get_field(cap_info, 0, IB_PORT_CAPMASK_F);
1039+
int cap_mask = cap_info ? mad_get_field(cap_info, 0, IB_PORT_CAPMASK_F) : 0;
10401040
int cap_mask2 = 0;
10411041

10421042
if (cap_mask & be32toh(IB_PORT_CAP_HAS_EXT_SPEEDS)) {
@@ -1047,7 +1047,7 @@ int ibnd_get_agg_linkspeedext_field(void *cap_info, void *info,
10471047
espeed = 0;
10481048

10491049
if (cap_mask & be32toh(IB_PORT_CAP_HAS_CAP_MASK2))
1050-
cap_mask2 = mad_get_field(cap_info, 0, IB_PORT_CAPMASK2_F);
1050+
cap_mask2 = cap_info ? mad_get_field(cap_info, 0, IB_PORT_CAPMASK2_F) : 0;
10511051

10521052
if (cap_mask2 & be16toh(IB_PORT_CAP2_IS_EXT_SPEEDS_2_SUPPORTED)) {
10531053
e2speed = (mad_get_field(info, 0, e2field) << 5);

0 commit comments

Comments
 (0)