]> git.proxmox.com Git - mirror_ubuntu-focal-kernel.git/commitdiff
RDMA/rxe: Distinguish between down links and disabled links
authorAndrew Boyer <andrew.boyer@dell.com>
Thu, 1 Nov 2018 13:18:45 +0000 (09:18 -0400)
committerJason Gunthorpe <jgg@mellanox.com>
Thu, 8 Nov 2018 21:22:53 +0000 (14:22 -0700)
In ib_query_port(), use the netdev's IFF_UP flag to determine phys_state
(flag set = down = POLLING, flag clear = disabled = DISABLED).

Callers can then use the phys_state field to distinguish between links
which have a dead partner, cable missing, etc., from links which are
turned off on the local node. This is useful for HA and supportability.

Signed-off-by: Andrew Boyer <andrew.boyer@dell.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
drivers/infiniband/sw/rxe/rxe.h
drivers/infiniband/sw/rxe/rxe_net.c
drivers/infiniband/sw/rxe/rxe_verbs.c

index d9ec2de6873869a218a06ecf57f252bbc4ff5d74..8f79bd86d0337fdf2d9e38bd16b20ec61a8ae124 100644 (file)
@@ -65,8 +65,9 @@
  */
 #define RXE_UVERBS_ABI_VERSION         2
 
-#define IB_PHYS_STATE_LINK_UP          (5)
-#define IB_PHYS_STATE_LINK_DOWN                (3)
+#define RDMA_LINK_PHYS_STATE_LINK_UP   (5)
+#define RDMA_LINK_PHYS_STATE_DISABLED  (3)
+#define RDMA_LINK_PHYS_STATE_POLLING   (2)
 
 #define RXE_ROCE_V2_SPORT              (0xc000)
 
index 40e82e0f6c2d2265e06db58f445869d6afcea73b..cb028a3d82758f61c6250b311c596b272d29681f 100644 (file)
@@ -607,7 +607,6 @@ void rxe_port_up(struct rxe_dev *rxe)
 
        port = &rxe->port;
        port->attr.state = IB_PORT_ACTIVE;
-       port->attr.phys_state = IB_PHYS_STATE_LINK_UP;
 
        rxe_port_event(rxe, IB_EVENT_PORT_ACTIVE);
        dev_info(&rxe->ib_dev.dev, "set active\n");
@@ -620,7 +619,6 @@ void rxe_port_down(struct rxe_dev *rxe)
 
        port = &rxe->port;
        port->attr.state = IB_PORT_DOWN;
-       port->attr.phys_state = IB_PHYS_STATE_LINK_DOWN;
 
        rxe_port_event(rxe, IB_EVENT_PORT_ERR);
        dev_info(&rxe->ib_dev.dev, "set down\n");
index 9c19f2027511b1fb2c093360b275471cc158c14c..4eef87c103b2ff4773fd019f24dc752641cb7fca 100644 (file)
@@ -71,6 +71,14 @@ static int rxe_query_port(struct ib_device *dev,
        mutex_lock(&rxe->usdev_lock);
        rc = ib_get_eth_speed(dev, port_num, &attr->active_speed,
                              &attr->active_width);
+
+       if (attr->state == IB_PORT_ACTIVE)
+               attr->phys_state = RDMA_LINK_PHYS_STATE_LINK_UP;
+       else if (dev_get_flags(rxe->ndev) & IFF_UP)
+               attr->phys_state = RDMA_LINK_PHYS_STATE_POLLING;
+       else
+               attr->phys_state = RDMA_LINK_PHYS_STATE_DISABLED;
+
        mutex_unlock(&rxe->usdev_lock);
 
 out: