From patchwork Wed Feb 20 07:21:34 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Leon Romanovsky X-Patchwork-Id: 1045180 X-Patchwork-Delegate: dsahern@gmail.com Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=kernel.org Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=kernel.org header.i=@kernel.org header.b="bfF3Sxtr"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 4448Ff2YHMz9s5c for ; Wed, 20 Feb 2019 18:22:46 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730721AbfBTHWp (ORCPT ); Wed, 20 Feb 2019 02:22:45 -0500 Received: from mail.kernel.org ([198.145.29.99]:37238 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726486AbfBTHWo (ORCPT ); Wed, 20 Feb 2019 02:22:44 -0500 Received: from localhost (unknown [77.138.135.184]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 043D22147A; Wed, 20 Feb 2019 07:22:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1550647363; bh=Z/6IDiE0SgYMz4AAY6VIHzPjHkSVLAEoH8cwpIMMpnE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=bfF3SxtrXcUF6dZ1lddA9yCUSmDkiFRaR7Ve6AbF7ttaOzTfNKr7inBt283fs7dbl L3444Aa7X9U8Z+hxoOZdDW83P4B3r8CFACgHNS1z+IaGRTwarygI9wp8/WL6qC6Xcl qelu83JEqlwyHk1KoM8M1gg8+KX/+pz0jRheigkY= From: Leon Romanovsky To: David Ahern Cc: Leon Romanovsky , netdev , RDMA mailing list , Stephen Hemminger Subject: [PATCH iproute2-next v1 17/19] rdma: Unify netlink attribute checks prior to prints Date: Wed, 20 Feb 2019 09:21:34 +0200 Message-Id: <20190220072136.3840-18-leon@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190220072136.3840-1-leon@kernel.org> References: <20190220072136.3840-1-leon@kernel.org> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Leon Romanovsky Place check if netlink attribute available in general place, instead of doing the same check in many paces. Signed-off-by: Leon Romanovsky Reviewed-by: Steve Wise --- rdma/res-cmid.c | 9 ++++----- rdma/res-cq.c | 22 +++++++++++----------- rdma/res-mr.c | 21 +++++++-------------- rdma/res-pd.c | 20 +++++++++----------- rdma/res-qp.c | 10 +++++----- rdma/res.c | 16 +++++++++++++--- rdma/res.h | 6 ++++-- 7 files changed, 53 insertions(+), 51 deletions(-) diff --git a/rdma/res-cmid.c b/rdma/res-cmid.c index 12d1acee..22d99a8b 100644 --- a/rdma/res-cmid.c +++ b/rdma/res-cmid.c @@ -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); diff --git a/rdma/res-cq.c b/rdma/res-cq.c index e50d76ce..cea4f6bd 100644 --- a/rdma/res-cq.c +++ b/rdma/res-cq.c @@ -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); diff --git a/rdma/res-mr.c b/rdma/res-mr.c index 36993b5e..82e6d150 100644 --- a/rdma/res-mr.c +++ b/rdma/res-mr.c @@ -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); diff --git a/rdma/res-pd.c b/rdma/res-pd.c index 3c9ffa4e..e8c042dc 100644 --- a/rdma/res-pd.c +++ b/rdma/res-pd.c @@ -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); diff --git a/rdma/res-qp.c b/rdma/res-qp.c index e74c8b01..5d5ef27b 100644 --- a/rdma/res-qp.c +++ b/rdma/res-qp.c @@ -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]); diff --git a/rdma/res.c b/rdma/res.c index 140c0908..564af9b4 100644 --- a/rdma/res.c +++ b/rdma/res.c @@ -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 diff --git a/rdma/res.h b/rdma/res.h index 89dd818a..575e1192 100644 --- a/rdma/res.h +++ b/rdma/res.h @@ -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);