Do not change port state on SubnSet

When changing physical state do not change logical port state to avoid invalid 
transitions in port state machine.
>From the IB spec When writing PortInfo:PortState, only legal transitions are
valid. So if PortState is ACTIVE and we try to set it to ACTIVE this will fail.

This patch will allow reset in a single MAD by changing physical state to 
polling.

Signed-off-by: Eli Dorfman <e...@voltaire.com>
---
 infiniband-diags/src/ibportstate.c |    5 ++++-
 1 files changed, 4 insertions(+), 1 deletions(-)

diff --git a/infiniband-diags/src/ibportstate.c 
b/infiniband-diags/src/ibportstate.c
index 65c9ca1..d19a2e5 100644
--- a/infiniband-diags/src/ibportstate.c
+++ b/infiniband-diags/src/ibportstate.c
@@ -275,8 +275,10 @@ int main(int argc, char **argv)
 
        /* Only if one of the "set" options is chosen */
        if (port_op) {
-               if (port_op == 1)               /* Enable port */
+               if (port_op == 1) {             /* Enable port */
                        mad_set_field(data, 0, IB_PORT_PHYS_STATE_F, 2);        
/* Polling */
+                       mad_set_field(data, 0, IB_PORT_STATE_F, 0);             
/* No Change */
+               }
                else if ((port_op == 2) || (port_op == 3)) { /* Disable port */
                        mad_set_field(data, 0, IB_PORT_STATE_F, 1);             
/* Down */
                        mad_set_field(data, 0, IB_PORT_PHYS_STATE_F, 3);        
/* Disabled */
@@ -292,6 +294,7 @@ int main(int argc, char **argv)
 
                if (port_op == 3) {     /* Reset port - so also enable */
                        mad_set_field(data, 0, IB_PORT_PHYS_STATE_F, 2);        
/* Polling */
+                       mad_set_field(data, 0, IB_PORT_STATE_F, 0);             
/* No Change */
                        err = set_port_info(&portid, data, portnum, port_op);
                        if (err < 0)
                                IBERROR("smp set portinfo failed");
-- 
1.5.5

_______________________________________________
general mailing list
general@lists.openfabrics.org
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general

To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general

Reply via email to