- char *comm = NULL;
- uint32_t pid = 0;
- uint8_t poll_ctx = 0;
- uint32_t ctxn = 0;
- uint32_t cqn = 0;
- uint64_t users;
- uint32_t cqe;
- int err;
-
- err = mnl_attr_parse_nested(nla_entry, rd_attr_cb, nla_line);
- if (err != MNL_CB_OK)
- return MNL_CB_ERROR;
-
- if (!nla_line[RDMA_NLDEV_ATTR_RES_CQE] ||
- !nla_line[RDMA_NLDEV_ATTR_RES_USECNT] ||
- (!nla_line[RDMA_NLDEV_ATTR_RES_PID] &&
- !nla_line[RDMA_NLDEV_ATTR_RES_KERN_NAME])) {
- return MNL_CB_ERROR;
- }
-
- cqe = mnl_attr_get_u32(nla_line[RDMA_NLDEV_ATTR_RES_CQE]);
-
- users = mnl_attr_get_u64(nla_line[RDMA_NLDEV_ATTR_RES_USECNT]);
- if (rd_check_is_filtered(rd, "users", users))
- continue;
-
- if (nla_line[RDMA_NLDEV_ATTR_RES_POLL_CTX]) {
- poll_ctx = mnl_attr_get_u8(
- nla_line[RDMA_NLDEV_ATTR_RES_POLL_CTX]);
- if (rd_check_is_string_filtered(
- rd, "poll-ctx", poll_ctx_to_str(poll_ctx)))
- continue;
- }
-
- if (nla_line[RDMA_NLDEV_ATTR_RES_PID]) {
- pid = mnl_attr_get_u32(
- nla_line[RDMA_NLDEV_ATTR_RES_PID]);
- comm = get_task_name(pid);
- }
-
- if (rd_check_is_filtered(rd, "pid", pid)) {
- free(comm);
- continue;
- }
-
- if (nla_line[RDMA_NLDEV_ATTR_RES_CQN])
- cqn = mnl_attr_get_u32(
- nla_line[RDMA_NLDEV_ATTR_RES_CQN]);
- if (rd_check_is_filtered(rd, "cqn", cqn))
- continue;
-
- if (nla_line[RDMA_NLDEV_ATTR_RES_CTXN])
- ctxn = mnl_attr_get_u32(
- nla_line[RDMA_NLDEV_ATTR_RES_CTXN]);
- if (rd_check_is_filtered(rd, "ctxn", ctxn))
- continue;
-
- if (nla_line[RDMA_NLDEV_ATTR_RES_KERN_NAME])
- /* discard const from mnl_attr_get_str */
- comm = (char *)mnl_attr_get_str(
- nla_line[RDMA_NLDEV_ATTR_RES_KERN_NAME]);
-
- if (rd->json_output)
- 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);
- 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);
-
- if (nla_line[RDMA_NLDEV_ATTR_RES_PID])
- free(comm);
-
- print_driver_table(rd, nla_line[RDMA_NLDEV_ATTR_DRIVER]);
- newline(rd);