mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-06 19:07:52 +00:00
RDMA/mlx5: Move all WR logic from qp.c to separate file
Split qp.c by removing all WR logic to separate file. Link: https://lore.kernel.org/r/20200506065513.4668-4-leon@kernel.org Signed-off-by: Leon Romanovsky <leonro@mellanox.com> Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
This commit is contained in:
parent
6671cde83d
commit
029e88fd1e
6 changed files with 1589 additions and 1553 deletions
|
@ -16,7 +16,8 @@ mlx5_ib-y := ah.o \
|
||||||
qpc.o \
|
qpc.o \
|
||||||
restrack.o \
|
restrack.o \
|
||||||
srq.o \
|
srq.o \
|
||||||
srq_cmd.o
|
srq_cmd.o \
|
||||||
|
wr.o
|
||||||
|
|
||||||
mlx5_ib-$(CONFIG_INFINIBAND_ON_DEMAND_PAGING) += odp.o
|
mlx5_ib-$(CONFIG_INFINIBAND_ON_DEMAND_PAGING) += odp.o
|
||||||
mlx5_ib-$(CONFIG_MLX5_ESWITCH) += ib_rep.o
|
mlx5_ib-$(CONFIG_MLX5_ESWITCH) += ib_rep.o
|
||||||
|
|
|
@ -61,6 +61,7 @@
|
||||||
#include "cmd.h"
|
#include "cmd.h"
|
||||||
#include "srq.h"
|
#include "srq.h"
|
||||||
#include "qp.h"
|
#include "qp.h"
|
||||||
|
#include "wr.h"
|
||||||
#include <linux/mlx5/fs_helpers.h>
|
#include <linux/mlx5/fs_helpers.h>
|
||||||
#include <linux/mlx5/accel.h>
|
#include <linux/mlx5/accel.h>
|
||||||
#include <rdma/uverbs_std_types.h>
|
#include <rdma/uverbs_std_types.h>
|
||||||
|
@ -6657,8 +6658,8 @@ static const struct ib_device_ops mlx5_ib_dev_ops = {
|
||||||
.modify_qp = mlx5_ib_modify_qp,
|
.modify_qp = mlx5_ib_modify_qp,
|
||||||
.modify_srq = mlx5_ib_modify_srq,
|
.modify_srq = mlx5_ib_modify_srq,
|
||||||
.poll_cq = mlx5_ib_poll_cq,
|
.poll_cq = mlx5_ib_poll_cq,
|
||||||
.post_recv = mlx5_ib_post_recv,
|
.post_recv = mlx5_ib_post_recv_nodrain,
|
||||||
.post_send = mlx5_ib_post_send,
|
.post_send = mlx5_ib_post_send_nodrain,
|
||||||
.post_srq_recv = mlx5_ib_post_srq_recv,
|
.post_srq_recv = mlx5_ib_post_srq_recv,
|
||||||
.process_mad = mlx5_ib_process_mad,
|
.process_mad = mlx5_ib_process_mad,
|
||||||
.query_ah = mlx5_ib_query_ah,
|
.query_ah = mlx5_ib_query_ah,
|
||||||
|
|
|
@ -1178,10 +1178,6 @@ int mlx5_ib_query_qp(struct ib_qp *ibqp, struct ib_qp_attr *qp_attr, int qp_attr
|
||||||
int mlx5_ib_destroy_qp(struct ib_qp *qp, struct ib_udata *udata);
|
int mlx5_ib_destroy_qp(struct ib_qp *qp, struct ib_udata *udata);
|
||||||
void mlx5_ib_drain_sq(struct ib_qp *qp);
|
void mlx5_ib_drain_sq(struct ib_qp *qp);
|
||||||
void mlx5_ib_drain_rq(struct ib_qp *qp);
|
void mlx5_ib_drain_rq(struct ib_qp *qp);
|
||||||
int mlx5_ib_post_send(struct ib_qp *ibqp, const struct ib_send_wr *wr,
|
|
||||||
const struct ib_send_wr **bad_wr);
|
|
||||||
int mlx5_ib_post_recv(struct ib_qp *ibqp, const struct ib_recv_wr *wr,
|
|
||||||
const struct ib_recv_wr **bad_wr);
|
|
||||||
int mlx5_ib_read_wqe_sq(struct mlx5_ib_qp *qp, int wqe_index, void *buffer,
|
int mlx5_ib_read_wqe_sq(struct mlx5_ib_qp *qp, int wqe_index, void *buffer,
|
||||||
size_t buflen, size_t *bc);
|
size_t buflen, size_t *bc);
|
||||||
int mlx5_ib_read_wqe_rq(struct mlx5_ib_qp *qp, int wqe_index, void *buffer,
|
int mlx5_ib_read_wqe_rq(struct mlx5_ib_qp *qp, int wqe_index, void *buffer,
|
||||||
|
|
File diff suppressed because it is too large
Load diff
1504
drivers/infiniband/hw/mlx5/wr.c
Normal file
1504
drivers/infiniband/hw/mlx5/wr.c
Normal file
File diff suppressed because it is too large
Load diff
76
drivers/infiniband/hw/mlx5/wr.h
Normal file
76
drivers/infiniband/hw/mlx5/wr.h
Normal file
|
@ -0,0 +1,76 @@
|
||||||
|
/* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2020, Mellanox Technologies inc. All rights reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _MLX5_IB_WR_H
|
||||||
|
#define _MLX5_IB_WR_H
|
||||||
|
|
||||||
|
#include "mlx5_ib.h"
|
||||||
|
|
||||||
|
enum {
|
||||||
|
MLX5_IB_SQ_UMR_INLINE_THRESHOLD = 64,
|
||||||
|
};
|
||||||
|
|
||||||
|
struct mlx5_wqe_eth_pad {
|
||||||
|
u8 rsvd0[16];
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/* get_sq_edge - Get the next nearby edge.
|
||||||
|
*
|
||||||
|
* An 'edge' is defined as the first following address after the end
|
||||||
|
* of the fragment or the SQ. Accordingly, during the WQE construction
|
||||||
|
* which repetitively increases the pointer to write the next data, it
|
||||||
|
* simply should check if it gets to an edge.
|
||||||
|
*
|
||||||
|
* @sq - SQ buffer.
|
||||||
|
* @idx - Stride index in the SQ buffer.
|
||||||
|
*
|
||||||
|
* Return:
|
||||||
|
* The new edge.
|
||||||
|
*/
|
||||||
|
static inline void *get_sq_edge(struct mlx5_ib_wq *sq, u32 idx)
|
||||||
|
{
|
||||||
|
void *fragment_end;
|
||||||
|
|
||||||
|
fragment_end = mlx5_frag_buf_get_wqe
|
||||||
|
(&sq->fbc,
|
||||||
|
mlx5_frag_buf_get_idx_last_contig_stride(&sq->fbc, idx));
|
||||||
|
|
||||||
|
return fragment_end + MLX5_SEND_WQE_BB;
|
||||||
|
}
|
||||||
|
|
||||||
|
int mlx5_ib_post_send(struct ib_qp *ibqp, const struct ib_send_wr *wr,
|
||||||
|
const struct ib_send_wr **bad_wr, bool drain);
|
||||||
|
int mlx5_ib_post_recv(struct ib_qp *ibqp, const struct ib_recv_wr *wr,
|
||||||
|
const struct ib_recv_wr **bad_wr, bool drain);
|
||||||
|
|
||||||
|
static inline int mlx5_ib_post_send_nodrain(struct ib_qp *ibqp,
|
||||||
|
const struct ib_send_wr *wr,
|
||||||
|
const struct ib_send_wr **bad_wr)
|
||||||
|
{
|
||||||
|
return mlx5_ib_post_send(ibqp, wr, bad_wr, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline int mlx5_ib_post_send_drain(struct ib_qp *ibqp,
|
||||||
|
const struct ib_send_wr *wr,
|
||||||
|
const struct ib_send_wr **bad_wr)
|
||||||
|
{
|
||||||
|
return mlx5_ib_post_send(ibqp, wr, bad_wr, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline int mlx5_ib_post_recv_nodrain(struct ib_qp *ibqp,
|
||||||
|
const struct ib_recv_wr *wr,
|
||||||
|
const struct ib_recv_wr **bad_wr)
|
||||||
|
{
|
||||||
|
return mlx5_ib_post_recv(ibqp, wr, bad_wr, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline int mlx5_ib_post_recv_drain(struct ib_qp *ibqp,
|
||||||
|
const struct ib_recv_wr *wr,
|
||||||
|
const struct ib_recv_wr **bad_wr)
|
||||||
|
{
|
||||||
|
return mlx5_ib_post_recv(ibqp, wr, bad_wr, true);
|
||||||
|
}
|
||||||
|
#endif /* _MLX5_IB_WR_H */
|
Loading…
Reference in a new issue