* [PATCH] infiniband-diags/ibportstate.c: Changes for extended link speeds
@ 2011-08-16 9:14 Hal Rosenstock
[not found] ` <4E4A34FF.2010400-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
0 siblings, 1 reply; 2+ messages in thread
From: Hal Rosenstock @ 2011-08-16 9:14 UTC (permalink / raw)
To: Ira Weiny; +Cc: linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Signed-off-by: Hal Rosenstock <hal-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
---
diff --git a/src/ibportstate.c b/src/ibportstate.c
index 1f0f42e..f7ad37f 100644
--- a/src/ibportstate.c
+++ b/src/ibportstate.c
@@ -1,6 +1,6 @@
/*
* Copyright (c) 2004-2009 Voltaire Inc. All rights reserved.
- * Copyright (c) 2011 Mellanox Technologies LTD. All rights reserved.
+ * Copyright (c) 2010,2011 Mellanox Technologies LTD. All rights reserved.
*
* This software is available to you under a choice of one of two
* licenses. You may choose to be licensed under the terms of the GNU
@@ -53,6 +53,7 @@ enum port_ops {
RESET,
DISABLE,
SPEED,
+ ESPEED,
WIDTH,
DOWN,
ARM,
@@ -66,6 +67,7 @@ enum port_ops {
struct ibmad_port *srcport;
int speed = 0; /* no state change */
+int espeed = 0; /* no state change */
int width = 0; /* no state change */
int lid;
int smlid;
@@ -83,6 +85,7 @@ struct {
{"reset", NULL, 0}, /* RESET */
{"disable", NULL, 0}, /* DISABLE */
{"speed", &speed, 0}, /* SPEED */
+ {"espeed", &espeed, 0}, /* EXTENDED SPEED */
{"width", &width, 0}, /* WIDTH */
{"down", NULL, 0}, /* DOWN */
{"arm", NULL, 0}, /* ARM */
@@ -99,7 +102,7 @@ struct {
/*******************************************/
/*
- * Return 1 if port is a switch, else zero.
+ * Return 1 if node is a switch, else zero.
*/
static int get_node_info(ib_portid_t * dest, uint8_t * data)
{
@@ -115,15 +118,30 @@ static int get_node_info(ib_portid_t * dest, uint8_t * data)
return 0;
}
-static void get_port_info(ib_portid_t * dest, uint8_t * data, int portnum)
+static int get_port_info(ib_portid_t * dest, uint8_t * data, int portnum,
+ int is_switch)
{
+ uint8_t smp[IB_SMP_DATA_SIZE];
+ uint8_t *info;
+ int cap_mask;
+
+ if (is_switch) {
+ if (!smp_query_via(smp, dest, IB_ATTR_PORT_INFO, 0, 0, srcport))
+ IBERROR("smp query port 0 portinfo failed");
+ info = smp;
+ } else
+ info = data;
+
if (!smp_query_via(data, dest, IB_ATTR_PORT_INFO, portnum, 0, srcport))
IBERROR("smp query portinfo failed");
+ cap_mask = mad_get_field(info, 0, IB_PORT_CAPMASK_F);
+ return (cap_mask & IB_PORT_CAP_HAS_EXT_SPEEDS);
}
-static void show_port_info(ib_portid_t * dest, uint8_t * data, int portnum)
+static void show_port_info(ib_portid_t * dest, uint8_t * data, int portnum,
+ int espeed_cap)
{
- char buf[2048];
+ char buf[2300];
char val[64];
mad_dump_portstates(buf, sizeof buf, data, sizeof *data);
@@ -163,17 +181,35 @@ static void show_port_info(ib_portid_t * dest, uint8_t * data, int portnum)
mad_dump_field(IB_PORT_LINK_SPEED_ACTIVE_F, buf + strlen(buf),
sizeof buf - strlen(buf), val);
sprintf(buf + strlen(buf), "%s", "\n");
+ if (espeed_cap) {
+ mad_decode_field(data, IB_PORT_LINK_SPEED_EXT_SUPPORTED_F, val);
+ mad_dump_field(IB_PORT_LINK_SPEED_EXT_SUPPORTED_F,
+ buf + strlen(buf), sizeof buf - strlen(buf),
+ val);
+ sprintf(buf + strlen(buf), "%s", "\n");
+ mad_decode_field(data, IB_PORT_LINK_SPEED_EXT_ENABLED_F, val);
+ mad_dump_field(IB_PORT_LINK_SPEED_EXT_ENABLED_F,
+ buf + strlen(buf), sizeof buf - strlen(buf),
+ val);
+ sprintf(buf + strlen(buf), "%s", "\n");
+ mad_decode_field(data, IB_PORT_LINK_SPEED_EXT_ACTIVE_F, val);
+ mad_dump_field(IB_PORT_LINK_SPEED_EXT_ACTIVE_F,
+ buf + strlen(buf), sizeof buf - strlen(buf),
+ val);
+ sprintf(buf + strlen(buf), "%s", "\n");
+ }
printf("# Port info: %s port %d\n%s", portid2str(dest), portnum, buf);
}
-static void set_port_info(ib_portid_t * dest, uint8_t * data, int portnum)
+static void set_port_info(ib_portid_t * dest, uint8_t * data, int portnum,
+ int espeed_cap)
{
if (!smp_set_via(data, dest, IB_ATTR_PORT_INFO, portnum, 0, srcport))
IBERROR("smp set portinfo failed");
printf("\nAfter PortInfo set:\n");
- show_port_info(dest, data, portnum);
+ show_port_info(dest, data, portnum, espeed_cap);
}
static int get_link_width(int lwe, int lws)
@@ -192,6 +228,14 @@ static int get_link_speed(int lse, int lss)
return lse;
}
+static int get_link_speed_ext(int lsee, int lses)
+{
+ if (lsee == 31)
+ return lses;
+ else
+ return lsee;
+}
+
static void validate_width(int width, int peerwidth, int lwa)
{
if ((width & peerwidth & 0x8)) {
@@ -222,7 +266,7 @@ static void validate_speed(int speed, int peerspeed, int lsa)
if ((speed & peerspeed & 0x4)) {
if (lsa != 4)
IBWARN
- ("Peer ports operating at active speed %d rather than 4 (10.0 Gbps)",
+ ("Peer ports operating at active speed %d rather than 4 (10.0 Gbps)",
lsa);
} else if ((speed & peerspeed & 0x2)) {
if (lsa != 2)
@@ -237,17 +281,32 @@ static void validate_speed(int speed, int peerspeed, int lsa)
}
}
+static void validate_extended_speed(int espeed, int peerespeed, int lsea)
+{
+ if ((espeed & peerespeed & 0x2)) {
+ if (lsea != 2)
+ IBWARN
+ ("Peer ports operating at active extended speed %d rather than 2 (25.78125 Gbps)",
+ lsea);
+ } else if ((espeed & peerespeed & 0x1)) {
+ if (lsea != 1)
+ IBWARN
+ ("Peer ports operating at active extended speed %d rather than 1 (14.0625 Gbps)",
+ lsea);
+ }
+}
+
int main(int argc, char **argv)
{
int mgmt_classes[3] =
{ IB_SMI_CLASS, IB_SMI_DIRECT_CLASS, IB_SA_CLASS };
ib_portid_t portid = { 0 };
int port_op = -1;
- int is_switch;
- int state, physstate, lwe, lws, lwa, lse, lss, lsa;
+ int is_switch, is_peer_switch, espeed_cap, peer_espeed_cap;
+ int state, physstate, lwe, lws, lwa, lse, lss, lsa, lsee, lses, lsea;
int peerlocalportnum, peerlwe, peerlws, peerlwa, peerlse, peerlss,
- peerlsa;
- int peerwidth, peerspeed;
+ peerlsa, peerlsee, peerlses, peerlsea;
+ int peerwidth, peerspeed, peerespeed;
uint8_t data[IB_SMP_DATA_SIZE] = { 0 };
ib_portid_t peerportid = { 0 };
int portnum = 0;
@@ -316,6 +375,10 @@ int main(int argc, char **argv)
if (val < 0 || val > 15)
IBERROR("invalid speed value %ld", val);
break;
+ case ESPEED:
+ if (val < 0 || val > 31)
+ IBERROR("invalid extended speed value %ld", val);
+ break;
case WIDTH:
if (val < 0 || (val > 15 && val != 255))
IBERROR("invalid width value %ld", val);
@@ -357,9 +420,8 @@ int main(int argc, char **argv)
printf("Initial %s PortInfo:\n", is_switch ? "Switch" : "CA");
else
printf("%s PortInfo:\n", is_switch ? "Switch" : "CA");
- memset(data, 0, sizeof(data));
- get_port_info(&portid, data, portnum);
- show_port_info(&portid, data, portnum);
+ espeed_cap = get_port_info(&portid, data, portnum, is_switch);
+ show_port_info(&portid, data, portnum, espeed_cap);
if (port_op != QUERY || changed) {
/*
@@ -397,8 +459,9 @@ int main(int argc, char **argv)
break;
}
- /* always set enabled speed/width - defaults to NOP */
+ /* always set enabled speeds/width - defaults to NOP */
mad_set_field(data, 0, IB_PORT_LINK_SPEED_ENABLED_F, speed);
+ mad_set_field(data, 0, IB_PORT_LINK_SPEED_EXT_ENABLED_F, espeed);
mad_set_field(data, 0, IB_PORT_LINK_WIDTH_ENABLED_F, width);
if (port_args[VLS].set)
@@ -412,7 +475,7 @@ int main(int argc, char **argv)
if (port_args[LMC].set)
mad_set_field(data, 0, IB_PORT_LMC_F, lmc);
- set_port_info(&portid, data, portnum);
+ set_port_info(&portid, data, portnum, is_switch);
} else if (is_switch && portnum) {
/* Now, make sure PortState is Active */
@@ -432,6 +495,17 @@ int main(int argc, char **argv)
&lsa);
mad_decode_field(data, IB_PORT_LINK_SPEED_ENABLED_F,
&lse);
+ if (espeed_cap) {
+ mad_decode_field(data,
+ IB_PORT_LINK_SPEED_EXT_SUPPORTED_F,
+ &lses);
+ mad_decode_field(data,
+ IB_PORT_LINK_SPEED_EXT_ACTIVE_F,
+ &lsea);
+ mad_decode_field(data,
+ IB_PORT_LINK_SPEED_EXT_ENABLED_F,
+ &lsee);
+ }
/* Setup portid for peer port */
memcpy(&peerportid, &portid, sizeof(peerportid));
@@ -446,15 +520,18 @@ int main(int argc, char **argv)
peerportid.drpath.drdlid = 0xffff;
/* Get peer port NodeInfo to obtain peer port number */
- get_node_info(&peerportid, data);
+ is_peer_switch = get_node_info(&peerportid, data);
mad_decode_field(data, IB_NODE_LOCAL_PORT_F,
&peerlocalportnum);
printf("Peer PortInfo:\n");
/* Get peer port characteristics */
- get_port_info(&peerportid, data, peerlocalportnum);
- show_port_info(&peerportid, data, peerlocalportnum);
+ peer_espeed_cap = get_port_info(&peerportid, data,
+ peerlocalportnum,
+ is_peer_switch);
+ show_port_info(&peerportid, data, peerlocalportnum,
+ peer_espeed_cap);
mad_decode_field(data, IB_PORT_LINK_WIDTH_ENABLED_F,
&peerlwe);
@@ -468,6 +545,17 @@ int main(int argc, char **argv)
&peerlsa);
mad_decode_field(data, IB_PORT_LINK_SPEED_ENABLED_F,
&peerlse);
+ if (peer_espeed_cap) {
+ mad_decode_field(data,
+ IB_PORT_LINK_SPEED_EXT_SUPPORTED_F,
+ &peerlses);
+ mad_decode_field(data,
+ IB_PORT_LINK_SPEED_EXT_ACTIVE_F,
+ &peerlsea);
+ mad_decode_field(data,
+ IB_PORT_LINK_SPEED_EXT_ENABLED_F,
+ &peerlsee);
+ }
/* Now validate peer port characteristics */
/* Examine Link Width */
@@ -475,10 +563,18 @@ int main(int argc, char **argv)
peerwidth = get_link_width(peerlwe, peerlws);
validate_width(width, peerwidth, lwa);
- /* Examine Link Speed */
+ /* Examine Link Speeds */
speed = get_link_speed(lse, lss);
peerspeed = get_link_speed(peerlse, peerlss);
validate_speed(speed, peerspeed, lsa);
+
+ if (espeed_cap && peer_espeed_cap) {
+ espeed = get_link_speed_ext(lsee, lses);
+ peerespeed = get_link_speed_ext(peerlsee,
+ peerlses);
+ validate_extended_speed(espeed, peerespeed,
+ lsea);
+ }
}
}
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] infiniband-diags/ibportstate.c: Changes for extended link speeds
[not found] ` <4E4A34FF.2010400-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
@ 2011-08-18 18:22 ` Ira Weiny
0 siblings, 0 replies; 2+ messages in thread
From: Ira Weiny @ 2011-08-18 18:22 UTC (permalink / raw)
To: Hal Rosenstock; +Cc: linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
On Tue, 16 Aug 2011 02:14:39 -0700
Hal Rosenstock <hal-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org> wrote:
>
> Signed-off-by: Hal Rosenstock <hal-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
Thanks applied,
Ira
> ---
> diff --git a/src/ibportstate.c b/src/ibportstate.c
> index 1f0f42e..f7ad37f 100644
> --- a/src/ibportstate.c
> +++ b/src/ibportstate.c
> @@ -1,6 +1,6 @@
> /*
> * Copyright (c) 2004-2009 Voltaire Inc. All rights reserved.
> - * Copyright (c) 2011 Mellanox Technologies LTD. All rights reserved.
> + * Copyright (c) 2010,2011 Mellanox Technologies LTD. All rights reserved.
> *
> * This software is available to you under a choice of one of two
> * licenses. You may choose to be licensed under the terms of the GNU
> @@ -53,6 +53,7 @@ enum port_ops {
> RESET,
> DISABLE,
> SPEED,
> + ESPEED,
> WIDTH,
> DOWN,
> ARM,
> @@ -66,6 +67,7 @@ enum port_ops {
>
> struct ibmad_port *srcport;
> int speed = 0; /* no state change */
> +int espeed = 0; /* no state change */
> int width = 0; /* no state change */
> int lid;
> int smlid;
> @@ -83,6 +85,7 @@ struct {
> {"reset", NULL, 0}, /* RESET */
> {"disable", NULL, 0}, /* DISABLE */
> {"speed", &speed, 0}, /* SPEED */
> + {"espeed", &espeed, 0}, /* EXTENDED SPEED */
> {"width", &width, 0}, /* WIDTH */
> {"down", NULL, 0}, /* DOWN */
> {"arm", NULL, 0}, /* ARM */
> @@ -99,7 +102,7 @@ struct {
> /*******************************************/
>
> /*
> - * Return 1 if port is a switch, else zero.
> + * Return 1 if node is a switch, else zero.
> */
> static int get_node_info(ib_portid_t * dest, uint8_t * data)
> {
> @@ -115,15 +118,30 @@ static int get_node_info(ib_portid_t * dest, uint8_t * data)
> return 0;
> }
>
> -static void get_port_info(ib_portid_t * dest, uint8_t * data, int portnum)
> +static int get_port_info(ib_portid_t * dest, uint8_t * data, int portnum,
> + int is_switch)
> {
> + uint8_t smp[IB_SMP_DATA_SIZE];
> + uint8_t *info;
> + int cap_mask;
> +
> + if (is_switch) {
> + if (!smp_query_via(smp, dest, IB_ATTR_PORT_INFO, 0, 0, srcport))
> + IBERROR("smp query port 0 portinfo failed");
> + info = smp;
> + } else
> + info = data;
> +
> if (!smp_query_via(data, dest, IB_ATTR_PORT_INFO, portnum, 0, srcport))
> IBERROR("smp query portinfo failed");
> + cap_mask = mad_get_field(info, 0, IB_PORT_CAPMASK_F);
> + return (cap_mask & IB_PORT_CAP_HAS_EXT_SPEEDS);
> }
>
> -static void show_port_info(ib_portid_t * dest, uint8_t * data, int portnum)
> +static void show_port_info(ib_portid_t * dest, uint8_t * data, int portnum,
> + int espeed_cap)
> {
> - char buf[2048];
> + char buf[2300];
> char val[64];
>
> mad_dump_portstates(buf, sizeof buf, data, sizeof *data);
> @@ -163,17 +181,35 @@ static void show_port_info(ib_portid_t * dest, uint8_t * data, int portnum)
> mad_dump_field(IB_PORT_LINK_SPEED_ACTIVE_F, buf + strlen(buf),
> sizeof buf - strlen(buf), val);
> sprintf(buf + strlen(buf), "%s", "\n");
> + if (espeed_cap) {
> + mad_decode_field(data, IB_PORT_LINK_SPEED_EXT_SUPPORTED_F, val);
> + mad_dump_field(IB_PORT_LINK_SPEED_EXT_SUPPORTED_F,
> + buf + strlen(buf), sizeof buf - strlen(buf),
> + val);
> + sprintf(buf + strlen(buf), "%s", "\n");
> + mad_decode_field(data, IB_PORT_LINK_SPEED_EXT_ENABLED_F, val);
> + mad_dump_field(IB_PORT_LINK_SPEED_EXT_ENABLED_F,
> + buf + strlen(buf), sizeof buf - strlen(buf),
> + val);
> + sprintf(buf + strlen(buf), "%s", "\n");
> + mad_decode_field(data, IB_PORT_LINK_SPEED_EXT_ACTIVE_F, val);
> + mad_dump_field(IB_PORT_LINK_SPEED_EXT_ACTIVE_F,
> + buf + strlen(buf), sizeof buf - strlen(buf),
> + val);
> + sprintf(buf + strlen(buf), "%s", "\n");
> + }
>
> printf("# Port info: %s port %d\n%s", portid2str(dest), portnum, buf);
> }
>
> -static void set_port_info(ib_portid_t * dest, uint8_t * data, int portnum)
> +static void set_port_info(ib_portid_t * dest, uint8_t * data, int portnum,
> + int espeed_cap)
> {
> if (!smp_set_via(data, dest, IB_ATTR_PORT_INFO, portnum, 0, srcport))
> IBERROR("smp set portinfo failed");
>
> printf("\nAfter PortInfo set:\n");
> - show_port_info(dest, data, portnum);
> + show_port_info(dest, data, portnum, espeed_cap);
> }
>
> static int get_link_width(int lwe, int lws)
> @@ -192,6 +228,14 @@ static int get_link_speed(int lse, int lss)
> return lse;
> }
>
> +static int get_link_speed_ext(int lsee, int lses)
> +{
> + if (lsee == 31)
> + return lses;
> + else
> + return lsee;
> +}
> +
> static void validate_width(int width, int peerwidth, int lwa)
> {
> if ((width & peerwidth & 0x8)) {
> @@ -222,7 +266,7 @@ static void validate_speed(int speed, int peerspeed, int lsa)
> if ((speed & peerspeed & 0x4)) {
> if (lsa != 4)
> IBWARN
> - ("Peer ports operating at active speed %d rather than 4 (10.0 Gbps)",
> + ("Peer ports operating at active speed %d rather than 4 (10.0 Gbps)",
> lsa);
> } else if ((speed & peerspeed & 0x2)) {
> if (lsa != 2)
> @@ -237,17 +281,32 @@ static void validate_speed(int speed, int peerspeed, int lsa)
> }
> }
>
> +static void validate_extended_speed(int espeed, int peerespeed, int lsea)
> +{
> + if ((espeed & peerespeed & 0x2)) {
> + if (lsea != 2)
> + IBWARN
> + ("Peer ports operating at active extended speed %d rather than 2 (25.78125 Gbps)",
> + lsea);
> + } else if ((espeed & peerespeed & 0x1)) {
> + if (lsea != 1)
> + IBWARN
> + ("Peer ports operating at active extended speed %d rather than 1 (14.0625 Gbps)",
> + lsea);
> + }
> +}
> +
> int main(int argc, char **argv)
> {
> int mgmt_classes[3] =
> { IB_SMI_CLASS, IB_SMI_DIRECT_CLASS, IB_SA_CLASS };
> ib_portid_t portid = { 0 };
> int port_op = -1;
> - int is_switch;
> - int state, physstate, lwe, lws, lwa, lse, lss, lsa;
> + int is_switch, is_peer_switch, espeed_cap, peer_espeed_cap;
> + int state, physstate, lwe, lws, lwa, lse, lss, lsa, lsee, lses, lsea;
> int peerlocalportnum, peerlwe, peerlws, peerlwa, peerlse, peerlss,
> - peerlsa;
> - int peerwidth, peerspeed;
> + peerlsa, peerlsee, peerlses, peerlsea;
> + int peerwidth, peerspeed, peerespeed;
> uint8_t data[IB_SMP_DATA_SIZE] = { 0 };
> ib_portid_t peerportid = { 0 };
> int portnum = 0;
> @@ -316,6 +375,10 @@ int main(int argc, char **argv)
> if (val < 0 || val > 15)
> IBERROR("invalid speed value %ld", val);
> break;
> + case ESPEED:
> + if (val < 0 || val > 31)
> + IBERROR("invalid extended speed value %ld", val);
> + break;
> case WIDTH:
> if (val < 0 || (val > 15 && val != 255))
> IBERROR("invalid width value %ld", val);
> @@ -357,9 +420,8 @@ int main(int argc, char **argv)
> printf("Initial %s PortInfo:\n", is_switch ? "Switch" : "CA");
> else
> printf("%s PortInfo:\n", is_switch ? "Switch" : "CA");
> - memset(data, 0, sizeof(data));
> - get_port_info(&portid, data, portnum);
> - show_port_info(&portid, data, portnum);
> + espeed_cap = get_port_info(&portid, data, portnum, is_switch);
> + show_port_info(&portid, data, portnum, espeed_cap);
>
> if (port_op != QUERY || changed) {
> /*
> @@ -397,8 +459,9 @@ int main(int argc, char **argv)
> break;
> }
>
> - /* always set enabled speed/width - defaults to NOP */
> + /* always set enabled speeds/width - defaults to NOP */
> mad_set_field(data, 0, IB_PORT_LINK_SPEED_ENABLED_F, speed);
> + mad_set_field(data, 0, IB_PORT_LINK_SPEED_EXT_ENABLED_F, espeed);
> mad_set_field(data, 0, IB_PORT_LINK_WIDTH_ENABLED_F, width);
>
> if (port_args[VLS].set)
> @@ -412,7 +475,7 @@ int main(int argc, char **argv)
> if (port_args[LMC].set)
> mad_set_field(data, 0, IB_PORT_LMC_F, lmc);
>
> - set_port_info(&portid, data, portnum);
> + set_port_info(&portid, data, portnum, is_switch);
>
> } else if (is_switch && portnum) {
> /* Now, make sure PortState is Active */
> @@ -432,6 +495,17 @@ int main(int argc, char **argv)
> &lsa);
> mad_decode_field(data, IB_PORT_LINK_SPEED_ENABLED_F,
> &lse);
> + if (espeed_cap) {
> + mad_decode_field(data,
> + IB_PORT_LINK_SPEED_EXT_SUPPORTED_F,
> + &lses);
> + mad_decode_field(data,
> + IB_PORT_LINK_SPEED_EXT_ACTIVE_F,
> + &lsea);
> + mad_decode_field(data,
> + IB_PORT_LINK_SPEED_EXT_ENABLED_F,
> + &lsee);
> + }
>
> /* Setup portid for peer port */
> memcpy(&peerportid, &portid, sizeof(peerportid));
> @@ -446,15 +520,18 @@ int main(int argc, char **argv)
> peerportid.drpath.drdlid = 0xffff;
>
> /* Get peer port NodeInfo to obtain peer port number */
> - get_node_info(&peerportid, data);
> + is_peer_switch = get_node_info(&peerportid, data);
>
> mad_decode_field(data, IB_NODE_LOCAL_PORT_F,
> &peerlocalportnum);
>
> printf("Peer PortInfo:\n");
> /* Get peer port characteristics */
> - get_port_info(&peerportid, data, peerlocalportnum);
> - show_port_info(&peerportid, data, peerlocalportnum);
> + peer_espeed_cap = get_port_info(&peerportid, data,
> + peerlocalportnum,
> + is_peer_switch);
> + show_port_info(&peerportid, data, peerlocalportnum,
> + peer_espeed_cap);
>
> mad_decode_field(data, IB_PORT_LINK_WIDTH_ENABLED_F,
> &peerlwe);
> @@ -468,6 +545,17 @@ int main(int argc, char **argv)
> &peerlsa);
> mad_decode_field(data, IB_PORT_LINK_SPEED_ENABLED_F,
> &peerlse);
> + if (peer_espeed_cap) {
> + mad_decode_field(data,
> + IB_PORT_LINK_SPEED_EXT_SUPPORTED_F,
> + &peerlses);
> + mad_decode_field(data,
> + IB_PORT_LINK_SPEED_EXT_ACTIVE_F,
> + &peerlsea);
> + mad_decode_field(data,
> + IB_PORT_LINK_SPEED_EXT_ENABLED_F,
> + &peerlsee);
> + }
>
> /* Now validate peer port characteristics */
> /* Examine Link Width */
> @@ -475,10 +563,18 @@ int main(int argc, char **argv)
> peerwidth = get_link_width(peerlwe, peerlws);
> validate_width(width, peerwidth, lwa);
>
> - /* Examine Link Speed */
> + /* Examine Link Speeds */
> speed = get_link_speed(lse, lss);
> peerspeed = get_link_speed(peerlse, peerlss);
> validate_speed(speed, peerspeed, lsa);
> +
> + if (espeed_cap && peer_espeed_cap) {
> + espeed = get_link_speed_ext(lsee, lses);
> + peerespeed = get_link_speed_ext(peerlsee,
> + peerlses);
> + validate_extended_speed(espeed, peerespeed,
> + lsea);
> + }
> }
> }
>
--
Ira Weiny
Math Programmer/Computer Scientist
Lawrence Livermore National Lab
925-423-8008
weiny2-i2BcT+NCU+M@public.gmane.org
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2011-08-18 18:22 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-08-16 9:14 [PATCH] infiniband-diags/ibportstate.c: Changes for extended link speeds Hal Rosenstock
[not found] ` <4E4A34FF.2010400-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
2011-08-18 18:22 ` Ira Weiny
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox