summaryrefslogtreecommitdiff
path: root/include/rdma/rdma_vt.h
diff options
context:
space:
mode:
authorDennis Dalessandro <dennis.dalessandro@intel.com>2016-01-22 13:00:35 -0800
committerDoug Ledford <dledford@redhat.com>2016-03-10 20:37:25 -0500
commit3b0b3fb3c1bbf50a2f88ea7345448a41dcba3c57 (patch)
treeb8c03fbc1a09006c2036c821823e436169f69989 /include/rdma/rdma_vt.h
parent81ba39a82e8a9ed4eba3e967a09e60a9d00d8de4 (diff)
downloadlwn-3b0b3fb3c1bbf50a2f88ea7345448a41dcba3c57.tar.gz
lwn-3b0b3fb3c1bbf50a2f88ea7345448a41dcba3c57.zip
IB/rdmavt: Add modify qp
Add modify qp and supporting functions. Reviewed-by: Mike Marciniszyn <mike.marciniszyn@intel.com> Reviewed-by: Ira Weiny <ira.weiny@intel.com> Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com> Signed-off-by: Doug Ledford <dledford@redhat.com>
Diffstat (limited to 'include/rdma/rdma_vt.h')
-rw-r--r--include/rdma/rdma_vt.h42
1 files changed, 42 insertions, 0 deletions
diff --git a/include/rdma/rdma_vt.h b/include/rdma/rdma_vt.h
index 36e4fb4c0df3..1c7123ff3656 100644
--- a/include/rdma/rdma_vt.h
+++ b/include/rdma/rdma_vt.h
@@ -55,6 +55,7 @@
#include <linux/spinlock.h>
#include <linux/list.h>
+#include <linux/hash.h>
#include <rdma/ib_verbs.h>
#include <rdma/rdmavt_mr.h>
#include <rdma/rdmavt_qp.h>
@@ -194,6 +195,10 @@ struct rvt_driver_params {
u8 qos_shift;
char cq_name[RVT_CQN_MAX];
int node;
+ int max_rdma_atomic;
+ int psn_mask;
+ int psn_shift;
+ int psn_modify_mask;
};
/* Protection domain */
@@ -233,6 +238,15 @@ struct rvt_driver_provided {
void (*notify_qp_reset)(struct rvt_qp *qp);
void (*schedule_send)(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);
+ void (*flush_qp_waiters)(struct rvt_qp *qp);
+ void (*stop_send_queue)(struct rvt_qp *qp);
+ void (*quiesce_qp)(struct rvt_qp *qp);
+ void (*notify_error_qp)(struct rvt_qp *qp);
+ u32 (*mtu_from_qp)(struct rvt_dev_info *rdi, struct rvt_qp *qp,
+ u32 pmtu);
+ int (*mtu_to_path_mtu)(u32 mtu);
/*--------------------*/
/* Optional functions */
@@ -340,6 +354,34 @@ static inline u16 rvt_get_pkey(struct rvt_dev_info *rdi,
return rdi->ports[port_index]->pkey_table[index];
}
+/**
+ * rvt_lookup_qpn - return the QP with the given QPN
+ * @ibp: the ibport
+ * @qpn: the QP number to look up
+ *
+ * The caller must hold the rcu_read_lock(), and keep the lock until
+ * the returned qp is no longer in use.
+ */
+/* TODO: Remove this and put in rdmavt/qp.h when no longer needed by drivers */
+static inline struct rvt_qp *rvt_lookup_qpn(struct rvt_dev_info *rdi,
+ struct rvt_ibport *rvp,
+ u32 qpn) __must_hold(RCU)
+{
+ struct rvt_qp *qp = NULL;
+
+ if (unlikely(qpn <= 1)) {
+ qp = rcu_dereference(rvp->qp[qpn]);
+ } else {
+ u32 n = hash_32(qpn, rdi->qp_dev->qp_table_bits);
+
+ for (qp = rcu_dereference(rdi->qp_dev->qp_table[n]); qp;
+ qp = rcu_dereference(qp->next))
+ if (qp->ibqp.qp_num == qpn)
+ break;
+ }
+ return qp;
+}
+
int rvt_register_device(struct rvt_dev_info *rvd);
void rvt_unregister_device(struct rvt_dev_info *rvd);
int rvt_check_ah(struct ib_device *ibdev, struct ib_ah_attr *ah_attr);