]> git.ipfire.org Git - thirdparty/iproute2.git/commitdiff
rdma: Unify netlink attribute checks prior to prints
authorLeon Romanovsky <leonro@mellanox.com>
Sat, 23 Feb 2019 09:15:26 +0000 (11:15 +0200)
committerDavid Ahern <dsahern@gmail.com>
Sun, 24 Feb 2019 15:09:09 +0000 (07:09 -0800)
Place check if netlink attribute available in general place,
instead of doing the same check in many paces.

Reviewed-by: Steve Wise <swise@opengridcomputing.com>
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
Signed-off-by: David Ahern <dsahern@gmail.com>
rdma/res-cmid.c
rdma/res-cq.c
rdma/res-mr.c
rdma/res-pd.c
rdma/res-qp.c
rdma/res.c
rdma/res.h

index 12d1acee01b86a92f1c48c6600ceb5e254673806..22d99a8bb1daf6e5e4147f89a27f630aabad89d8 100644 (file)
@@ -202,16 +202,15 @@ static int res_cm_id_line(struct rd *rd, const char *name, int idx,
                jsonw_start_array(rd->jw);
 
        print_link(rd, idx, name, port, nla_line);
-       if (nla_line[RDMA_NLDEV_ATTR_RES_LQPN])
-               res_print_uint(rd, "lqpn", lqpn);
+       res_print_uint(rd, "cm-idn", cm_idn,
+                      nla_line[RDMA_NLDEV_ATTR_RES_CM_IDN]);
+       res_print_uint(rd, "lqpn", lqpn, nla_line[RDMA_NLDEV_ATTR_RES_LQPN]);
        if (nla_line[RDMA_NLDEV_ATTR_RES_TYPE])
                print_qp_type(rd, type);
        print_cm_id_state(rd, state);
        print_ps(rd, ps);
-       res_print_uint(rd, "pid", pid);
+       res_print_uint(rd, "pid", pid, nla_line[RDMA_NLDEV_ATTR_RES_PID]);
        print_comm(rd, comm, nla_line);
-       if (nla_line[RDMA_NLDEV_ATTR_RES_CM_IDN])
-               res_print_uint(rd, "cm-idn", cm_idn);
 
        if (nla_line[RDMA_NLDEV_ATTR_RES_SRC_ADDR])
                print_ipaddr(rd, "src-addr", src_addr_str, src_port);
index e50d76ce31349b0df147ef4d1a9a0f7db211446b..cea4f6bd9ae07fd6fddde826c4997e8667dcfc30 100644 (file)
@@ -17,8 +17,11 @@ static const char *poll_ctx_to_str(uint8_t idx)
        return "UNKNOWN";
 }
 
