From nobody Sat Jul 25 19:34:26 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C323839183B; Tue, 14 Jul 2026 11:47:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784029626; cv=none; b=HJ81hhDD2RXcF4WlqsdczeTYj2ljPTR5sBZg9MKmJ+GEZRt7s0rtcyhKc/A3dMQVcTnKBSt8ooiRhXoe01wkwSMGKYonVHyqJA9lCQ/Z7tdytDvbHZdXzvTFt5ettagURDjpqoPtdsf2kqvNNpCqczqfEgZEgYCEXvU0/B09lsc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784029626; c=relaxed/simple; bh=1dTa0XFIwErMClVks+b1+dKviz4MPuVNcPk/8vKU4eY=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version:Content-Type; b=Ujed6M8X6xroxLyb6hy1s6wG5eQwnBY+BxeTxwBQG+RnHtu4/vOoO7i0ucG39tUvGNrJqegjkZLnympqF4pXNXjy9pdTtc+rYUsuMA1gWNI/kmqZkrNfFK77abrKHVe8jMO8rVFlz0yuxQSaIETzFBts0T+Joe9U+NU+nrVUvDY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=DFvR9HIH; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="DFvR9HIH" Received: by smtp.kernel.org (Postfix) with ESMTPSA id DC92C1F00ACF; Tue, 14 Jul 2026 11:47:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1784029624; bh=ejJXmN+NxYJQWTWGFPBXvRVoH1woJz/emA0CZD5PWyQ=; h=From:To:Cc:Subject:Date; b=DFvR9HIH7g0adyo6JcvLuosHcUnedfPNsf0WhHmPzwSGRG7fsHQscpZoEBwulSEGb OG5IdiTPt78bHHf2Tdrg3u778aWOv3sJNmBY8eeW7w1S/mwzNfEj4eivKWeMNcVln3 iXaR5NBZLLAgjoLePV3+e9Btb5GUzoZXKlRAfsJIzovu1s9PW1718SGnA6zU4OMsRq AYoVzg7QKcqKlfZV1vjg50ApHmKnq3nm9bfCuEW0b4gQTMVClGffp575zvBlj4fP57 soQ+TZNs3JL0OqaqA0TZYNnyTOH4jpH16xrAndbhDIXjTefNj2ik7Mn7y2MXMsE/yh 1yzk5Uu0LqdXw== From: Leon Romanovsky To: Potnuri Bharat Teja , Jason Gunthorpe , Cheng Xu , Kai Shen , Chengchang Tang , Junxian Huang , Abhijit Gangurde , Allen Hubbe , Tatyana Nikolova , Long Li , Konstantin Taranov , Selvin Xavier , Michal Kalderon , Nelson Escobar , Satish Kharat , Bryan Tan , Vishnu Dasa , Broadcom internal kernel review list , Dennis Dalessandro , Zhu Yanjun , Bernard Metzler Cc: linux-rdma@vger.kernel.org, linux-kernel@vger.kernel.org, linux-hyperv@vger.kernel.org Subject: [PATCH rdma-next] RDMA: Use ib_no_udata_io() in query_device callbacks Date: Tue, 14 Jul 2026 14:46:58 +0300 Message-ID: <20260714-convert-to-noio-udata-v1-1-f1f6b6c7c988@nvidia.com> X-Mailer: git-send-email 2.55.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" X-Change-ID: 20260714-convert-to-noio-udata-28749ec5a250 X-Mailer: b4 0.15-dev-18f8f Content-Transfer-Encoding: quoted-printable From: Leon Romanovsky The query_device callbacks that neither accept driver-specific input nor return a driver-specific response open-code the empty udata handling as ib_is_udata_in_empty() on entry and ib_respond_empty_udata() on exit. ib_no_udata_io() already combines both steps, so replace the entry check with it and simply return 0 on success. Unlike the create and destroy flows, query_device owns no uobject or HW resource - the extended path fills a stack ib_device_attr that the core discards on error - so clearing the empty response buffer on entry rather than on exit is a mechanical change with no functional difference. Signed-off-by: Leon Romanovsky --- drivers/infiniband/hw/cxgb4/provider.c | 4 ++-- drivers/infiniband/hw/erdma/erdma_verbs.c | 4 ++-- drivers/infiniband/hw/hns/hns_roce_main.c | 4 ++-- drivers/infiniband/hw/ionic/ionic_ibdev.c | 4 ++-- drivers/infiniband/hw/irdma/verbs.c | 4 ++-- drivers/infiniband/hw/mana/main.c | 4 ++-- drivers/infiniband/hw/mthca/mthca_provider.c | 3 +-- drivers/infiniband/hw/ocrdma/ocrdma_verbs.c | 4 ++-- drivers/infiniband/hw/qedr/verbs.c | 4 ++-- drivers/infiniband/hw/usnic/usnic_ib_verbs.c | 4 ++-- drivers/infiniband/hw/vmw_pvrdma/pvrdma_verbs.c | 4 ++-- drivers/infiniband/sw/rdmavt/vt.c | 4 ++-- drivers/infiniband/sw/rxe/rxe_verbs.c | 4 ++-- drivers/infiniband/sw/siw/siw_verbs.c | 4 ++-- 14 files changed, 27 insertions(+), 28 deletions(-) diff --git a/drivers/infiniband/hw/cxgb4/provider.c b/drivers/infiniband/hw= /cxgb4/provider.c index e1eec37ee822..ebe3170a641c 100644 --- a/drivers/infiniband/hw/cxgb4/provider.c +++ b/drivers/infiniband/hw/cxgb4/provider.c @@ -263,7 +263,7 @@ static int c4iw_query_device(struct ib_device *ibdev, s= truct ib_device_attr *pro =20 pr_debug("ibdev %p\n", ibdev); =20 - err =3D ib_is_udata_in_empty(uhw); + err =3D ib_no_udata_io(uhw); if (err) return err; =20 @@ -300,7 +300,7 @@ static int c4iw_query_device(struct ib_device *ibdev, s= truct ib_device_attr *pro props->max_fast_reg_page_list_len =3D t4_max_fr_depth(dev->rdev.lldi.ulptx_memwrite_dsgl && use_dsgl); =20 - return ib_respond_empty_udata(uhw); + return 0; } =20 static int c4iw_query_port(struct ib_device *ibdev, u32 port, diff --git a/drivers/infiniband/hw/erdma/erdma_verbs.c b/drivers/infiniband= /hw/erdma/erdma_verbs.c index 9491cbab69b3..71e3e8618a61 100644 --- a/drivers/infiniband/hw/erdma/erdma_verbs.c +++ b/drivers/infiniband/hw/erdma/erdma_verbs.c @@ -320,7 +320,7 @@ int erdma_query_device(struct ib_device *ibdev, struct = ib_device_attr *attr, struct erdma_dev *dev =3D to_edev(ibdev); int err; =20 - err =3D ib_is_udata_in_empty(udata); + err =3D ib_no_udata_io(udata); if (err) return err; =20 @@ -361,7 +361,7 @@ int erdma_query_device(struct ib_device *ibdev, struct = ib_device_attr *attr, addrconf_addr_eui48((u8 *)&attr->sys_image_guid, dev->netdev->dev_addr); =20 - return ib_respond_empty_udata(udata); + return 0; } =20 int erdma_query_gid(struct ib_device *ibdev, u32 port, int idx, diff --git a/drivers/infiniband/hw/hns/hns_roce_main.c b/drivers/infiniband= /hw/hns/hns_roce_main.c index 09c07de5f022..662959efcf31 100644 --- a/drivers/infiniband/hw/hns/hns_roce_main.c +++ b/drivers/infiniband/hw/hns/hns_roce_main.c @@ -223,7 +223,7 @@ static int hns_roce_query_device(struct ib_device *ib_d= ev, struct hns_roce_dev *hr_dev =3D to_hr_dev(ib_dev); int ret; =20 - ret =3D ib_is_udata_in_empty(uhw); + ret =3D ib_no_udata_io(uhw); if (ret) return ret; =20 @@ -277,7 +277,7 @@ static int hns_roce_query_device(struct ib_device *ib_d= ev, if (hr_dev->caps.flags & HNS_ROCE_CAP_FLAG_XRC) props->device_cap_flags |=3D IB_DEVICE_XRC; =20 - return ib_respond_empty_udata(uhw); + return 0; } =20 static int hns_roce_query_port(struct ib_device *ib_dev, u32 port_num, diff --git a/drivers/infiniband/hw/ionic/ionic_ibdev.c b/drivers/infiniband= /hw/ionic/ionic_ibdev.c index b0449c75f893..2b91bd03c73e 100644 --- a/drivers/infiniband/hw/ionic/ionic_ibdev.c +++ b/drivers/infiniband/hw/ionic/ionic_ibdev.c @@ -27,7 +27,7 @@ static int ionic_query_device(struct ib_device *ibdev, struct net_device *ndev; int err; =20 - err =3D ib_is_udata_in_empty(udata); + err =3D ib_no_udata_io(udata); if (err) return err; =20 @@ -74,7 +74,7 @@ static int ionic_query_device(struct ib_device *ibdev, attr->max_fast_reg_page_list_len =3D dev->lif_cfg.npts_per_lif / 2; attr->max_pkeys =3D IONIC_PKEY_TBL_LEN; =20 - return ib_respond_empty_udata(udata); + return 0; } =20 static int ionic_query_port(struct ib_device *ibdev, u32 port, diff --git a/drivers/infiniband/hw/irdma/verbs.c b/drivers/infiniband/hw/ir= dma/verbs.c index c9b606cc67d4..f48cc8b5299b 100644 --- a/drivers/infiniband/hw/irdma/verbs.c +++ b/drivers/infiniband/hw/irdma/verbs.c @@ -18,7 +18,7 @@ static int irdma_query_device(struct ib_device *ibdev, struct irdma_hw_attrs *hw_attrs =3D &rf->sc_dev.hw_attrs; int err; =20 - err =3D ib_is_udata_in_empty(udata); + err =3D ib_no_udata_io(udata); if (err) return err; =20 @@ -75,7 +75,7 @@ static int irdma_query_device(struct ib_device *ibdev, if (hw_attrs->uk_attrs.hw_rev >=3D IRDMA_GEN_3) props->device_cap_flags |=3D IB_DEVICE_MEM_WINDOW_TYPE_2B; =20 - return ib_respond_empty_udata(udata); + return 0; } =20 /** diff --git a/drivers/infiniband/hw/mana/main.c b/drivers/infiniband/hw/mana= /main.c index a5b3606a1dd5..73f4bfb22b5e 100644 --- a/drivers/infiniband/hw/mana/main.c +++ b/drivers/infiniband/hw/mana/main.c @@ -575,7 +575,7 @@ int mana_ib_query_device(struct ib_device *ibdev, struc= t ib_device_attr *props, struct pci_dev *pdev =3D to_pci_dev(mdev_to_gc(dev)->dev); int err; =20 - err =3D ib_is_udata_in_empty(uhw); + err =3D ib_no_udata_io(uhw); if (err) return err; =20 @@ -604,7 +604,7 @@ int mana_ib_query_device(struct ib_device *ibdev, struc= t ib_device_attr *props, if (!mana_ib_is_rnic(dev)) props->raw_packet_caps =3D IB_RAW_PACKET_CAP_IP_CSUM; =20 - return ib_respond_empty_udata(uhw); + return 0; } =20 int mana_ib_query_port(struct ib_device *ibdev, u32 port, diff --git a/drivers/infiniband/hw/mthca/mthca_provider.c b/drivers/infinib= and/hw/mthca/mthca_provider.c index e933a53779a4..6575493f4eab 100644 --- a/drivers/infiniband/hw/mthca/mthca_provider.c +++ b/drivers/infiniband/hw/mthca/mthca_provider.c @@ -58,7 +58,7 @@ static int mthca_query_device(struct ib_device *ibdev, st= ruct ib_device_attr *pr int err; struct mthca_dev *mdev =3D to_mdev(ibdev); =20 - err =3D ib_is_udata_in_empty(uhw); + err =3D ib_no_udata_io(uhw); if (err) return err; =20 @@ -112,7 +112,6 @@ static int mthca_query_device(struct ib_device *ibdev, = struct ib_device_attr *pr props->max_total_mcast_qp_attach =3D props->max_mcast_qp_attach * props->max_mcast_grp; =20 - err =3D ib_respond_empty_udata(uhw); out: kfree(in_mad); kfree(out_mad); diff --git a/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c b/drivers/infiniba= nd/hw/ocrdma/ocrdma_verbs.c index de83dc0ea79c..cfe3d19b73b3 100644 --- a/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c +++ b/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c @@ -70,7 +70,7 @@ int ocrdma_query_device(struct ib_device *ibdev, struct i= b_device_attr *attr, struct ocrdma_dev *dev =3D get_ocrdma_dev(ibdev); int err; =20 - err =3D ib_is_udata_in_empty(uhw); + err =3D ib_no_udata_io(uhw); if (err) return err; =20 @@ -111,7 +111,7 @@ int ocrdma_query_device(struct ib_device *ibdev, struct= ib_device_attr *attr, attr->local_ca_ack_delay =3D dev->attr.local_ca_ack_delay; attr->max_fast_reg_page_list_len =3D dev->attr.max_pages_per_frmr; attr->max_pkeys =3D 1; - return ib_respond_empty_udata(uhw); + return 0; } =20 static inline void get_link_speed_and_width(struct ocrdma_dev *dev, diff --git a/drivers/infiniband/hw/qedr/verbs.c b/drivers/infiniband/hw/qed= r/verbs.c index 1cf502579ad1..012a0ab98d6b 100644 --- a/drivers/infiniband/hw/qedr/verbs.c +++ b/drivers/infiniband/hw/qedr/verbs.c @@ -114,7 +114,7 @@ int qedr_query_device(struct ib_device *ibdev, return -EINVAL; } =20 - rc =3D ib_is_udata_in_empty(udata); + rc =3D ib_no_udata_io(udata); if (rc) return rc; =20 @@ -158,7 +158,7 @@ int qedr_query_device(struct ib_device *ibdev, attr->max_pkeys =3D qattr->max_pkey; attr->max_ah =3D qattr->max_ah; =20 - return ib_respond_empty_udata(udata); + return 0; } =20 static inline void get_link_speed_and_width(int speed, u16 *ib_speed, diff --git a/drivers/infiniband/hw/usnic/usnic_ib_verbs.c b/drivers/infinib= and/hw/usnic/usnic_ib_verbs.c index 3402c84eb904..1a1647d0e345 100644 --- a/drivers/infiniband/hw/usnic/usnic_ib_verbs.c +++ b/drivers/infiniband/hw/usnic/usnic_ib_verbs.c @@ -278,7 +278,7 @@ int usnic_ib_query_device(struct ib_device *ibdev, int err; =20 usnic_dbg("\n"); - err =3D ib_is_udata_in_empty(uhw); + err =3D ib_no_udata_io(uhw); if (err) return err; =20 @@ -323,7 +323,7 @@ int usnic_ib_query_device(struct ib_device *ibdev, * max_qp_wr, max_sge, max_sge_rd, max_cqe */ mutex_unlock(&us_ibdev->usdev_lock); =20 - return ib_respond_empty_udata(uhw); + return 0; } =20 int usnic_ib_query_port(struct ib_device *ibdev, u32 port, diff --git a/drivers/infiniband/hw/vmw_pvrdma/pvrdma_verbs.c b/drivers/infi= niband/hw/vmw_pvrdma/pvrdma_verbs.c index 1d29a535f76a..59c2a88c158a 100644 --- a/drivers/infiniband/hw/vmw_pvrdma/pvrdma_verbs.c +++ b/drivers/infiniband/hw/vmw_pvrdma/pvrdma_verbs.c @@ -69,7 +69,7 @@ int pvrdma_query_device(struct ib_device *ibdev, struct pvrdma_dev *dev =3D to_vdev(ibdev); int err; =20 - err =3D ib_is_udata_in_empty(uhw); + err =3D ib_no_udata_io(uhw); if (err) return err; =20 @@ -116,7 +116,7 @@ int pvrdma_query_device(struct ib_device *ibdev, props->device_cap_flags |=3D IB_DEVICE_PORT_ACTIVE_EVENT | IB_DEVICE_RC_RNR_NAK_GEN; =20 - return ib_respond_empty_udata(uhw); + return 0; } =20 /** diff --git a/drivers/infiniband/sw/rdmavt/vt.c b/drivers/infiniband/sw/rdma= vt/vt.c index f37d6d64adb9..1c112f4dc994 100644 --- a/drivers/infiniband/sw/rdmavt/vt.c +++ b/drivers/infiniband/sw/rdmavt/vt.c @@ -84,14 +84,14 @@ static int rvt_query_device(struct ib_device *ibdev, struct rvt_dev_info *rdi =3D ib_to_rvt(ibdev); int err; =20 - err =3D ib_is_udata_in_empty(uhw); + err =3D ib_no_udata_io(uhw); if (err) return err; /* * Return rvt_dev_info.dparms.props contents */ *props =3D rdi->dparms.props; - return ib_respond_empty_udata(uhw); + return 0; } =20 static int rvt_get_numa_node(struct ib_device *ibdev) diff --git a/drivers/infiniband/sw/rxe/rxe_verbs.c b/drivers/infiniband/sw/= rxe/rxe_verbs.c index 1ec130fee8ea..c8562866e21f 100644 --- a/drivers/infiniband/sw/rxe/rxe_verbs.c +++ b/drivers/infiniband/sw/rxe/rxe_verbs.c @@ -22,13 +22,13 @@ static int rxe_query_device(struct ib_device *ibdev, struct rxe_dev *rxe =3D to_rdev(ibdev); int err; =20 - err =3D ib_is_udata_in_empty(udata); + err =3D ib_no_udata_io(udata); if (err) return err; =20 memcpy(attr, &rxe->attr, sizeof(*attr)); =20 - return ib_respond_empty_udata(udata); + return 0; } =20 static int rxe_query_port(struct ib_device *ibdev, diff --git a/drivers/infiniband/sw/siw/siw_verbs.c b/drivers/infiniband/sw/= siw/siw_verbs.c index e281517fc6f9..4ba6d6d5afe9 100644 --- a/drivers/infiniband/sw/siw/siw_verbs.c +++ b/drivers/infiniband/sw/siw/siw_verbs.c @@ -132,7 +132,7 @@ int siw_query_device(struct ib_device *base_dev, struct= ib_device_attr *attr, struct siw_device *sdev =3D to_siw_dev(base_dev); int rv; =20 - rv =3D ib_is_udata_in_empty(udata); + rv =3D ib_no_udata_io(udata); if (rv) return rv; =20 @@ -165,7 +165,7 @@ int siw_query_device(struct ib_device *base_dev, struct= ib_device_attr *attr, addrconf_addr_eui48((u8 *)&attr->sys_image_guid, sdev->raw_gid); =20 - return ib_respond_empty_udata(udata); + return 0; } =20 int siw_query_port(struct ib_device *base_dev, u32 port, --- base-commit: eeb9697db6c16d9bb2ce7b7ddf95aa20305aa9f2 change-id: 20260714-convert-to-noio-udata-28749ec5a250 Best regards, -- =20 Leon Romanovsky