Commit ed644fab authored by Moshe Shemesh's avatar Moshe Shemesh Committed by Saeed Mahameed

net/mlx5: Refactor num of blocks in mailbox calculation

Get the logic that calculates the number of blocks in a command mailbox
into a dedicated function.
Signed-off-by: default avatarMoshe Shemesh <moshe@mellanox.com>
Signed-off-by: default avatarSaeed Mahameed <saeedm@mellanox.com>
parent d034294e
...@@ -135,6 +135,14 @@ static struct mlx5_cmd_layout *get_inst(struct mlx5_cmd *cmd, int idx) ...@@ -135,6 +135,14 @@ static struct mlx5_cmd_layout *get_inst(struct mlx5_cmd *cmd, int idx)
return cmd->cmd_buf + (idx << cmd->log_stride); return cmd->cmd_buf + (idx << cmd->log_stride);
} }
static int mlx5_calc_cmd_blocks(struct mlx5_cmd_msg *msg)
{
int size = msg->len;
int blen = size - min_t(int, sizeof(msg->first.data), size);
return DIV_ROUND_UP(blen, MLX5_CMD_DATA_BLOCK_SIZE);
}
static u8 xor8_buf(void *buf, size_t offset, int len) static u8 xor8_buf(void *buf, size_t offset, int len)
{ {
u8 *ptr = buf; u8 *ptr = buf;
...@@ -174,10 +182,7 @@ static void calc_block_sig(struct mlx5_cmd_prot_block *block) ...@@ -174,10 +182,7 @@ static void calc_block_sig(struct mlx5_cmd_prot_block *block)
static void calc_chain_sig(struct mlx5_cmd_msg *msg) static void calc_chain_sig(struct mlx5_cmd_msg *msg)
{ {
struct mlx5_cmd_mailbox *next = msg->next; struct mlx5_cmd_mailbox *next = msg->next;
int size = msg->len; int n = mlx5_calc_cmd_blocks(msg);
int blen = size - min_t(int, sizeof(msg->first.data), size);
int n = (blen + MLX5_CMD_DATA_BLOCK_SIZE - 1)
/ MLX5_CMD_DATA_BLOCK_SIZE;
int i = 0; int i = 0;
for (i = 0; i < n && next; i++) { for (i = 0; i < n && next; i++) {
...@@ -220,12 +225,9 @@ static void free_cmd(struct mlx5_cmd_work_ent *ent) ...@@ -220,12 +225,9 @@ static void free_cmd(struct mlx5_cmd_work_ent *ent)
static int verify_signature(struct mlx5_cmd_work_ent *ent) static int verify_signature(struct mlx5_cmd_work_ent *ent)
{ {
struct mlx5_cmd_mailbox *next = ent->out->next; struct mlx5_cmd_mailbox *next = ent->out->next;
int n = mlx5_calc_cmd_blocks(ent->out);
int err; int err;
u8 sig; u8 sig;
int size = ent->out->len;
int blen = size - min_t(int, sizeof(ent->out->first.data), size);
int n = (blen + MLX5_CMD_DATA_BLOCK_SIZE - 1)
/ MLX5_CMD_DATA_BLOCK_SIZE;
int i = 0; int i = 0;
sig = xor8_buf(ent->lay, 0, sizeof(*ent->lay)); sig = xor8_buf(ent->lay, 0, sizeof(*ent->lay));
...@@ -1137,7 +1139,6 @@ static struct mlx5_cmd_msg *mlx5_alloc_cmd_msg(struct mlx5_core_dev *dev, ...@@ -1137,7 +1139,6 @@ static struct mlx5_cmd_msg *mlx5_alloc_cmd_msg(struct mlx5_core_dev *dev,
struct mlx5_cmd_mailbox *tmp, *head = NULL; struct mlx5_cmd_mailbox *tmp, *head = NULL;
struct mlx5_cmd_prot_block *block; struct mlx5_cmd_prot_block *block;
struct mlx5_cmd_msg *msg; struct mlx5_cmd_msg *msg;
int blen;
int err; int err;
int n; int n;
int i; int i;
...@@ -1146,8 +1147,8 @@ static struct mlx5_cmd_msg *mlx5_alloc_cmd_msg(struct mlx5_core_dev *dev, ...@@ -1146,8 +1147,8 @@ static struct mlx5_cmd_msg *mlx5_alloc_cmd_msg(struct mlx5_core_dev *dev,
if (!msg) if (!msg)
return ERR_PTR(-ENOMEM); return ERR_PTR(-ENOMEM);
blen = size - min_t(int, sizeof(msg->first.data), size); msg->len = size;
n = (blen + MLX5_CMD_DATA_BLOCK_SIZE - 1) / MLX5_CMD_DATA_BLOCK_SIZE; n = mlx5_calc_cmd_blocks(msg);
for (i = 0; i < n; i++) { for (i = 0; i < n; i++) {
tmp = alloc_cmd_box(dev, flags); tmp = alloc_cmd_box(dev, flags);
...@@ -1165,7 +1166,6 @@ static struct mlx5_cmd_msg *mlx5_alloc_cmd_msg(struct mlx5_core_dev *dev, ...@@ -1165,7 +1166,6 @@ static struct mlx5_cmd_msg *mlx5_alloc_cmd_msg(struct mlx5_core_dev *dev,
head = tmp; head = tmp;
} }
msg->next = head; msg->next = head;
msg->len = size;
return msg; return msg;
err_alloc: err_alloc:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment