On Thu, Apr 01, 2021 at 11:50:04AM +0300, Leon Romanovsky wrote:
quoted hunk ↗ jump to hunk
+static int UVERBS_HANDLER(MLX5_IB_METHOD_QUERY_PORT)(
+ struct uverbs_attr_bundle *attrs)
+{
+ struct mlx5_ib_uapi_query_port *info;
+ struct mlx5_ib_ucontext *c;
+ struct mlx5_ib_dev *dev;
+ u32 port_num;
+ int ret;
+
+ if (uverbs_copy_from(&port_num, attrs,
+ MLX5_IB_ATTR_QUERY_PORT_PORT_NUM))
+ return -EFAULT;
+
+ c = to_mucontext(ib_uverbs_get_ucontext(attrs));
+ if (IS_ERR(c))
+ return PTR_ERR(c);
+ dev = to_mdev(c->ibucontext.device);
+
+ if (!rdma_is_port_valid(&dev->ib_dev, port_num))
+ return -EINVAL;
+
+ info = uverbs_zalloc(attrs, sizeof(*info));
+ if (IS_ERR(info))
+ return PTR_ERR(info);
This allocation is not needed, info is small enough to be on the stack
quoted hunk ↗ jump to hunk
+
+ if (mlx5_eswitch_mode(dev->mdev) == MLX5_ESWITCH_OFFLOADS) {
+ ret = fill_switchdev_info(dev, port_num, info);
+ if (ret)
+ return ret;
+ }
+
+ return uverbs_copy_to(attrs, MLX5_IB_ATTR_QUERY_PORT, info,
+ sizeof(*info));
This should be
uverbs_copy_to_struct_or_zero()
Jason