OSDN Git Service

RDMA/cm: Add accessors for CM_REQ transport_type
authorJason Gunthorpe <jgg@mellanox.com>
Thu, 16 Jan 2020 17:00:31 +0000 (13:00 -0400)
committerJason Gunthorpe <jgg@mellanox.com>
Sat, 25 Jan 2020 19:05:59 +0000 (15:05 -0400)
Access the two fields through wrappers, like all other fields, to make it
clearer what is happening.

Link: https://lore.kernel.org/r/20200116170037.30109-2-jgg@ziepe.ca
Tested-by: Leon Romanovsky <leonro@mellanox.com>
Reviewed-by: Leon Romanovsky <leonro@mellanox.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
drivers/infiniband/core/cm_msgs.h

index 23e3d0c..9af9a32 100644 (file)
@@ -124,14 +124,37 @@ static inline void cm_req_set_remote_resp_timeout(struct cm_req_msg *req_msg,
                                          0xFFFFFF07));
 }
 
+static inline u8 cm_req_get_transport_type(struct cm_req_msg *req_msg)
+{
+       return (u8) ((be32_to_cpu(req_msg->offset40) & 0x06) >> 1);
+}
+
+static inline void cm_req_set_transport_type(struct cm_req_msg *req_msg, u8 val)
+{
+       req_msg->offset40 =
+               cpu_to_be32((be32_to_cpu(req_msg->offset40) & 0xFFFFFFF9) |
+               (val << 1));
+}
+
+static inline u8 cm_req_get_transport_type_ex(struct cm_req_msg *req_msg)
+{
+       return req_msg->offset51 & 0x7;
+}
+
+static inline void cm_req_set_transport_type_ex(struct cm_req_msg *req_msg,
+                                               u8 val)
+{
+       req_msg->offset51 = (req_msg->offset51 & 0xF8) | val;
+}
+
 static inline enum ib_qp_type cm_req_get_qp_type(struct cm_req_msg *req_msg)
 {
-       u8 transport_type = (u8) (be32_to_cpu(req_msg->offset40) & 0x06) >> 1;
+       u8 transport_type = cm_req_get_transport_type(req_msg);
        switch(transport_type) {
        case 0: return IB_QPT_RC;
        case 1: return IB_QPT_UC;
        case 3:
-               switch (req_msg->offset51 & 0x7) {
+               switch (cm_req_get_transport_type_ex(req_msg)) {
                case 1: return IB_QPT_XRC_TGT;
                default: return 0;
                }
@@ -144,20 +167,14 @@ static inline void cm_req_set_qp_type(struct cm_req_msg *req_msg,
 {
        switch(qp_type) {
        case IB_QPT_UC:
-               req_msg->offset40 = cpu_to_be32((be32_to_cpu(
-                                                 req_msg->offset40) &
-                                                  0xFFFFFFF9) | 0x2);
+               cm_req_set_transport_type(req_msg, 1);
                break;
        case IB_QPT_XRC_INI:
-               req_msg->offset40 = cpu_to_be32((be32_to_cpu(
-                                                req_msg->offset40) &
-                                                  0xFFFFFFF9) | 0x6);
-               req_msg->offset51 = (req_msg->offset51 & 0xF8) | 1;
+               cm_req_set_transport_type(req_msg, 3);
+               cm_req_set_transport_type_ex(req_msg, 1);
                break;
        default:
-               req_msg->offset40 = cpu_to_be32(be32_to_cpu(
-                                                req_msg->offset40) &
-                                                 0xFFFFFFF9);
+               cm_req_set_transport_type(req_msg, 0);
        }
 }