-static void print_poll_ctx(struct rd *rd, uint8_t poll_ctx)
+static void print_poll_ctx(struct rd *rd, uint8_t poll_ctx, struct nlattr *attr)
 {
+       if (!attr)
+               return;
+
        if (rd->json_output) {
                jsonw_string_field(rd->jw, "poll-ctx",
                                   poll_ctx_to_str(poll_ctx));
@@ -92,18 +95,15 @@ static int res_cq_line(struct rd *rd, const char *name, int idx,
                jsonw_start_array(rd->jw);
 
        print_dev(rd, idx, name);
-       res_print_uint(rd, "cqe", cqe);
-       res_print_uint(rd, "users", users);
-       if (nla_line[RDMA_NLDEV_ATTR_RES_POLL_CTX])
-               print_poll_ctx(rd, poll_ctx);
-       res_print_uint(rd, "pid", pid);
+       res_print_uint(rd, "cqn", cqn, nla_line[RDMA_NLDEV_ATTR_RES_CQN]);
+       res_print_uint(rd, "cqe", cqe, nla_line[RDMA_NLDEV_ATTR_RES_CQE]);
+       res_print_uint(rd, "users", users,
+                      nla_line[RDMA_NLDEV_ATTR_RES_USECNT]);
+       print_poll_ctx(rd, poll_ctx, nla_line[RDMA_NLDEV_ATTR_RES_POLL_CTX]);
+       res_print_uint(rd, "ctxn", ctxn, nla_line[RDMA_NLDEV_ATTR_RES_CTXN]);
+       res_print_uint(rd, "pid", pid, nla_line[RDMA_NLDEV_ATTR_RES_PID]);
        print_comm(rd, comm, nla_line);
 
-       if (nla_line[RDMA_NLDEV_ATTR_RES_CQN])
-               res_print_uint(rd, "cqn", cqn);
-       if (nla_line[RDMA_NLDEV_ATTR_RES_CTXN])
-               res_print_uint(rd, "ctxn", ctxn);
-
        print_driver_table(rd, nla_line[RDMA_NLDEV_ATTR_DRIVER]);
        newline(rd);
 
index 36993b5e7c767132b7d7271ab331ae5e3f91f44e..82e6d150ab91ec33f8d1d92e2c7dc3a6094bf583 100644 (file)
@@ -67,22 +67,15 @@ static int res_mr_line(struct rd *rd, const char *name, int idx,
                jsonw_start_array(rd->jw);
 
        print_dev(rd, idx, name);
-       if (nla_line[RDMA_NLDEV_ATTR_RES_RKEY])
-               print_key(rd, "rkey", rkey);
-       if (nla_line[RDMA_NLDEV_ATTR_RES_LKEY])
-               print_key(rd, "lkey", lkey);
-       if (nla_line[RDMA_NLDEV_ATTR_RES_IOVA])
-               print_key(rd, "iova", iova);
-       res_print_uint(rd, "mrlen", mrlen);
-       res_print_uint(rd, "pid", pid);
+       res_print_uint(rd, "mrn", mrn, nla_line[RDMA_NLDEV_ATTR_RES_MRN]);
+       print_key(rd, "rkey", rkey, nla_line[RDMA_NLDEV_ATTR_RES_RKEY]);
+       print_key(rd, "lkey", lkey, nla_line[RDMA_NLDEV_ATTR_RES_LKEY]);
+       print_key(rd, "iova", iova, nla_line[RDMA_NLDEV_ATTR_RES_IOVA]);
+       res_print_uint(rd, "mrlen", mrlen, nla_line[RDMA_NLDEV_ATTR_RES_MRLEN]);
+       res_print_uint(rd, "pdn", pdn, nla_line[RDMA_NLDEV_ATTR_RES_PDN]);
+       res_print_uint(rd, "pid", pid, nla_line[RDMA_NLDEV_ATTR_RES_PID]);
        print_comm(rd, comm, nla_line);
 
-       if (nla_line[RDMA_NLDEV_ATTR_RES_MRN])
-               res_print_uint(rd, "mrn", mrn);
-
-       if (nla_line[RDMA_NLDEV_ATTR_RES_PDN])
-               res_print_uint(rd, "pdn", pdn);
-
        print_driver_table(rd, nla_line[RDMA_NLDEV_ATTR_DRIVER]);
        newline(rd);
 
index 3c9ffa4ea181e81c2378a5166c183d4f89a6d798..e8c042dc77293e784c6216ee310ee2e2efa96e6a 100644 (file)
@@ -69,18 +69,16 @@ static int res_pd_line(struct rd *rd, const char *name, int idx,
                jsonw_start_array(rd->jw);
 
        print_dev(rd, idx, name);
-       if (nla_line[RDMA_NLDEV_ATTR_RES_LOCAL_DMA_LKEY])
-               print_key(rd, "local_dma_lkey", local_dma_lkey);
-       res_print_uint(rd, "users", users);
-       if (nla_line[RDMA_NLDEV_ATTR_RES_UNSAFE_GLOBAL_RKEY])
-               print_key(rd, "unsafe_global_rkey", unsafe_global_rkey);
-       res_print_uint(rd, "pid", pid);
+       res_print_uint(rd, "pdn", pdn, nla_line[RDMA_NLDEV_ATTR_RES_PDN]);
+       print_key(rd, "local_dma_lkey", local_dma_lkey,
+                 nla_line[RDMA_NLDEV_ATTR_RES_LOCAL_DMA_LKEY]);
+       res_print_uint(rd, "users", users,
+                      nla_line[RDMA_NLDEV_ATTR_RES_USECNT]);
+       print_key(rd, "unsafe_global_rkey", unsafe_global_rkey,
+                 nla_line[RDMA_NLDEV_ATTR_RES_UNSAFE_GLOBAL_RKEY]);
+       res_print_uint(rd, "ctxn", ctxn, nla_line[RDMA_NLDEV_ATTR_RES_CTXN]);
+       res_print_uint(rd, "pid", pid, nla_line[RDMA_NLDEV_ATTR_RES_PID]);
        print_comm(rd, comm, nla_line);
-       if (nla_line[RDMA_NLDEV_ATTR_RES_CTXN])
-               res_print_uint(rd, "ctxn", ctxn);
-
-       if (nla_line[RDMA_NLDEV_ATTR_RES_PDN])
-               res_print_uint(rd, "pdn", pdn);
 
        print_driver_table(rd, nla_line[RDMA_NLDEV_ATTR_DRIVER]);
        newline(rd);
index e74c8b01660f3ebcdfd3e3ca100eb077c69380c6..5d5ef27b46c38a2ae586545e0ff811269bbafa43 100644 (file)
@@ -176,19 +176,19 @@ static int res_qp_line(struct rd *rd, const char *name, int idx,
 
        print_link(rd, idx, name, port, nla_line);
 
-       res_print_uint(rd, "lqpn", lqpn);
-       if (nla_line[RDMA_NLDEV_ATTR_RES_PDN])
-               res_print_uint(rd, "pdn", pdn);
+       res_print_uint(rd, "lqpn", lqpn, nla_line[RDMA_NLDEV_ATTR_RES_LQPN]);
        print_rqpn(rd, rqpn, nla_line);
 
        print_type(rd, type);
        print_state(rd, state);
 
        print_rqpsn(rd, rq_psn, nla_line);
-       res_print_uint(rd, "sq-psn", sq_psn);
+       res_print_uint(rd, "sq-psn", sq_psn,
+                      nla_line[RDMA_NLDEV_ATTR_RES_SQ_PSN]);
 
        print_pathmig(rd, path_mig_state, nla_line);
-       res_print_uint(rd, "pid", pid);
+       res_print_uint(rd, "pdn", pdn, nla_line[RDMA_NLDEV_ATTR_RES_PDN]);
+       res_print_uint(rd, "pid", pid, nla_line[RDMA_NLDEV_ATTR_RES_PID]);
        print_comm(rd, comm, nla_line);
 
        print_driver_table(rd, nla_line[RDMA_NLDEV_ATTR_DRIVER]);
index 140c0908ee6fa9e10206200fa9c6303ff1947746..564af9b4d7b4175589913dc1b464096dc030a15a 100644 (file)
@@ -47,7 +47,9 @@ static int res_print_summary(struct rd *rd, struct nlattr **tb)
 
                name = mnl_attr_get_str(nla_line[RDMA_NLDEV_ATTR_RES_SUMMARY_ENTRY_NAME]);
                curr = mnl_attr_get_u64(nla_line[RDMA_NLDEV_ATTR_RES_SUMMARY_ENTRY_CURR]);
-               res_print_uint(rd, name, curr);
+               res_print_uint(
+                       rd, name, curr,
+                       nla_line[RDMA_NLDEV_ATTR_RES_SUMMARY_ENTRY_CURR]);
        }
        return 0;
 }
@@ -188,16 +190,24 @@ char *get_task_name(uint32_t pid)
        return comm;
 }
 
-void print_key(struct rd *rd, const char *name, uint64_t val)
+void print_key(struct rd *rd, const char *name, uint64_t val,
+              struct nlattr *nlattr)
 {
+       if (!nlattr)
+               return;
+
        if (rd->json_output)
                jsonw_xint_field(rd->jw, name, val);
        else
                pr_out("%s 0x%" PRIx64 " ", name, val);
 }
 
-void res_print_uint(struct rd *rd, const char *name, uint64_t val)
+void res_print_uint(struct rd *rd, const char *name, uint64_t val,
+                   struct nlattr *nlattr)
 {
+       if (!nlattr)
+               return;
+
        if (rd->json_output)
                jsonw_u64_field(rd->jw, name, val);
        else
index 89dd818ae3d41a49adbe65a8ea86edd7458d2246..575e1192341c0e05fe23fb0322aee078540d1ccc 100644 (file)
@@ -112,8 +112,10 @@ char *get_task_name(uint32_t pid);
 void print_dev(struct rd *rd, uint32_t idx, const char *name);
 void print_link(struct rd *rd, uint32_t idx, const char *name, uint32_t port,
                struct nlattr **nla_line);
-void print_key(struct rd *rd, const char *name, uint64_t val);
-void res_print_uint(struct rd *rd, const char *name, uint64_t val);
+void print_key(struct rd *rd, const char *name, uint64_t val,
+              struct nlattr *nlattr);
+void res_print_uint(struct rd *rd, const char *name, uint64_t val,
+                   struct nlattr *nlattr);
 void print_comm(struct rd *rd, const char *str, struct nlattr **nla_line);
 const char *qp_types_to_str(uint8_t idx);