Merge tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rdma/rdma
Pull more rdma updates from Doug Ledford: "Items of note: - two patches fix a regression in the 4.15 kernel. The 4.14 kernel worked fine with NVMe over Fabrics and mlx5 adapters. That broke in 4.15. The fix is here. - one of the patches (the endian notation patch from Lijun) looks like a lot of lines of change, but it's mostly mechanical in nature. It amounts to the biggest chunk of change in it (it's about 2/3rds of the overall pull request). Summary: - Clean up some function signatures in rxe for clarity - Tidy the RDMA netlink header to remove unimplemented constants - bnxt_re driver fixes, one is a regression this window. - Minor hns driver fixes - Various fixes from Dan Carpenter and his tool - Fix IRQ cleanup race in HFI1 - HF1 performance optimizations and a fix to report counters in the right units - Fix for an IPoIB startup sequence race with the external manager - Oops fix for the new kabi path - Endian cleanups for hns - Fix for mlx5 related to the new automatic affinity support" * tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rdma/rdma: (38 commits) net/mlx5: increase async EQ to avoid EQ overrun mlx5: fix mlx5_get_vector_affinity to start from completion vector 0 RDMA/hns: Fix the endian problem for hns IB/uverbs: Use the standard kConfig format for experimental IB: Update references to libibverbs IB/hfi1: Add 16B rcvhdr trace support IB/hfi1: Convert kzalloc_node and kcalloc to use kcalloc_node IB/core: Avoid a potential OOPs for an unused optional parameter IB/core: Map iWarp AH type to undefined in rdma_ah_find_type IB/ipoib: Fix for potential no-carrier state IB/hfi1: Show fault stats in both TX and RX directions IB/hfi1: Remove blind constants from 16B update IB/hfi1: Convert PortXmitWait/PortVLXmitWait counters to flit times IB/hfi1: Do not override given pcie_pset value IB/hfi1: Optimize process_receive_ib() IB/hfi1: Remove unnecessary fecn and becn fields IB/hfi1: Look up ibport using a pointer in receive path IB/hfi1: Optimize packet type comparison using 9B and bypass code paths IB/hfi1: Compute BTH only for RDMA_WRITE_LAST/SEND_LAST packet IB/hfi1: Remove dependence on qp->s_hdrwords ...
Этот коммит содержится в:
@@ -52,28 +52,24 @@ int rxe_av_chk_attr(struct rxe_dev *rxe, struct rdma_ah_attr *attr)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int rxe_av_from_attr(struct rxe_dev *rxe, u8 port_num,
|
||||
struct rxe_av *av, struct rdma_ah_attr *attr)
|
||||
void rxe_av_from_attr(u8 port_num, struct rxe_av *av,
|
||||
struct rdma_ah_attr *attr)
|
||||
{
|
||||
memset(av, 0, sizeof(*av));
|
||||
memcpy(&av->grh, rdma_ah_read_grh(attr),
|
||||
sizeof(*rdma_ah_read_grh(attr)));
|
||||
av->port_num = port_num;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int rxe_av_to_attr(struct rxe_dev *rxe, struct rxe_av *av,
|
||||
struct rdma_ah_attr *attr)
|
||||
void rxe_av_to_attr(struct rxe_av *av, struct rdma_ah_attr *attr)
|
||||
{
|
||||
attr->type = RDMA_AH_ATTR_TYPE_ROCE;
|
||||
memcpy(rdma_ah_retrieve_grh(attr), &av->grh, sizeof(av->grh));
|
||||
rdma_ah_set_ah_flags(attr, IB_AH_GRH);
|
||||
rdma_ah_set_port_num(attr, av->port_num);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int rxe_av_fill_ip_info(struct rxe_dev *rxe,
|
||||
struct rxe_av *av,
|
||||
void rxe_av_fill_ip_info(struct rxe_av *av,
|
||||
struct rdma_ah_attr *attr,
|
||||
struct ib_gid_attr *sgid_attr,
|
||||
union ib_gid *sgid)
|
||||
@@ -81,8 +77,6 @@ int rxe_av_fill_ip_info(struct rxe_dev *rxe,
|
||||
rdma_gid2ip(&av->sgid_addr._sockaddr, sgid);
|
||||
rdma_gid2ip(&av->dgid_addr._sockaddr, &rdma_ah_read_grh(attr)->dgid);
|
||||
av->network_type = ib_gid_to_network_type(sgid_attr->gid_type, sgid);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct rxe_av *rxe_get_av(struct rxe_pkt_info *pkt)
|
||||
|
@@ -38,14 +38,12 @@
|
||||
|
||||
int rxe_av_chk_attr(struct rxe_dev *rxe, struct rdma_ah_attr *attr);
|
||||
|
||||
int rxe_av_from_attr(struct rxe_dev *rxe, u8 port_num,
|
||||
struct rxe_av *av, struct rdma_ah_attr *attr);
|
||||
void rxe_av_from_attr(u8 port_num, struct rxe_av *av,
|
||||
struct rdma_ah_attr *attr);
|
||||
|
||||
int rxe_av_to_attr(struct rxe_dev *rxe, struct rxe_av *av,
|
||||
struct rdma_ah_attr *attr);
|
||||
void rxe_av_to_attr(struct rxe_av *av, struct rdma_ah_attr *attr);
|
||||
|
||||
int rxe_av_fill_ip_info(struct rxe_dev *rxe,
|
||||
struct rxe_av *av,
|
||||
void rxe_av_fill_ip_info(struct rxe_av *av,
|
||||
struct rdma_ah_attr *attr,
|
||||
struct ib_gid_attr *sgid_attr,
|
||||
union ib_gid *sgid);
|
||||
|
@@ -633,9 +633,8 @@ int rxe_qp_from_attr(struct rxe_qp *qp, struct ib_qp_attr *attr, int mask,
|
||||
ib_get_cached_gid(&rxe->ib_dev, 1,
|
||||
rdma_ah_read_grh(&attr->ah_attr)->sgid_index,
|
||||
&sgid, &sgid_attr);
|
||||
rxe_av_from_attr(rxe, attr->port_num, &qp->pri_av,
|
||||
&attr->ah_attr);
|
||||
rxe_av_fill_ip_info(rxe, &qp->pri_av, &attr->ah_attr,
|
||||
rxe_av_from_attr(attr->port_num, &qp->pri_av, &attr->ah_attr);
|
||||
rxe_av_fill_ip_info(&qp->pri_av, &attr->ah_attr,
|
||||
&sgid_attr, &sgid);
|
||||
if (sgid_attr.ndev)
|
||||
dev_put(sgid_attr.ndev);
|
||||
@@ -648,9 +647,9 @@ int rxe_qp_from_attr(struct rxe_qp *qp, struct ib_qp_attr *attr, int mask,
|
||||
ib_get_cached_gid(&rxe->ib_dev, 1, sgid_index,
|
||||
&sgid, &sgid_attr);
|
||||
|
||||
rxe_av_from_attr(rxe, attr->alt_port_num, &qp->alt_av,
|
||||
rxe_av_from_attr(attr->alt_port_num, &qp->alt_av,
|
||||
&attr->alt_ah_attr);
|
||||
rxe_av_fill_ip_info(rxe, &qp->alt_av, &attr->alt_ah_attr,
|
||||
rxe_av_fill_ip_info(&qp->alt_av, &attr->alt_ah_attr,
|
||||
&sgid_attr, &sgid);
|
||||
if (sgid_attr.ndev)
|
||||
dev_put(sgid_attr.ndev);
|
||||
@@ -765,8 +764,6 @@ int rxe_qp_from_attr(struct rxe_qp *qp, struct ib_qp_attr *attr, int mask,
|
||||
/* called by the query qp verb */
|
||||
int rxe_qp_to_attr(struct rxe_qp *qp, struct ib_qp_attr *attr, int mask)
|
||||
{
|
||||
struct rxe_dev *rxe = to_rdev(qp->ibqp.device);
|
||||
|
||||
*attr = qp->attr;
|
||||
|
||||
attr->rq_psn = qp->resp.psn;
|
||||
@@ -781,8 +778,8 @@ int rxe_qp_to_attr(struct rxe_qp *qp, struct ib_qp_attr *attr, int mask)
|
||||
attr->cap.max_recv_sge = qp->rq.max_sge;
|
||||
}
|
||||
|
||||
rxe_av_to_attr(rxe, &qp->pri_av, &attr->ah_attr);
|
||||
rxe_av_to_attr(rxe, &qp->alt_av, &attr->alt_ah_attr);
|
||||
rxe_av_to_attr(&qp->pri_av, &attr->ah_attr);
|
||||
rxe_av_to_attr(&qp->alt_av, &attr->alt_ah_attr);
|
||||
|
||||
if (qp->req.state == QP_STATE_DRAIN) {
|
||||
attr->sq_draining = 1;
|
||||
|
@@ -271,13 +271,12 @@ static int rxe_init_av(struct rxe_dev *rxe, struct rdma_ah_attr *attr,
|
||||
return err;
|
||||
}
|
||||
|
||||
err = rxe_av_from_attr(rxe, rdma_ah_get_port_num(attr), av, attr);
|
||||
if (!err)
|
||||
err = rxe_av_fill_ip_info(rxe, av, attr, &sgid_attr, &sgid);
|
||||
rxe_av_from_attr(rdma_ah_get_port_num(attr), av, attr);
|
||||
rxe_av_fill_ip_info(av, attr, &sgid_attr, &sgid);
|
||||
|
||||
if (sgid_attr.ndev)
|
||||
dev_put(sgid_attr.ndev);
|
||||
return err;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct ib_ah *rxe_create_ah(struct ib_pd *ibpd,
|
||||
@@ -335,12 +334,11 @@ static int rxe_modify_ah(struct ib_ah *ibah, struct rdma_ah_attr *attr)
|
||||
|
||||
static int rxe_query_ah(struct ib_ah *ibah, struct rdma_ah_attr *attr)
|
||||
{
|
||||
struct rxe_dev *rxe = to_rdev(ibah->device);
|
||||
struct rxe_ah *ah = to_rah(ibah);
|
||||
|
||||
memset(attr, 0, sizeof(*attr));
|
||||
attr->type = ibah->type;
|
||||
rxe_av_to_attr(rxe, &ah->av, attr);
|
||||
rxe_av_to_attr(&ah->av, attr);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Ссылка в новой задаче
Block a user