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)
 {
        u8 *ptr = buf;
 static void calc_chain_sig(struct mlx5_cmd_msg *msg)
 {
        struct mlx5_cmd_mailbox *next = msg->next;
-       int size = msg->len;
-       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 n = mlx5_calc_cmd_blocks(msg);
        int i = 0;
 
        for (i = 0; i < n && next; i++)  {
 static int verify_signature(struct mlx5_cmd_work_ent *ent)
 {
        struct mlx5_cmd_mailbox *next = ent->out->next;
+       int n = mlx5_calc_cmd_blocks(ent->out);
        int err;
        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;
 
        sig = xor8_buf(ent->lay, 0, sizeof(*ent->lay));
        struct mlx5_cmd_mailbox *tmp, *head = NULL;
        struct mlx5_cmd_prot_block *block;
        struct mlx5_cmd_msg *msg;
-       int blen;
        int err;
        int n;
        int i;
        if (!msg)
                return ERR_PTR(-ENOMEM);
 
-       blen = size - min_t(int, sizeof(msg->first.data), size);
-       n = (blen + MLX5_CMD_DATA_BLOCK_SIZE - 1) / MLX5_CMD_DATA_BLOCK_SIZE;
+       msg->len = size;
+       n = mlx5_calc_cmd_blocks(msg);
 
        for (i = 0; i < n; i++) {
                tmp = alloc_cmd_box(dev, flags);
                head = tmp;
        }
        msg->next = head;
-       msg->len = size;
        return msg;
 
 err_alloc: