|
@@ -278,6 +278,7 @@ static int mlx5_internal_err_ret_value(struct mlx5_core_dev *dev, u16 op,
|
|
case MLX5_CMD_OP_DESTROY_PSV:
|
|
case MLX5_CMD_OP_DESTROY_PSV:
|
|
case MLX5_CMD_OP_DESTROY_SRQ:
|
|
case MLX5_CMD_OP_DESTROY_SRQ:
|
|
case MLX5_CMD_OP_DESTROY_XRC_SRQ:
|
|
case MLX5_CMD_OP_DESTROY_XRC_SRQ:
|
|
|
|
+ case MLX5_CMD_OP_DESTROY_XRQ:
|
|
case MLX5_CMD_OP_DESTROY_DCT:
|
|
case MLX5_CMD_OP_DESTROY_DCT:
|
|
case MLX5_CMD_OP_DEALLOC_Q_COUNTER:
|
|
case MLX5_CMD_OP_DEALLOC_Q_COUNTER:
|
|
case MLX5_CMD_OP_DESTROY_SCHEDULING_ELEMENT:
|
|
case MLX5_CMD_OP_DESTROY_SCHEDULING_ELEMENT:
|
|
@@ -347,6 +348,9 @@ static int mlx5_internal_err_ret_value(struct mlx5_core_dev *dev, u16 op,
|
|
case MLX5_CMD_OP_CREATE_XRC_SRQ:
|
|
case MLX5_CMD_OP_CREATE_XRC_SRQ:
|
|
case MLX5_CMD_OP_QUERY_XRC_SRQ:
|
|
case MLX5_CMD_OP_QUERY_XRC_SRQ:
|
|
case MLX5_CMD_OP_ARM_XRC_SRQ:
|
|
case MLX5_CMD_OP_ARM_XRC_SRQ:
|
|
|
|
+ case MLX5_CMD_OP_CREATE_XRQ:
|
|
|
|
+ case MLX5_CMD_OP_QUERY_XRQ:
|
|
|
|
+ case MLX5_CMD_OP_ARM_XRQ:
|
|
case MLX5_CMD_OP_CREATE_DCT:
|
|
case MLX5_CMD_OP_CREATE_DCT:
|
|
case MLX5_CMD_OP_DRAIN_DCT:
|
|
case MLX5_CMD_OP_DRAIN_DCT:
|
|
case MLX5_CMD_OP_QUERY_DCT:
|
|
case MLX5_CMD_OP_QUERY_DCT:
|
|
@@ -456,6 +460,7 @@ const char *mlx5_command_str(int command)
|
|
MLX5_COMMAND_STR_CASE(SET_HCA_CAP);
|
|
MLX5_COMMAND_STR_CASE(SET_HCA_CAP);
|
|
MLX5_COMMAND_STR_CASE(QUERY_ISSI);
|
|
MLX5_COMMAND_STR_CASE(QUERY_ISSI);
|
|
MLX5_COMMAND_STR_CASE(SET_ISSI);
|
|
MLX5_COMMAND_STR_CASE(SET_ISSI);
|
|
|
|
+ MLX5_COMMAND_STR_CASE(SET_DRIVER_VERSION);
|
|
MLX5_COMMAND_STR_CASE(CREATE_MKEY);
|
|
MLX5_COMMAND_STR_CASE(CREATE_MKEY);
|
|
MLX5_COMMAND_STR_CASE(QUERY_MKEY);
|
|
MLX5_COMMAND_STR_CASE(QUERY_MKEY);
|
|
MLX5_COMMAND_STR_CASE(DESTROY_MKEY);
|
|
MLX5_COMMAND_STR_CASE(DESTROY_MKEY);
|
|
@@ -603,6 +608,10 @@ const char *mlx5_command_str(int command)
|
|
MLX5_COMMAND_STR_CASE(FPGA_QUERY_QP);
|
|
MLX5_COMMAND_STR_CASE(FPGA_QUERY_QP);
|
|
MLX5_COMMAND_STR_CASE(FPGA_QUERY_QP_COUNTERS);
|
|
MLX5_COMMAND_STR_CASE(FPGA_QUERY_QP_COUNTERS);
|
|
MLX5_COMMAND_STR_CASE(FPGA_DESTROY_QP);
|
|
MLX5_COMMAND_STR_CASE(FPGA_DESTROY_QP);
|
|
|
|
+ MLX5_COMMAND_STR_CASE(CREATE_XRQ);
|
|
|
|
+ MLX5_COMMAND_STR_CASE(DESTROY_XRQ);
|
|
|
|
+ MLX5_COMMAND_STR_CASE(QUERY_XRQ);
|
|
|
|
+ MLX5_COMMAND_STR_CASE(ARM_XRQ);
|
|
MLX5_COMMAND_STR_CASE(CREATE_GENERAL_OBJECT);
|
|
MLX5_COMMAND_STR_CASE(CREATE_GENERAL_OBJECT);
|
|
MLX5_COMMAND_STR_CASE(DESTROY_GENERAL_OBJECT);
|
|
MLX5_COMMAND_STR_CASE(DESTROY_GENERAL_OBJECT);
|
|
MLX5_COMMAND_STR_CASE(MODIFY_GENERAL_OBJECT);
|
|
MLX5_COMMAND_STR_CASE(MODIFY_GENERAL_OBJECT);
|
|
@@ -1037,7 +1046,10 @@ static ssize_t dbg_write(struct file *filp, const char __user *buf,
|
|
if (!dbg->in_msg || !dbg->out_msg)
|
|
if (!dbg->in_msg || !dbg->out_msg)
|
|
return -ENOMEM;
|
|
return -ENOMEM;
|
|
|
|
|
|
- if (copy_from_user(lbuf, buf, sizeof(lbuf)))
|
|
|
|
|
|
+ if (count < sizeof(lbuf) - 1)
|
|
|
|
+ return -EINVAL;
|
|
|
|
+
|
|
|
|
+ if (copy_from_user(lbuf, buf, sizeof(lbuf) - 1))
|
|
return -EFAULT;
|
|
return -EFAULT;
|
|
|
|
|
|
lbuf[sizeof(lbuf) - 1] = 0;
|
|
lbuf[sizeof(lbuf) - 1] = 0;
|
|
@@ -1241,21 +1253,12 @@ static ssize_t data_read(struct file *filp, char __user *buf, size_t count,
|
|
{
|
|
{
|
|
struct mlx5_core_dev *dev = filp->private_data;
|
|
struct mlx5_core_dev *dev = filp->private_data;
|
|
struct mlx5_cmd_debug *dbg = &dev->cmd.dbg;
|
|
struct mlx5_cmd_debug *dbg = &dev->cmd.dbg;
|
|
- int copy;
|
|
|
|
-
|
|
|
|
- if (*pos)
|
|
|
|
- return 0;
|
|
|
|
|
|
|
|
if (!dbg->out_msg)
|
|
if (!dbg->out_msg)
|
|
return -ENOMEM;
|
|
return -ENOMEM;
|
|
|
|
|
|
- copy = min_t(int, count, dbg->outlen);
|
|
|
|
- if (copy_to_user(buf, dbg->out_msg, copy))
|
|
|
|
- return -EFAULT;
|
|
|
|
-
|
|
|
|
- *pos += copy;
|
|
|
|
-
|
|
|
|
- return copy;
|
|
|
|
|
|
+ return simple_read_from_buffer(buf, count, pos, dbg->out_msg,
|
|
|
|
+ dbg->outlen);
|
|
}
|
|
}
|
|
|
|
|
|
static const struct file_operations dfops = {
|
|
static const struct file_operations dfops = {
|
|
@@ -1273,19 +1276,11 @@ static ssize_t outlen_read(struct file *filp, char __user *buf, size_t count,
|
|
char outlen[8];
|
|
char outlen[8];
|
|
int err;
|
|
int err;
|
|
|
|
|
|
- if (*pos)
|
|
|
|
- return 0;
|
|
|
|
-
|
|
|
|
err = snprintf(outlen, sizeof(outlen), "%d", dbg->outlen);
|
|
err = snprintf(outlen, sizeof(outlen), "%d", dbg->outlen);
|
|
if (err < 0)
|
|
if (err < 0)
|
|
return err;
|
|
return err;
|
|
|
|
|
|
- if (copy_to_user(buf, &outlen, err))
|
|
|
|
- return -EFAULT;
|
|
|
|
-
|
|
|
|
- *pos += err;
|
|
|
|
-
|
|
|
|
- return err;
|
|
|
|
|
|
+ return simple_read_from_buffer(buf, count, pos, outlen, err);
|
|
}
|
|
}
|
|
|
|
|
|
static ssize_t outlen_write(struct file *filp, const char __user *buf,
|
|
static ssize_t outlen_write(struct file *filp, const char __user *buf,
|