net/mlx5: Refactor fragmented buffer struct fields and init flow
Take struct mlx5_frag_buf out of mlx5_frag_buf_ctrl, as it is not needed to manage and control the datapath of the fragmented buffers API. struct mlx5_frag_buf contains control info to manage the allocation and de-allocation of the fragmented buffer. Its fields are not relevant for datapath, so here I take them out of the struct mlx5_frag_buf_ctrl, except for the fragments array itself. In addition, modified mlx5_fill_fbc to initialise the frags pointers as well. This implies that the buffer must be allocated before the function is called. A set of type-specific *_get_byte_size() functions are replaced by a generic one. Signed-off-by: Tariq Toukan <tariqt@mellanox.com> Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
This commit is contained in:

کامیت شده توسط
Saeed Mahameed

والد
3a3295bfa6
کامیت
4972e6fa3a
@@ -393,7 +393,7 @@ static void handle_atomics(struct mlx5_ib_qp *qp, struct mlx5_cqe64 *cqe64,
|
||||
|
||||
static void free_cq_buf(struct mlx5_ib_dev *dev, struct mlx5_ib_cq_buf *buf)
|
||||
{
|
||||
mlx5_frag_buf_free(dev->mdev, &buf->fbc.frag_buf);
|
||||
mlx5_frag_buf_free(dev->mdev, &buf->frag_buf);
|
||||
}
|
||||
|
||||
static void get_sig_err_item(struct mlx5_sig_err_cqe *cqe,
|
||||
@@ -728,16 +728,11 @@ static int alloc_cq_frag_buf(struct mlx5_ib_dev *dev,
|
||||
int nent,
|
||||
int cqe_size)
|
||||
{
|
||||
struct mlx5_frag_buf_ctrl *c = &buf->fbc;
|
||||
struct mlx5_frag_buf *frag_buf = &c->frag_buf;
|
||||
u32 cqc_buff[MLX5_ST_SZ_DW(cqc)] = {0};
|
||||
struct mlx5_frag_buf *frag_buf = &buf->frag_buf;
|
||||
u8 log_wq_stride = 6 + (cqe_size == 128 ? 1 : 0);
|
||||
u8 log_wq_sz = ilog2(cqe_size);
|
||||
int err;
|
||||
|
||||
MLX5_SET(cqc, cqc_buff, log_cq_size, ilog2(cqe_size));
|
||||
MLX5_SET(cqc, cqc_buff, cqe_sz, (cqe_size == 128) ? 1 : 0);
|
||||
|
||||
mlx5_core_init_cq_frag_buf(&buf->fbc, cqc_buff);
|
||||
|
||||
err = mlx5_frag_buf_alloc_node(dev->mdev,
|
||||
nent * cqe_size,
|
||||
frag_buf,
|
||||
@@ -745,6 +740,8 @@ static int alloc_cq_frag_buf(struct mlx5_ib_dev *dev,
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
mlx5_init_fbc(frag_buf->frags, log_wq_stride, log_wq_sz, &buf->fbc);
|
||||
|
||||
buf->cqe_size = cqe_size;
|
||||
buf->nent = nent;
|
||||
|
||||
@@ -934,7 +931,7 @@ static int create_cq_kernel(struct mlx5_ib_dev *dev, struct mlx5_ib_cq *cq,
|
||||
|
||||
*inlen = MLX5_ST_SZ_BYTES(create_cq_in) +
|
||||
MLX5_FLD_SZ_BYTES(create_cq_in, pas[0]) *
|
||||
cq->buf.fbc.frag_buf.npages;
|
||||
cq->buf.frag_buf.npages;
|
||||
*cqb = kvzalloc(*inlen, GFP_KERNEL);
|
||||
if (!*cqb) {
|
||||
err = -ENOMEM;
|
||||
@@ -942,11 +939,11 @@ static int create_cq_kernel(struct mlx5_ib_dev *dev, struct mlx5_ib_cq *cq,
|
||||
}
|
||||
|
||||
pas = (__be64 *)MLX5_ADDR_OF(create_cq_in, *cqb, pas);
|
||||
mlx5_fill_page_frag_array(&cq->buf.fbc.frag_buf, pas);
|
||||
mlx5_fill_page_frag_array(&cq->buf.frag_buf, pas);
|
||||
|
||||
cqc = MLX5_ADDR_OF(create_cq_in, *cqb, cq_context);
|
||||
MLX5_SET(cqc, cqc, log_page_size,
|
||||
cq->buf.fbc.frag_buf.page_shift -
|
||||
cq->buf.frag_buf.page_shift -
|
||||
MLX5_ADAPTER_PAGE_SHIFT);
|
||||
|
||||
*index = dev->mdev->priv.uar->index;
|
||||
@@ -1365,11 +1362,10 @@ int mlx5_ib_resize_cq(struct ib_cq *ibcq, int entries, struct ib_udata *udata)
|
||||
cqe_size = 64;
|
||||
err = resize_kernel(dev, cq, entries, cqe_size);
|
||||
if (!err) {
|
||||
struct mlx5_frag_buf_ctrl *c;
|
||||
struct mlx5_frag_buf *frag_buf = &cq->resize_buf->frag_buf;
|
||||
|
||||
c = &cq->resize_buf->fbc;
|
||||
npas = c->frag_buf.npages;
|
||||
page_shift = c->frag_buf.page_shift;
|
||||
npas = frag_buf->npages;
|
||||
page_shift = frag_buf->page_shift;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1390,8 +1386,7 @@ int mlx5_ib_resize_cq(struct ib_cq *ibcq, int entries, struct ib_udata *udata)
|
||||
mlx5_ib_populate_pas(dev, cq->resize_umem, page_shift,
|
||||
pas, 0);
|
||||
else
|
||||
mlx5_fill_page_frag_array(&cq->resize_buf->fbc.frag_buf,
|
||||
pas);
|
||||
mlx5_fill_page_frag_array(&cq->resize_buf->frag_buf, pas);
|
||||
|
||||
MLX5_SET(modify_cq_in, in,
|
||||
modify_field_select_resize_field_select.resize_field_select.resize_field_select,
|
||||
|
@@ -435,6 +435,7 @@ struct mlx5_ib_qp {
|
||||
|
||||
struct mlx5_ib_cq_buf {
|
||||
struct mlx5_frag_buf_ctrl fbc;
|
||||
struct mlx5_frag_buf frag_buf;
|
||||
struct ib_umem *umem;
|
||||
int cqe_size;
|
||||
int nent;
|
||||
|
مرجع در شماره جدید
Block a user