From: Dennis Dalessandro <dennis.dalessandro-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
To: dledford-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org
Cc: linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
Harish Chegondi
<harish.chegondi-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>,
Ira Weiny <ira.weiny-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
Subject: [PATCH v3 31/36] IB/rdmavt: Add an ibport data structure to rdmavt
Date: Wed, 06 Jan 2016 10:04:13 -0800 [thread overview]
Message-ID: <20160106180411.8747.37728.stgit@scvm10.sc.intel.com> (raw)
In-Reply-To: <20160106174638.8747.47197.stgit-9QXIwq+3FY+1XWohqUldA0EOCMrvLtNR@public.gmane.org>
Converge the ibport data structures of qib and hfi1 into a common ib
port structure. Also provides a place to keep track of these ports
in case rdmavt needs it. Along with this goes an attach and detach
function for drivers to use to notify rdmavt of the ports.
Reviewed-by: Ira Weiny <ira.weiny-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
Reviewed-by: Harish Chegondi <harish.chegondi-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
Signed-off-by: Dennis Dalessandro <dennis.dalessandro-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
---
drivers/infiniband/sw/rdmavt/vt.c | 24 +++++++++++++
include/rdma/rdma_vt.h | 66 ++++++++++++++++++++++++++++++++++++-
2 files changed, 89 insertions(+), 1 deletions(-)
diff --git a/drivers/infiniband/sw/rdmavt/vt.c b/drivers/infiniband/sw/rdmavt/vt.c
index 7dab0ca..44de280 100644
--- a/drivers/infiniband/sw/rdmavt/vt.c
+++ b/drivers/infiniband/sw/rdmavt/vt.c
@@ -300,6 +300,19 @@ int rvt_register_device(struct rvt_dev_info *rdi)
spin_lock_init(&rdi->n_pds_lock);
rdi->n_pds_allocated = 0;
+ if (rdi->dparms.nports) {
+ rdi->ports = kcalloc(rdi->dparms.nports,
+ sizeof(struct rvt_ibport **),
+ GFP_KERNEL);
+ if (!rdi->ports) {
+ rvt_pr_err(rdi, "Could not allocate port mem.\n");
+ ret = -ENOMEM;
+ goto bail_mr;
+ }
+ } else {
+ rvt_pr_warn(rdi, "Driver says it has no ports.\n");
+ }
+
/* We are now good to announce we exist */
ret = ib_register_device(&rdi->ibdev, rdi->driver_f.port_callback);
if (ret) {
@@ -327,3 +340,14 @@ void rvt_unregister_device(struct rvt_dev_info *rdi)
rvt_mr_exit(rdi);
}
EXPORT_SYMBOL(rvt_unregister_device);
+
+/*
+ * Keep track of a list of ports. No need to have a detach port.
+ * They persist until the driver goes away.
+ */
+void rvt_attach_port(struct rvt_dev_info *rdi, struct rvt_ibport *port,
+ int portnum)
+{
+ rdi->ports[portnum] = port;
+}
+EXPORT_SYMBOL(rvt_attach_port);
diff --git a/include/rdma/rdma_vt.h b/include/rdma/rdma_vt.h
index fcf3ec0..a3d6a5b 100644
--- a/include/rdma/rdma_vt.h
+++ b/include/rdma/rdma_vt.h
@@ -53,6 +53,8 @@
* rdmavt layer.
*/
+#include <linux/spinlock.h>
+#include <linux/list.h>
#include "ib_verbs.h"
#define RVT_MULTICAST_LID_BASE 0xC000
@@ -359,6 +361,65 @@ struct rvt_srq {
/* End QP section */
+struct rvt_ibport {
+ struct rvt_qp __rcu *qp[2];
+ struct ib_mad_agent *send_agent; /* agent for SMI (traps) */
+ struct rb_root mcast_tree;
+ spinlock_t lock; /* protect changes in this struct */
+
+ /* non-zero when timer is set */
+ unsigned long mkey_lease_timeout;
+ unsigned long trap_timeout;
+ __be64 gid_prefix; /* in network order */
+ __be64 mkey;
+ u64 tid;
+ u32 port_cap_flags;
+ u32 pma_sample_start;
+ u32 pma_sample_interval;
+ __be16 pma_counter_select[5];
+ u16 pma_tag;
+ u16 mkey_lease_period;
+ u16 sm_lid;
+ u8 sm_sl;
+ u8 mkeyprot;
+ u8 subnet_timeout;
+ u8 vl_high_limit;
+
+ /*
+ * Driver is expected to keep these up to date. These
+ * counters are informational only and not required to be
+ * completely accurate.
+ */
+ u64 n_rc_resends;
+ u64 n_seq_naks;
+ u64 n_rdma_seq;
+ u64 n_rnr_naks;
+ u64 n_other_naks;
+ u64 n_loop_pkts;
+ u64 n_pkt_drops;
+ u64 n_vl15_dropped;
+ u64 n_rc_timeouts;
+ u64 n_dmawait;
+ u64 n_unaligned;
+ u64 n_rc_dupreq;
+ u64 n_rc_seqnak;
+ u16 pkey_violations;
+ u16 qkey_violations;
+ u16 mkey_violations;
+
+ /* Hot-path per CPU counters to avoid cacheline trading to update */
+ u64 z_rc_acks;
+ u64 z_rc_qacks;
+ u64 z_rc_delayed_comp;
+ u64 __percpu *rc_acks;
+ u64 __percpu *rc_qacks;
+ u64 __percpu *rc_delayed_comp;
+
+ void *priv; /* driver private data */
+
+ /* TODO: Move sm_ah and smi_ah into here as well*/
+};
+
/*
* Things that are driver specific, module parameters in hfi1 and qib
*/
@@ -403,6 +464,7 @@ struct rvt_driver_params {
* For instance special module parameters. Goes here.
*/
unsigned int lkey_table_size;
+ int nports;
};
/*
@@ -465,6 +527,7 @@ struct rvt_dev_info {
spinlock_t n_ahs_lock; /* Protect ah allocated count */
int flags;
+ struct rvt_ibport **ports;
};
static inline struct rvt_pd *ibpd_to_rvtpd(struct ib_pd *ibpd)
@@ -501,9 +564,10 @@ static inline struct rvt_srq *ibsrq_to_rvtsrq(struct ib_srq *ibsrq)
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);
+void rvt_attach_port(struct rvt_dev_info *rdi, struct rvt_ibport *port,
+ int portnum);
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,
struct rvt_sge *isge, struct ib_sge *sge, int acc);
-
#endif /* DEF_RDMA_VT_H */
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2016-01-06 18:04 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-01-06 17:49 [PATCH v3 00/36] Add rdma verbs transport library Dennis Dalessandro
[not found] ` <20160106174638.8747.47197.stgit-9QXIwq+3FY+1XWohqUldA0EOCMrvLtNR@public.gmane.org>
2016-01-06 17:50 ` [PATCH v3 01/36] IB/rdmavt: Create module framework and handle driver registration Dennis Dalessandro
2016-01-06 17:51 ` [PATCH v3 02/36] IB/rdmavt: Consolidate dma ops in rdmavt Dennis Dalessandro
2016-01-06 17:51 ` [PATCH v3 03/36] IB/rdmavt: Add protection domain to rdmavt Dennis Dalessandro
2016-01-06 17:52 ` [PATCH v3 04/36] IB/rdmavt: Add ib core device attributes to rvt driver params list Dennis Dalessandro
2016-01-06 17:52 ` [PATCH v3 05/36] IB/rdmavt: Macroize override checks during driver registration Dennis Dalessandro
2016-01-06 17:53 ` [PATCH v3 06/36] IB/rdmavt: Add query and modify device stubs Dennis Dalessandro
2016-01-06 17:54 ` [PATCH v3 07/36] IB/rdmavt: Add query and modify port stubs Dennis Dalessandro
2016-01-06 17:54 ` [PATCH v3 08/36] IB/rdmavt: Add pkey query stub Dennis Dalessandro
2016-01-06 17:54 ` [PATCH v3 09/36] IB/rdmavt: Add query gid stub Dennis Dalessandro
2016-01-06 17:55 ` [PATCH v3 10/36] IB/rdmavt: Alloc and dealloc ucontexts Dennis Dalessandro
2016-01-06 17:56 ` [PATCH v3 11/36] IB/rdmavt: Add queue pair function stubs Dennis Dalessandro
2016-01-06 17:56 ` [PATCH v3 12/36] IB/rdmavt: Add address handle stubs Dennis Dalessandro
2016-01-06 17:57 ` [PATCH v3 13/36] IB/rdmavt: Add memory region stubs Dennis Dalessandro
2016-01-06 17:57 ` [PATCH v3 14/36] IB/rdmavt: Add SRQ stubs Dennis Dalessandro
2016-01-06 17:58 ` [PATCH v3 15/36] IB/rdmavt: Add multicast stubs Dennis Dalessandro
2016-01-06 17:58 ` [PATCH v3 16/36] IB/rdmavt: Add process MAD stub Dennis Dalessandro
2016-01-06 17:59 ` [PATCH v3 17/36] IB/rdmavt: Add mmap stub Dennis Dalessandro
2016-01-06 17:59 ` [PATCH v3 18/36] IB/rdmavt: Add get port immutable stub Dennis Dalessandro
2016-01-06 18:00 ` [PATCH v3 19/36] IB/rdmavt: Add completion queue function stubs Dennis Dalessandro
2016-01-06 18:01 ` [PATCH v3 20/36] IB/rdmavt: Add post send and recv stubs Dennis Dalessandro
2016-01-06 18:01 ` [PATCH v3 21/36] IB/rdmavt: Move MR datastructures into rvt Dennis Dalessandro
2016-01-06 18:02 ` [PATCH v3 22/36] IB/rdmavt: Add queue pair data structure to rdmavt Dennis Dalessandro
2016-01-06 18:02 ` [PATCH v3 23/36] IB/rdmavt: Move driver helper functions to a common structure Dennis Dalessandro
2016-01-06 18:02 ` [PATCH v3 24/36] IB/rdmavt: Add device specific info prints Dennis Dalessandro
2016-01-06 18:03 ` [PATCH v3 25/36] IB/rdmavt: Add the start of capability flags Dennis Dalessandro
2016-01-06 18:03 ` [PATCH v3 26/36] IB/rdmavt: Move memory registration into rdmavt Dennis Dalessandro
2016-01-06 18:03 ` [PATCH v3 27/36] IB/rdmavt: Do not use rvt prints which rely on driver too early Dennis Dalessandro
2016-01-06 18:03 ` [PATCH v3 28/36] IB/rdmavt: Add common LID defines to rdmavt Dennis Dalessandro
2016-01-06 18:03 ` [PATCH v3 29/36] IB/rdmavt: Add AH " Dennis Dalessandro
2016-01-06 18:04 ` [PATCH v3 30/36] IB/rdmavt: Move SRQ data structure into rdmavt Dennis Dalessandro
2016-01-06 18:04 ` Dennis Dalessandro [this message]
2016-01-06 18:04 ` [PATCH v3 32/36] IB/rdmavt: Add driver notification for new AH Dennis Dalessandro
2016-01-06 18:04 ` [PATCH v3 33/36] IB/rdmavt: Break rdma_vt main include header file up Dennis Dalessandro
2016-01-06 18:04 ` [PATCH v3 34/36] IB/rdmavt: Initialize and teardown of qpn table Dennis Dalessandro
2016-01-06 18:04 ` [PATCH v3 35/36] IB/rdmavt: Add mmap related functions Dennis Dalessandro
2016-01-06 18:05 ` [PATCH v3 36/36] IB/rdmavt: Add pkey support Dennis Dalessandro
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20160106180411.8747.37728.stgit@scvm10.sc.intel.com \
--to=dennis.dalessandro-ral2jqcrhueavxtiumwx3w@public.gmane.org \
--cc=dledford-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
--cc=harish.chegondi-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
--cc=ira.weiny-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
--cc=linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.