RDMA/CMA: Add rdma_port_space to UAPI
authorSteve Wise <swise@opengridcomputing.com>
Tue, 27 Mar 2018 15:38:07 +0000 (08:38 -0700)
committerJason Gunthorpe <jgg@mellanox.com>
Thu, 29 Mar 2018 02:50:45 +0000 (20:50 -0600)
Since the rdma_port_space enum is being passed between user and kernel for
user cm_id setup, we need it in a UAPI header.  So add it to
rdma_user_cm.h.

This also fixes the cm_id restrack changes which pass up the port space
value via the RDMA_NLDEV_ATTR_RES_PS attribute.

Fixes: 00313983cda6 ("RDMA/nldev: provide detailed CM_ID information")
Signed-off-by: Steve Wise <swise@opengridcomputing.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
drivers/infiniband/core/cma.c
include/rdma/rdma_cm.h
include/uapi/rdma/rdma_user_cm.h

index 8512f633efd64283db1066d40404bebcb6954211..b3574d4eeea93106d8062aff2e8cc616405a04c3 100644 (file)
@@ -175,7 +175,7 @@ static struct cma_pernet *cma_pernet(struct net *net)
        return net_generic(net, cma_pernet_id);
 }
 
-static struct idr *cma_pernet_idr(struct net *net, enum rdma_port_space ps)
+static struct idr *cma_pernet_idr(struct net *net, enum rdma_ucm_port_space ps)
 {
        struct cma_pernet *pernet = cma_pernet(net);
 
@@ -204,7 +204,7 @@ struct cma_device {
 };
 
 struct rdma_bind_list {
-       enum rdma_port_space    ps;
+       enum rdma_ucm_port_space ps;
        struct hlist_head       owners;
        unsigned short          port;
 };
@@ -217,7 +217,7 @@ struct class_port_info_context {
        u8                              port_num;
 };
 
-static int cma_ps_alloc(struct net *net, enum rdma_port_space ps,
+static int cma_ps_alloc(struct net *net, enum rdma_ucm_port_space ps,
                        struct rdma_bind_list *bind_list, int snum)
 {
        struct idr *idr = cma_pernet_idr(net, ps);
@@ -226,14 +226,15 @@ static int cma_ps_alloc(struct net *net, enum rdma_port_space ps,
 }
 
 static struct rdma_bind_list *cma_ps_find(struct net *net,
-                                         enum rdma_port_space ps, int snum)
+                                         enum rdma_ucm_port_space ps, int snum)
 {
        struct idr *idr = cma_pernet_idr(net, ps);
 
        return idr_find(idr, snum);
 }
 
-static void cma_ps_remove(struct net *net, enum rdma_port_space ps, int snum)
+static void cma_ps_remove(struct net *net, enum rdma_ucm_port_space ps,
+                         int snum)
 {
        struct idr *idr = cma_pernet_idr(net, ps);
 
@@ -742,7 +743,7 @@ static void cma_deref_id(struct rdma_id_private *id_priv)
 
 struct rdma_cm_id *__rdma_create_id(struct net *net,
                                    rdma_cm_event_handler event_handler,
-                                   void *context, enum rdma_port_space ps,
+                                   void *context, enum rdma_ucm_port_space ps,
                                    enum ib_qp_type qp_type, const char *caller)
 {
        struct rdma_id_private *id_priv;
@@ -1366,7 +1367,7 @@ static struct net_device *cma_get_net_dev(struct ib_cm_event *ib_event,
        return net_dev;
 }
 
-static enum rdma_port_space rdma_ps_from_service_id(__be64 service_id)
+static enum rdma_ucm_port_space rdma_ps_from_service_id(__be64 service_id)
 {
        return (be64_to_cpu(service_id) >> 16) & 0xffff;
 }
@@ -2994,7 +2995,7 @@ static void cma_bind_port(struct rdma_bind_list *bind_list,
        hlist_add_head(&id_priv->node, &bind_list->owners);
 }
 
-static int cma_alloc_port(enum rdma_port_space ps,
+static int cma_alloc_port(enum rdma_ucm_port_space ps,
                          struct rdma_id_private *id_priv, unsigned short snum)
 {
        struct rdma_bind_list *bind_list;
@@ -3057,7 +3058,7 @@ static int cma_port_is_unique(struct rdma_bind_list *bind_list,
        return 0;
 }
 
-static int cma_alloc_any_port(enum rdma_port_space ps,
+static int cma_alloc_any_port(enum rdma_ucm_port_space ps,
                              struct rdma_id_private *id_priv)
 {
        static unsigned int last_used_port;
@@ -3135,7 +3136,7 @@ static int cma_check_port(struct rdma_bind_list *bind_list,
        return 0;
 }
 
-static int cma_use_port(enum rdma_port_space ps,
+static int cma_use_port(enum rdma_ucm_port_space ps,
                        struct rdma_id_private *id_priv)
 {
        struct rdma_bind_list *bind_list;
@@ -3169,8 +3170,8 @@ static int cma_bind_listen(struct rdma_id_private *id_priv)
        return ret;
 }
 
-static enum rdma_port_space cma_select_inet_ps(
-               struct rdma_id_private *id_priv)
+static enum rdma_ucm_port_space
+cma_select_inet_ps(struct rdma_id_private *id_priv)
 {
        switch (id_priv->id.ps) {
        case RDMA_PS_TCP:
@@ -3184,9 +3185,10 @@ static enum rdma_port_space cma_select_inet_ps(
        }
 }
 
-static enum rdma_port_space cma_select_ib_ps(struct rdma_id_private *id_priv)
+static enum rdma_ucm_port_space
+cma_select_ib_ps(struct rdma_id_private *id_priv)
 {
-       enum rdma_port_space ps = 0;
+       enum rdma_ucm_port_space ps = 0;
        struct sockaddr_ib *sib;
        u64 sid_ps, mask, sid;
 
@@ -3217,7 +3219,7 @@ static enum rdma_port_space cma_select_ib_ps(struct rdma_id_private *id_priv)
 
 static int cma_get_port(struct rdma_id_private *id_priv)
 {
-       enum rdma_port_space ps;
+       enum rdma_ucm_port_space ps;
        int ret;
 
        if (cma_family(id_priv) != AF_IB)
index 7652efc35eb984db98a1ed6a79c0bebe2362ef54..4480e636b9348b789bd23805d8d2124095faa00c 100644 (file)
@@ -38,6 +38,7 @@
 #include <linux/in6.h>
 #include <rdma/ib_addr.h>
 #include <rdma/ib_sa.h>
+#include <uapi/rdma/rdma_user_cm.h>
 
 /*
  * Upon receiving a device removal event, users must destroy the associated
@@ -64,13 +65,6 @@ enum rdma_cm_event_type {
 
 const char *__attribute_const__ rdma_event_msg(enum rdma_cm_event_type event);
 
-enum rdma_port_space {
-       RDMA_PS_IPOIB = 0x0002,
-       RDMA_PS_IB    = 0x013F,
-       RDMA_PS_TCP   = 0x0106,
-       RDMA_PS_UDP   = 0x0111,
-};
-
 #define RDMA_IB_IP_PS_MASK   0xFFFFFFFFFFFF0000ULL
 #define RDMA_IB_IP_PS_TCP    0x0000000001060000ULL
 #define RDMA_IB_IP_PS_UDP    0x0000000001110000ULL
@@ -151,15 +145,16 @@ struct rdma_cm_id {
        struct ib_qp            *qp;
        rdma_cm_event_handler    event_handler;
        struct rdma_route        route;
-       enum rdma_port_space     ps;
+       enum rdma_ucm_port_space ps;
        enum ib_qp_type          qp_type;
        u8                       port_num;
 };
 
 struct rdma_cm_id *__rdma_create_id(struct net *net,
-                                 rdma_cm_event_handler event_handler,
-                                 void *context, enum rdma_port_space ps,
-                                 enum ib_qp_type qp_type, const char *caller);
+                                   rdma_cm_event_handler event_handler,
+                                   void *context, enum rdma_ucm_port_space ps,
+                                   enum ib_qp_type qp_type,
+                                   const char *caller);
 
 /**
  * rdma_create_id - Create an RDMA identifier.
index c4f28cb92214fff39bbe1371900fd8dde693f2c3..e1269024af47f010e21270c90ca8739078b226bc 100644 (file)
@@ -70,6 +70,14 @@ enum {
        RDMA_USER_CM_CMD_JOIN_MCAST
 };
 
+/* See IBTA Annex A11, servies ID bytes 4 & 5 */
+enum rdma_ucm_port_space {
+       RDMA_PS_IPOIB = 0x0002,
+       RDMA_PS_IB    = 0x013F,
+       RDMA_PS_TCP   = 0x0106,
+       RDMA_PS_UDP   = 0x0111,
+};
+
 /*
  * command ABI structures.
  */
@@ -82,7 +90,7 @@ struct rdma_ucm_cmd_hdr {
 struct rdma_ucm_create_id {
        __aligned_u64 uid;
        __aligned_u64 response;
-       __u16 ps;
+       __u16 ps;                  /* use enum rdma_ucm_port_space */
        __u8  qp_type;
        __u8  reserved[5];
 };