IB/qib, staging/rdma/hfi1: add s_hlock for use in post send
This patch adds an additional lock to reduce contention on the s_lock. This lock is used in post_send() so that the post_send is not serialized with the send engine and other send related processing. To do this the s_next_psn is now maintained on post_send() while post_send() related fields are moved to a new cache line. There is an s_avail maintained for the post_send() to mitigate trading cache lines with the send engine. The lock is released/acquired around releasing the just built packet to the egress mechanism. Reviewed-by: Jubin John <jubin.john@intel.com> Reviewed-by: Dennis Dalessandro <dennis.dalessandro@intel.com> Signed-off-by: Dean Luick <dean.luick@intel.com> Signed-off-by: Harish Chegondi <harish.chegondi@intel.com> Signed-off-by: Mike Marciniszyn <mike.marciniszyn@intel.com> Signed-off-by: Ira Weiny <ira.weiny@intel.com> Signed-off-by: Doug Ledford <dledford@redhat.com>
This commit is contained in:

committed by
Doug Ledford

parent
20f333b613
commit
46a80d62e6
@@ -220,6 +220,7 @@ struct rvt_ah {
|
||||
};
|
||||
|
||||
struct rvt_dev_info;
|
||||
struct rvt_swqe;
|
||||
struct rvt_driver_provided {
|
||||
/*
|
||||
* The work to create port files in /sys/class Infiniband is different
|
||||
@@ -240,6 +241,7 @@ struct rvt_driver_provided {
|
||||
void (*qp_priv_free)(struct rvt_dev_info *rdi, struct rvt_qp *qp);
|
||||
void (*notify_qp_reset)(struct rvt_qp *qp);
|
||||
void (*schedule_send)(struct rvt_qp *qp);
|
||||
void (*schedule_send_no_lock)(struct rvt_qp *qp);
|
||||
void (*do_send)(struct rvt_qp *qp);
|
||||
int (*get_pmtu_from_attr)(struct rvt_dev_info *rdi, struct rvt_qp *qp,
|
||||
struct ib_qp_attr *attr);
|
||||
@@ -273,7 +275,7 @@ struct rvt_driver_provided {
|
||||
void (*modify_qp)(struct rvt_qp *qp, struct ib_qp_attr *attr,
|
||||
int attr_mask, struct ib_udata *udata);
|
||||
|
||||
int (*check_send_wr)(struct rvt_qp *qp, struct ib_send_wr *wr);
|
||||
int (*check_send_wqe)(struct rvt_qp *qp, struct rvt_swqe *wqe);
|
||||
|
||||
void (*notify_create_mad_agent)(struct rvt_dev_info *rdi, int port_idx);
|
||||
void (*notify_free_mad_agent)(struct rvt_dev_info *rdi, int port_idx);
|
||||
|
Reference in New Issue
Block a user