Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

RDMA/mana_ib: cleanup the usage of mana_gd_send_request()

Do not check the status of the response header returned by mana_gd_send_request(),
as the returned error code already indicates the request status.

The mana_gd_send_request() may return no error code and have the response status
GDMA_STATUS_MORE_ENTRIES, which is a successful completion. It is used
for checking the correctness of multi-request operations, such as creation of
a dma region with mana_ib_gd_create_dma_region().

Signed-off-by: Konstantin Taranov <kotaranov@microsoft.com>
Link: https://patch.msgid.link/20260318173939.1417856-1-kotaranov@linux.microsoft.com
Signed-off-by: Leon Romanovsky <leon@kernel.org>

authored by

Konstantin Taranov and committed by
Leon Romanovsky
5aa437c9 2bb02691

+31 -173
+26 -115
drivers/infiniband/hw/mana/main.c
··· 87 87 flags |= GDMA_PD_FLAG_ALLOW_GPA_MR; 88 88 89 89 req.flags = flags; 90 - err = mana_gd_send_request(gc, sizeof(req), &req, 91 - sizeof(resp), &resp); 92 - 93 - if (err || resp.hdr.status) { 94 - ibdev_dbg(&dev->ib_dev, 95 - "Failed to get pd_id err %d status %u\n", err, 96 - resp.hdr.status); 97 - if (!err) 98 - err = -EPROTO; 99 - 90 + err = mana_gd_send_request(gc, sizeof(req), &req, sizeof(resp), &resp); 91 + if (err) 100 92 return err; 101 - } 102 93 103 94 pd->pd_handle = resp.pd_handle; 104 95 pd->pdn = resp.pd_id; ··· 109 118 struct gdma_destroy_pd_req req = {}; 110 119 struct mana_ib_dev *dev; 111 120 struct gdma_context *gc; 112 - int err; 113 121 114 122 dev = container_of(ibdev, struct mana_ib_dev, ib_dev); 115 123 gc = mdev_to_gc(dev); ··· 117 127 sizeof(resp)); 118 128 119 129 req.pd_handle = pd->pd_handle; 120 - err = mana_gd_send_request(gc, sizeof(req), &req, 121 - sizeof(resp), &resp); 122 130 123 - if (err || resp.hdr.status) { 124 - ibdev_dbg(&dev->ib_dev, 125 - "Failed to destroy pd_handle 0x%llx err %d status %u", 126 - pd->pd_handle, err, resp.hdr.status); 127 - if (!err) 128 - err = -EPROTO; 129 - } 130 - 131 - return err; 131 + return mana_gd_send_request(gc, sizeof(req), &req, sizeof(resp), &resp); 132 132 } 133 133 134 134 static int mana_gd_destroy_doorbell_page(struct gdma_context *gc, ··· 126 146 { 127 147 struct gdma_destroy_resource_range_req req = {}; 128 148 struct gdma_resp_hdr resp = {}; 129 - int err; 130 149 131 150 mana_gd_init_req_hdr(&req.hdr, GDMA_DESTROY_RESOURCE_RANGE, 132 151 sizeof(req), sizeof(resp)); ··· 134 155 req.num_resources = 1; 135 156 req.allocated_resources = doorbell_page; 136 157 137 - err = mana_gd_send_request(gc, sizeof(req), &req, sizeof(resp), &resp); 138 - if (err || resp.status) { 139 - dev_err(gc->dev, 140 - "Failed to destroy doorbell page: ret %d, 0x%x\n", 141 - err, resp.status); 142 - return err ?: -EPROTO; 143 - } 144 - 145 - return 0; 158 + return mana_gd_send_request(gc, sizeof(req), &req, sizeof(resp), &resp); 146 159 } 147 160 148 161 static int mana_gd_allocate_doorbell_page(struct gdma_context *gc, ··· 155 184 req.allocated_resources = 0; 156 185 157 186 err = mana_gd_send_request(gc, sizeof(req), &req, sizeof(resp), &resp); 158 - if (err || resp.hdr.status) { 159 - dev_err(gc->dev, 160 - "Failed to allocate doorbell page: ret %d, 0x%x\n", 161 - err, resp.hdr.status); 162 - return err ?: -EPROTO; 163 - } 187 + if (err) 188 + return err; 164 189 165 190 *doorbell_page = resp.allocated_resources; 166 191 ··· 649 682 req.hdr.resp.msg_version = GDMA_MESSAGE_V4; 650 683 req.hdr.dev_id = dev->gdma_dev->dev_id; 651 684 652 - err = mana_gd_send_request(mdev_to_gc(dev), sizeof(req), 653 - &req, sizeof(resp), &resp); 654 - 655 - if (err) { 656 - ibdev_err(&dev->ib_dev, 657 - "Failed to query adapter caps err %d", err); 685 + err = mana_gd_send_request(mdev_to_gc(dev), sizeof(req), &req, 686 + sizeof(resp), &resp); 687 + if (err) 658 688 return err; 659 - } 660 689 661 690 caps->max_sq_id = resp.max_sq_id; 662 691 caps->max_rq_id = resp.max_rq_id; ··· 690 727 mana_gd_init_req_hdr(&req.hdr, GDMA_QUERY_MAX_RESOURCES, 691 728 sizeof(req), sizeof(resp)); 692 729 693 - err = mana_gd_send_request(mdev_to_gc(dev), sizeof(req), &req, sizeof(resp), &resp); 694 - if (err) { 695 - ibdev_err(&dev->ib_dev, 696 - "Failed to query adapter caps err %d", err); 730 + err = mana_gd_send_request(mdev_to_gc(dev), sizeof(req), &req, 731 + sizeof(resp), &resp); 732 + if (err) 697 733 return err; 698 - } 699 734 700 735 caps->max_qp_count = min_t(u32, resp.max_sq, resp.max_rq); 701 736 caps->max_cq_count = resp.max_cq; ··· 808 847 req.feature_flags |= MANA_IB_FEATURE_CLIENT_ERROR_CQE_REQUEST; 809 848 810 849 err = mana_gd_send_request(gc, sizeof(req), &req, sizeof(resp), &resp); 811 - if (err) { 812 - ibdev_err(&mdev->ib_dev, "Failed to create RNIC adapter err %d", err); 850 + if (err) 813 851 return err; 814 - } 815 852 mdev->adapter_handle = resp.adapter; 816 853 817 854 return 0; ··· 820 861 struct mana_rnic_destroy_adapter_resp resp = {}; 821 862 struct mana_rnic_destroy_adapter_req req = {}; 822 863 struct gdma_context *gc; 823 - int err; 824 864 825 865 gc = mdev_to_gc(mdev); 826 866 mana_gd_init_req_hdr(&req.hdr, MANA_IB_DESTROY_ADAPTER, sizeof(req), sizeof(resp)); 827 867 req.hdr.dev_id = mdev->gdma_dev->dev_id; 828 868 req.adapter = mdev->adapter_handle; 829 869 830 - err = mana_gd_send_request(gc, sizeof(req), &req, sizeof(resp), &resp); 831 - if (err) { 832 - ibdev_err(&mdev->ib_dev, "Failed to destroy RNIC adapter err %d", err); 833 - return err; 834 - } 835 - 836 - return 0; 870 + return mana_gd_send_request(gc, sizeof(req), &req, sizeof(resp), &resp); 837 871 } 838 872 839 873 int mana_ib_gd_add_gid(const struct ib_gid_attr *attr, void **context) ··· 836 884 struct mana_rnic_config_addr_resp resp = {}; 837 885 struct gdma_context *gc = mdev_to_gc(mdev); 838 886 struct mana_rnic_config_addr_req req = {}; 839 - int err; 840 887 841 888 if (ntype != RDMA_NETWORK_IPV4 && ntype != RDMA_NETWORK_IPV6) { 842 889 ibdev_dbg(&mdev->ib_dev, "Unsupported rdma network type %d", ntype); ··· 849 898 req.sgid_type = (ntype == RDMA_NETWORK_IPV6) ? SGID_TYPE_IPV6 : SGID_TYPE_IPV4; 850 899 copy_in_reverse(req.ip_addr, attr->gid.raw, sizeof(union ib_gid)); 851 900 852 - err = mana_gd_send_request(gc, sizeof(req), &req, sizeof(resp), &resp); 853 - if (err) { 854 - ibdev_err(&mdev->ib_dev, "Failed to config IP addr err %d\n", err); 855 - return err; 856 - } 857 - 858 - return 0; 901 + return mana_gd_send_request(gc, sizeof(req), &req, sizeof(resp), &resp); 859 902 } 860 903 861 904 int mana_ib_gd_del_gid(const struct ib_gid_attr *attr, void **context) ··· 859 914 struct mana_rnic_config_addr_resp resp = {}; 860 915 struct gdma_context *gc = mdev_to_gc(mdev); 861 916 struct mana_rnic_config_addr_req req = {}; 862 - int err; 863 917 864 918 if (ntype != RDMA_NETWORK_IPV4 && ntype != RDMA_NETWORK_IPV6) { 865 919 ibdev_dbg(&mdev->ib_dev, "Unsupported rdma network type %d", ntype); ··· 872 928 req.sgid_type = (ntype == RDMA_NETWORK_IPV6) ? SGID_TYPE_IPV6 : SGID_TYPE_IPV4; 873 929 copy_in_reverse(req.ip_addr, attr->gid.raw, sizeof(union ib_gid)); 874 930 875 - err = mana_gd_send_request(gc, sizeof(req), &req, sizeof(resp), &resp); 876 - if (err) { 877 - ibdev_err(&mdev->ib_dev, "Failed to config IP addr err %d\n", err); 878 - return err; 879 - } 880 - 881 - return 0; 931 + return mana_gd_send_request(gc, sizeof(req), &req, sizeof(resp), &resp); 882 932 } 883 933 884 934 int mana_ib_gd_config_mac(struct mana_ib_dev *mdev, enum mana_ib_addr_op op, u8 *mac) ··· 880 942 struct mana_rnic_config_mac_addr_resp resp = {}; 881 943 struct mana_rnic_config_mac_addr_req req = {}; 882 944 struct gdma_context *gc = mdev_to_gc(mdev); 883 - int err; 884 945 885 946 mana_gd_init_req_hdr(&req.hdr, MANA_IB_CONFIG_MAC_ADDR, sizeof(req), sizeof(resp)); 886 947 req.hdr.dev_id = mdev->gdma_dev->dev_id; ··· 887 950 req.op = op; 888 951 copy_in_reverse(req.mac_addr, mac, ETH_ALEN); 889 952 890 - err = mana_gd_send_request(gc, sizeof(req), &req, sizeof(resp), &resp); 891 - if (err) { 892 - ibdev_err(&mdev->ib_dev, "Failed to config Mac addr err %d", err); 893 - return err; 894 - } 895 - 896 - return 0; 953 + return mana_gd_send_request(gc, sizeof(req), &req, sizeof(resp), &resp); 897 954 } 898 955 899 956 int mana_ib_gd_create_cq(struct mana_ib_dev *mdev, struct mana_ib_cq *cq, u32 doorbell) ··· 927 996 struct gdma_context *gc = mdev_to_gc(mdev); 928 997 struct mana_rnic_destroy_cq_resp resp = {}; 929 998 struct mana_rnic_destroy_cq_req req = {}; 930 - int err; 931 999 932 1000 if (cq->cq_handle == INVALID_MANA_HANDLE) 933 1001 return 0; ··· 936 1006 req.adapter = mdev->adapter_handle; 937 1007 req.cq_handle = cq->cq_handle; 938 1008 939 - err = mana_gd_send_request(gc, sizeof(req), &req, sizeof(resp), &resp); 940 - 941 - if (err) { 942 - ibdev_err(&mdev->ib_dev, "Failed to destroy cq err %d", err); 943 - return err; 944 - } 945 - 946 - return 0; 1009 + return mana_gd_send_request(gc, sizeof(req), &req, sizeof(resp), &resp); 947 1010 } 948 1011 949 1012 int mana_ib_gd_create_rc_qp(struct mana_ib_dev *mdev, struct mana_ib_qp *qp, ··· 966 1043 req.flags = flags; 967 1044 968 1045 err = mana_gd_send_request(gc, sizeof(req), &req, sizeof(resp), &resp); 969 - if (err) { 970 - ibdev_err(&mdev->ib_dev, "Failed to create rc qp err %d", err); 1046 + if (err) 971 1047 return err; 972 - } 1048 + 973 1049 qp->qp_handle = resp.rc_qp_handle; 974 1050 for (i = 0; i < MANA_RC_QUEUE_TYPE_MAX; i++) { 975 1051 qp->rc_qp.queues[i].id = resp.queue_ids[i]; ··· 983 1061 struct mana_rnic_destroy_rc_qp_resp resp = {0}; 984 1062 struct mana_rnic_destroy_rc_qp_req req = {0}; 985 1063 struct gdma_context *gc = mdev_to_gc(mdev); 986 - int err; 987 1064 988 1065 mana_gd_init_req_hdr(&req.hdr, MANA_IB_DESTROY_RC_QP, sizeof(req), sizeof(resp)); 989 1066 req.hdr.dev_id = mdev->gdma_dev->dev_id; 990 1067 req.adapter = mdev->adapter_handle; 991 1068 req.rc_qp_handle = qp->qp_handle; 992 - err = mana_gd_send_request(gc, sizeof(req), &req, sizeof(resp), &resp); 993 - if (err) { 994 - ibdev_err(&mdev->ib_dev, "Failed to destroy rc qp err %d", err); 995 - return err; 996 - } 997 - return 0; 1069 + 1070 + return mana_gd_send_request(gc, sizeof(req), &req, sizeof(resp), &resp); 998 1071 } 999 1072 1000 1073 int mana_ib_gd_create_ud_qp(struct mana_ib_dev *mdev, struct mana_ib_qp *qp, ··· 1018 1101 req.max_recv_sge = attr->cap.max_recv_sge; 1019 1102 req.qp_type = type; 1020 1103 err = mana_gd_send_request(gc, sizeof(req), &req, sizeof(resp), &resp); 1021 - if (err) { 1022 - ibdev_err(&mdev->ib_dev, "Failed to create ud qp err %d", err); 1104 + if (err) 1023 1105 return err; 1024 - } 1106 + 1025 1107 qp->qp_handle = resp.qp_handle; 1026 1108 for (i = 0; i < MANA_UD_QUEUE_TYPE_MAX; i++) { 1027 1109 qp->ud_qp.queues[i].id = resp.queue_ids[i]; ··· 1035 1119 struct mana_rnic_destroy_udqp_resp resp = {0}; 1036 1120 struct mana_rnic_destroy_udqp_req req = {0}; 1037 1121 struct gdma_context *gc = mdev_to_gc(mdev); 1038 - int err; 1039 1122 1040 1123 mana_gd_init_req_hdr(&req.hdr, MANA_IB_DESTROY_UD_QP, sizeof(req), sizeof(resp)); 1041 1124 req.hdr.dev_id = mdev->gdma_dev->dev_id; 1042 1125 req.adapter = mdev->adapter_handle; 1043 1126 req.qp_handle = qp->qp_handle; 1044 - err = mana_gd_send_request(gc, sizeof(req), &req, sizeof(resp), &resp); 1045 - if (err) { 1046 - ibdev_err(&mdev->ib_dev, "Failed to destroy ud qp err %d", err); 1047 - return err; 1048 - } 1049 - return 0; 1127 + 1128 + return mana_gd_send_request(gc, sizeof(req), &req, sizeof(resp), &resp); 1050 1129 }
+4 -34
drivers/infiniband/hw/mana/mr.c
··· 70 70 } 71 71 72 72 err = mana_gd_send_request(gc, sizeof(req), &req, sizeof(resp), &resp); 73 - 74 - if (err || resp.hdr.status) { 75 - ibdev_dbg(&dev->ib_dev, "Failed to create mr %d, %u", err, 76 - resp.hdr.status); 77 - if (!err) 78 - err = -EPROTO; 79 - 73 + if (err) 80 74 return err; 81 - } 82 75 83 76 mr->ibmr.lkey = resp.lkey; 84 77 mr->ibmr.rkey = resp.rkey; ··· 85 92 struct gdma_destroy_mr_response resp = {}; 86 93 struct gdma_destroy_mr_request req = {}; 87 94 struct gdma_context *gc = mdev_to_gc(dev); 88 - int err; 89 95 90 96 mana_gd_init_req_hdr(&req.hdr, GDMA_DESTROY_MR, sizeof(req), 91 97 sizeof(resp)); 92 98 93 99 req.mr_handle = mr_handle; 94 100 95 - err = mana_gd_send_request(gc, sizeof(req), &req, sizeof(resp), &resp); 96 - if (err || resp.hdr.status) { 97 - dev_err(gc->dev, "Failed to destroy MR: %d, 0x%x\n", err, 98 - resp.hdr.status); 99 - if (!err) 100 - err = -EPROTO; 101 - return err; 102 - } 103 - 104 - return 0; 101 + return mana_gd_send_request(gc, sizeof(req), &req, sizeof(resp), &resp); 105 102 } 106 103 107 104 struct ib_mr *mana_ib_reg_user_mr(struct ib_pd *ibpd, u64 start, u64 length, ··· 322 339 req.flags = attr->flags; 323 340 324 341 err = mana_gd_send_request(gc, sizeof(req), &req, sizeof(resp), &resp); 325 - if (err || resp.hdr.status) { 326 - if (!err) 327 - err = -EPROTO; 328 - 342 + if (err) 329 343 return err; 330 - } 331 344 332 345 dm->dm_handle = resp.dm_handle; 333 346 ··· 359 380 struct gdma_context *gc = mdev_to_gc(mdev); 360 381 struct gdma_destroy_dm_resp resp = {}; 361 382 struct gdma_destroy_dm_req req = {}; 362 - int err; 363 383 364 384 mana_gd_init_req_hdr(&req.hdr, GDMA_DESTROY_DM, sizeof(req), sizeof(resp)); 365 385 req.dm_handle = dm->dm_handle; 366 386 367 - err = mana_gd_send_request(gc, sizeof(req), &req, sizeof(resp), &resp); 368 - if (err || resp.hdr.status) { 369 - if (!err) 370 - err = -EPROTO; 371 - 372 - return err; 373 - } 374 - 375 - return 0; 387 + return mana_gd_send_request(gc, sizeof(req), &req, sizeof(resp), &resp); 376 388 } 377 389 378 390 int mana_ib_dealloc_dm(struct ib_dm *ibdm, struct uverbs_attr_bundle *attrs)
+1 -24
drivers/infiniband/hw/mana/qp.c
··· 68 68 req->vport, default_rxobj); 69 69 70 70 err = mana_gd_send_request(gc, req_buf_size, req, sizeof(resp), &resp); 71 - if (err) { 72 - netdev_err(ndev, "Failed to configure vPort RX: %d\n", err); 73 - goto out; 74 - } 75 - 76 - if (resp.hdr.status) { 77 - netdev_err(ndev, "vPort RX configuration failed: 0x%x\n", 78 - resp.hdr.status); 79 - err = -EPROTO; 80 - goto out; 81 - } 82 - 83 - netdev_info(ndev, "Configured steering vPort %llu log_entries %u\n", 84 - mpc->port_handle, log_ind_tbl_size); 85 - 86 - out: 87 71 kfree(req); 88 72 return err; 89 73 } ··· 715 731 struct gdma_context *gc = mdev_to_gc(mdev); 716 732 struct mana_port_context *mpc; 717 733 struct net_device *ndev; 718 - int err; 719 734 720 735 mana_gd_init_req_hdr(&req.hdr, MANA_IB_SET_QP_STATE, sizeof(req), sizeof(resp)); 721 736 ··· 767 784 req.ah_attr.flow_label = attr->ah_attr.grh.flow_label; 768 785 } 769 786 770 - err = mana_gd_send_request(gc, sizeof(req), &req, sizeof(resp), &resp); 771 - if (err) { 772 - ibdev_err(&mdev->ib_dev, "Failed modify qp err %d", err); 773 - return err; 774 - } 775 - 776 - return 0; 787 + return mana_gd_send_request(gc, sizeof(req), &req, sizeof(resp), &resp); 777 788 } 778 789 779 790 int mana_ib_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr,