Messages in this thread | | | Date | Thu, 29 Feb 2024 12:47:59 +0100 | Subject | Re: [PATCH V4 3/5] misc: mlx5ctl: Add info ioctl | From | Vegard Nossum <> |
| |
On 07/02/2024 08:24, Saeed Mahameed wrote: > +static int mlx5ctl_info_ioctl(struct file *file, > + struct mlx5ctl_info __user *arg, > + size_t usize) > +{ > + struct mlx5ctl_fd *mfd = file->private_data; > + size_t ksize = sizeof(struct mlx5ctl_info); > + struct mlx5ctl_dev *mcdev = mfd->mcdev; > + struct mlx5_core_dev *mdev = mcdev->mdev; > + struct mlx5ctl_info *info; > + int err = 0; > + > + if (usize < ksize) > + return -EINVAL; > + > + info = kzalloc(ksize, GFP_KERNEL); > + if (!info) > + return -ENOMEM;
struct mlx5ctl_info is small, why not put it on the stack or even copy it directly from the original object, assuming it has no holes/padding?
> + > + info->dev_uctx_cap = MLX5_CAP_GEN(mdev, uctx_cap); > + info->uctx_cap = mfd->uctx_cap; > + info->uctx_uid = mfd->uctx_uid; > + info->ucap = mfd->ucap; > + > + if (copy_to_user(arg, info, ksize)) > + err = -EFAULT; > + > + kfree(info); > + return err; > +}
Is there even a remote possibility of extending this structure in the future? If so the size check will not allow you to be backwards compatible. Should there be a version field in there or would you just add a new ioctl altogether? Adding linux-api@vger.kernel.org to Cc.
> diff --git a/include/uapi/misc/mlx5ctl.h b/include/uapi/misc/mlx5ctl.h > new file mode 100644 > index 000000000000..9be944128025 > --- /dev/null > +++ b/include/uapi/misc/mlx5ctl.h > @@ -0,0 +1,20 @@ > +/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 WITH Linux-syscall-note */ > +/* Copyright (c) 2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved. */ > + > +#ifndef __MLX5CTL_IOCTL_H__ > +#define __MLX5CTL_IOCTL_H__ > + > +struct mlx5ctl_info { > + __u16 uctx_uid; /* current process allocated UCTX UID */ > + __u16 reserved1; /* explicit padding must be zero */ > + __u32 uctx_cap; /* current process effective UCTX cap */ > + __u32 dev_uctx_cap; /* device's UCTX capabilities */ > + __u32 ucap; /* process user capability */ > +}; > + > +#define MLX5CTL_IOCTL_MAGIC 0x5c > + > +#define MLX5CTL_IOCTL_INFO \ > + _IOR(MLX5CTL_IOCTL_MAGIC, 0x0, struct mlx5ctl_info) > + > +#endif /* __MLX5CTL_IOCTL_H__ */
Should you add anything to Documentation/ABI/ ? (Or add other documentation for this driver?)
Vegard
| |