summaryrefslogtreecommitdiff
path: root/include/rdma
diff options
context:
space:
mode:
authorKamal Heib <kamalh@mellanox.com>2016-01-06 10:03:59 -0800
committerDoug Ledford <dledford@redhat.com>2016-03-10 20:37:13 -0500
commit119a8e708d16d38eedfa3d920b89b709dda41a8f (patch)
tree3749c9296e1a084904a8ed30b6d98fa3f9e57107 /include/rdma
parentf2f342115ef2b0755abd73573831351e371f6242 (diff)
IB/rdmavt: Add AH to rdmavt
Original patch is from Kamal Heib <kamalh@mellanox.com>. It has been split into three separate patches. This one for rdmavt, a follow on for qib, and one for hfi1. Create datastructure for address handle and implement the create/destroy/modify/query of address handle for rdmavt. Reviewed-by: Ira Weiny <ira.weiny@intel.com> Signed-off-by: Kamal Heib <kamalh@mellanox.com> Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com> Signed-off-by: Doug Ledford <dledford@redhat.com>
Diffstat (limited to 'include/rdma')
-rw-r--r--include/rdma/rdma_vt.h17
1 files changed, 17 insertions, 0 deletions
diff --git a/include/rdma/rdma_vt.h b/include/rdma/rdma_vt.h
index dbb45bcd1fea..36cced63af77 100644
--- a/include/rdma/rdma_vt.h
+++ b/include/rdma/rdma_vt.h
@@ -411,6 +411,7 @@ struct rvt_driver_provided {
int (*port_callback)(struct ib_device *, u8, struct kobject *);
const char * (*get_card_name)(struct rvt_dev_info *rdi);
struct pci_dev * (*get_pci_dev)(struct rvt_dev_info *rdi);
+ int (*check_ah)(struct ib_device *, struct ib_ah_attr *);
};
/* Protection domain */
@@ -419,6 +420,13 @@ struct rvt_pd {
int user; /* non-zero if created from user space */
};
+/* Address handle */
+struct rvt_ah {
+ struct ib_ah ibah;
+ struct ib_ah_attr attr;
+ atomic_t refcount;
+};
+
struct rvt_dev_info {
struct ib_device ibdev; /* Keep this first. Nothing above here */
@@ -445,6 +453,9 @@ struct rvt_dev_info {
int n_pds_allocated;
spinlock_t n_pds_lock; /* Protect pd allocated count */
+ int n_ahs_allocated;
+ spinlock_t n_ahs_lock; /* Protect ah allocated count */
+
int flags;
};
@@ -453,6 +464,11 @@ static inline struct rvt_pd *ibpd_to_rvtpd(struct ib_pd *ibpd)
return container_of(ibpd, struct rvt_pd, ibpd);
}
+static inline struct rvt_ah *ibah_to_rvtah(struct ib_ah *ibah)
+{
+ return container_of(ibah, struct rvt_ah, ibah);
+}
+
static inline struct rvt_dev_info *ib_to_rvt(struct ib_device *ibdev)
{
return container_of(ibdev, struct rvt_dev_info, ibdev);
@@ -471,6 +487,7 @@ static inline void rvt_get_mr(struct rvt_mregion *mr)
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);
int rvt_rkey_ok(struct rvt_qp *qp, struct rvt_sge *sge,
u32 len, u64 vaddr, u32 rkey, int acc);
int rvt_lkey_ok(struct rvt_lkey_table *rkt, struct rvt_pd *pd,