Merge remote-tracking branch 'asoc/topic/omap' into asoc-next
[cascardo/linux.git] / drivers / staging / lustre / lnet / klnds / o2iblnd / o2iblnd.h
1 /*
2  * GPL HEADER START
3  *
4  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License version 2 only,
8  * as published by the Free Software Foundation.
9  *
10  * This program is distributed in the hope that it will be useful, but
11  * WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * General Public License version 2 for more details (a copy is included
14  * in the LICENSE file that accompanied this code).
15  *
16  * You should have received a copy of the GNU General Public License
17  * version 2 along with this program; If not, see
18  * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf
19  *
20  * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
21  * CA 95054 USA or visit www.sun.com if you need additional information or
22  * have any questions.
23  *
24  * GPL HEADER END
25  */
26 /*
27  * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
28  * Use is subject to license terms.
29  *
30  * Copyright (c) 2011, 2015, Intel Corporation.
31  */
32 /*
33  * This file is part of Lustre, http://www.lustre.org/
34  * Lustre is a trademark of Sun Microsystems, Inc.
35  *
36  * lnet/klnds/o2iblnd/o2iblnd.h
37  *
38  * Author: Eric Barton <eric@bartonsoftware.com>
39  */
40
41 #include <linux/module.h>
42 #include <linux/kernel.h>
43 #include <linux/mm.h>
44 #include <linux/string.h>
45 #include <linux/stat.h>
46 #include <linux/errno.h>
47 #include <linux/unistd.h>
48 #include <linux/uio.h>
49 #include <linux/uaccess.h>
50
51 #include <linux/io.h>
52
53 #include <linux/fs.h>
54 #include <linux/file.h>
55 #include <linux/list.h>
56 #include <linux/kmod.h>
57 #include <linux/sysctl.h>
58 #include <linux/pci.h>
59
60 #include <net/sock.h>
61 #include <linux/in.h>
62
63 #include <rdma/rdma_cm.h>
64 #include <rdma/ib_cm.h>
65 #include <rdma/ib_verbs.h>
66 #include <rdma/ib_fmr_pool.h>
67
68 #define DEBUG_SUBSYSTEM S_LND
69
70 #include "../../../include/linux/libcfs/libcfs.h"
71 #include "../../../include/linux/lnet/lnet.h"
72 #include "../../../include/linux/lnet/lib-lnet.h"
73
74 #define IBLND_PEER_HASH_SIZE            101     /* # peer lists */
75 /* # scheduler loops before reschedule */
76 #define IBLND_RESCHED                   100
77
78 #define IBLND_N_SCHED                   2
79 #define IBLND_N_SCHED_HIGH              4
80
81 typedef struct {
82         int *kib_dev_failover;           /* HCA failover */
83         unsigned int *kib_service;       /* IB service number */
84         int *kib_min_reconnect_interval; /* first failed connection retry... */
85         int *kib_max_reconnect_interval; /* exponentially increasing to this */
86         int *kib_cksum;                  /* checksum kib_msg_t? */
87         int *kib_timeout;                /* comms timeout (seconds) */
88         int *kib_keepalive;              /* keepalive timeout (seconds) */
89         int *kib_ntx;                    /* # tx descs */
90         int *kib_credits;                /* # concurrent sends */
91         int *kib_peertxcredits;          /* # concurrent sends to 1 peer */
92         int *kib_peerrtrcredits;         /* # per-peer router buffer credits */
93         int *kib_peercredits_hiw;        /* # when eagerly to return credits */
94         int *kib_peertimeout;            /* seconds to consider peer dead */
95         char **kib_default_ipif;         /* default IPoIB interface */
96         int *kib_retry_count;
97         int *kib_rnr_retry_count;
98         int *kib_concurrent_sends;       /* send work queue sizing */
99         int *kib_ib_mtu;                 /* IB MTU */
100         int *kib_map_on_demand;          /* map-on-demand if RD has more */
101                                          /* fragments than this value, 0 */
102                                          /* disable map-on-demand */
103         int *kib_fmr_pool_size;          /* # FMRs in pool */
104         int *kib_fmr_flush_trigger;      /* When to trigger FMR flush */
105         int *kib_fmr_cache;              /* enable FMR pool cache? */
106         int *kib_require_priv_port;      /* accept only privileged ports */
107         int *kib_use_priv_port; /* use privileged port for active connect */
108         int *kib_nscheds;                /* # threads on each CPT */
109 } kib_tunables_t;
110
111 extern kib_tunables_t  kiblnd_tunables;
112
113 #define IBLND_MSG_QUEUE_SIZE_V1   8 /* V1 only : # messages/RDMAs in-flight */
114 #define IBLND_CREDIT_HIGHWATER_V1 7 /* V1 only : when eagerly to return credits */
115
116 #define IBLND_CREDITS_DEFAULT     8 /* default # of peer credits */
117 #define IBLND_CREDITS_MAX         ((typeof(((kib_msg_t *) 0)->ibm_credits)) - 1)  /* Max # of peer credits */
118
119 #define IBLND_MSG_QUEUE_SIZE(v)    ((v) == IBLND_MSG_VERSION_1 ? \
120                                      IBLND_MSG_QUEUE_SIZE_V1 :   \
121                                      *kiblnd_tunables.kib_peertxcredits) /* # messages/RDMAs in-flight */
122 #define IBLND_CREDITS_HIGHWATER(v) ((v) == IBLND_MSG_VERSION_1 ? \
123                                      IBLND_CREDIT_HIGHWATER_V1 : \
124                                      *kiblnd_tunables.kib_peercredits_hiw) /* when eagerly to return credits */
125
126 #define kiblnd_rdma_create_id(cb, dev, ps, qpt) rdma_create_id(&init_net, \
127                                                                cb, dev, \
128                                                                ps, qpt)
129
130 static inline int
131 kiblnd_concurrent_sends_v1(void)
132 {
133         if (*kiblnd_tunables.kib_concurrent_sends > IBLND_MSG_QUEUE_SIZE_V1 * 2)
134                 return IBLND_MSG_QUEUE_SIZE_V1 * 2;
135
136         if (*kiblnd_tunables.kib_concurrent_sends < IBLND_MSG_QUEUE_SIZE_V1 / 2)
137                 return IBLND_MSG_QUEUE_SIZE_V1 / 2;
138
139         return *kiblnd_tunables.kib_concurrent_sends;
140 }
141
142 #define IBLND_CONCURRENT_SENDS(v)  ((v) == IBLND_MSG_VERSION_1 ? \
143                                      kiblnd_concurrent_sends_v1() : \
144                                      *kiblnd_tunables.kib_concurrent_sends)
145 /* 2 OOB shall suffice for 1 keepalive and 1 returning credits */
146 #define IBLND_OOB_CAPABLE(v)       ((v) != IBLND_MSG_VERSION_1)
147 #define IBLND_OOB_MSGS(v)          (IBLND_OOB_CAPABLE(v) ? 2 : 0)
148
149 #define IBLND_MSG_SIZE          (4 << 10)        /* max size of queued messages (inc hdr) */
150 #define IBLND_MAX_RDMA_FRAGS     LNET_MAX_IOV      /* max # of fragments supported */
151 #define IBLND_CFG_RDMA_FRAGS       (*kiblnd_tunables.kib_map_on_demand ? \
152                                     *kiblnd_tunables.kib_map_on_demand :      \
153                                      IBLND_MAX_RDMA_FRAGS)  /* max # of fragments configured by user */
154 #define IBLND_RDMA_FRAGS(v)     ((v) == IBLND_MSG_VERSION_1 ? \
155                                      IBLND_MAX_RDMA_FRAGS : IBLND_CFG_RDMA_FRAGS)
156
157 /************************/
158 /* derived constants... */
159 /* Pools (shared by connections on each CPT) */
160 /* These pools can grow at runtime, so don't need give a very large value */
161 #define IBLND_TX_POOL                   256
162 #define IBLND_FMR_POOL                  256
163 #define IBLND_FMR_POOL_FLUSH            192
164
165 #define IBLND_RX_MSGS(c)        \
166         ((c->ibc_queue_depth) * 2 + IBLND_OOB_MSGS(c->ibc_version))
167 #define IBLND_RX_MSG_BYTES(c)   (IBLND_RX_MSGS(c) * IBLND_MSG_SIZE)
168 #define IBLND_RX_MSG_PAGES(c)   \
169         ((IBLND_RX_MSG_BYTES(c) + PAGE_SIZE - 1) / PAGE_SIZE)
170
171 /* WRs and CQEs (per connection) */
172 #define IBLND_RECV_WRS(c)       IBLND_RX_MSGS(c)
173 #define IBLND_SEND_WRS(c)       \
174         ((c->ibc_max_frags + 1) * IBLND_CONCURRENT_SENDS(c->ibc_version))
175 #define IBLND_CQ_ENTRIES(c)     (IBLND_RECV_WRS(c) + IBLND_SEND_WRS(c))
176
177 struct kib_hca_dev;
178
179 /* o2iblnd can run over aliased interface */
180 #ifdef IFALIASZ
181 #define KIB_IFNAME_SIZE       IFALIASZ
182 #else
183 #define KIB_IFNAME_SIZE       256
184 #endif
185
186 typedef struct {
187         struct list_head   ibd_list;            /* chain on kib_devs */
188         struct list_head   ibd_fail_list;       /* chain on kib_failed_devs */
189         __u32              ibd_ifip;            /* IPoIB interface IP */
190
191         /* IPoIB interface name */
192         char               ibd_ifname[KIB_IFNAME_SIZE];
193         int                ibd_nnets;           /* # nets extant */
194
195         unsigned long      ibd_next_failover;
196         int                ibd_failed_failover; /* # failover failures */
197         unsigned int       ibd_failover;        /* failover in progress */
198         unsigned int ibd_can_failover; /* IPoIB interface is a bonding master */
199         struct list_head   ibd_nets;
200         struct kib_hca_dev *ibd_hdev;
201 } kib_dev_t;
202
203 typedef struct kib_hca_dev {
204         struct rdma_cm_id  *ibh_cmid;           /* listener cmid */
205         struct ib_device   *ibh_ibdev;          /* IB device */
206         int                ibh_page_shift;      /* page shift of current HCA */
207         int                ibh_page_size;       /* page size of current HCA */
208         __u64              ibh_page_mask;       /* page mask of current HCA */
209         int                ibh_mr_shift;        /* bits shift of max MR size */
210         __u64              ibh_mr_size;         /* size of MR */
211         struct ib_mr       *ibh_mrs;            /* global MR */
212         struct ib_pd       *ibh_pd;             /* PD */
213         kib_dev_t          *ibh_dev;            /* owner */
214         atomic_t           ibh_ref;             /* refcount */
215 } kib_hca_dev_t;
216
217 /** # of seconds to keep pool alive */
218 #define IBLND_POOL_DEADLINE     300
219 /** # of seconds to retry if allocation failed */
220 #define IBLND_POOL_RETRY        1
221
222 typedef struct {
223         int                ibp_npages;          /* # pages */
224         struct page        *ibp_pages[0];       /* page array */
225 } kib_pages_t;
226
227 struct kib_pool;
228 struct kib_poolset;
229
230 typedef int  (*kib_ps_pool_create_t)(struct kib_poolset *ps,
231                                      int inc, struct kib_pool **pp_po);
232 typedef void (*kib_ps_pool_destroy_t)(struct kib_pool *po);
233 typedef void (*kib_ps_node_init_t)(struct kib_pool *po, struct list_head *node);
234 typedef void (*kib_ps_node_fini_t)(struct kib_pool *po, struct list_head *node);
235
236 struct kib_net;
237
238 #define IBLND_POOL_NAME_LEN     32
239
240 typedef struct kib_poolset {
241         spinlock_t            ps_lock;            /* serialize */
242         struct kib_net        *ps_net;            /* network it belongs to */
243         char                  ps_name[IBLND_POOL_NAME_LEN]; /* pool set name */
244         struct list_head      ps_pool_list;       /* list of pools */
245         struct list_head      ps_failed_pool_list;/* failed pool list */
246         unsigned long         ps_next_retry;      /* time stamp for retry if */
247                                                   /* failed to allocate */
248         int                   ps_increasing;      /* is allocating new pool */
249         int                   ps_pool_size;       /* new pool size */
250         int                   ps_cpt;             /* CPT id */
251
252         kib_ps_pool_create_t  ps_pool_create;     /* create a new pool */
253         kib_ps_pool_destroy_t ps_pool_destroy;    /* destroy a pool */
254         kib_ps_node_init_t    ps_node_init; /* initialize new allocated node */
255         kib_ps_node_fini_t    ps_node_fini;       /* finalize node */
256 } kib_poolset_t;
257
258 typedef struct kib_pool {
259         struct list_head      po_list;       /* chain on pool list */
260         struct list_head      po_free_list;  /* pre-allocated node */
261         kib_poolset_t         *po_owner;     /* pool_set of this pool */
262         unsigned long         po_deadline;   /* deadline of this pool */
263         int                   po_allocated;  /* # of elements in use */
264         int                   po_failed;     /* pool is created on failed HCA */
265         int                   po_size;       /* # of pre-allocated elements */
266 } kib_pool_t;
267
268 typedef struct {
269         kib_poolset_t         tps_poolset;        /* pool-set */
270         __u64                 tps_next_tx_cookie; /* cookie of TX */
271 } kib_tx_poolset_t;
272
273 typedef struct {
274         kib_pool_t            tpo_pool;           /* pool */
275         struct kib_hca_dev    *tpo_hdev;          /* device for this pool */
276         struct kib_tx         *tpo_tx_descs;      /* all the tx descriptors */
277         kib_pages_t           *tpo_tx_pages;      /* premapped tx msg pages */
278 } kib_tx_pool_t;
279
280 typedef struct {
281         spinlock_t            fps_lock;            /* serialize */
282         struct kib_net        *fps_net;            /* IB network */
283         struct list_head      fps_pool_list;       /* FMR pool list */
284         struct list_head      fps_failed_pool_list;/* FMR pool list */
285         __u64                 fps_version;         /* validity stamp */
286         int                   fps_cpt;             /* CPT id */
287         int                   fps_pool_size;
288         int                   fps_flush_trigger;
289         int                   fps_increasing;      /* is allocating new pool */
290         unsigned long         fps_next_retry;      /* time stamp for retry if*/
291                                                    /* failed to allocate */
292 } kib_fmr_poolset_t;
293
294 typedef struct {
295         struct list_head      fpo_list;            /* chain on pool list */
296         struct kib_hca_dev    *fpo_hdev;           /* device for this pool */
297         kib_fmr_poolset_t     *fpo_owner;          /* owner of this pool */
298         struct ib_fmr_pool    *fpo_fmr_pool;       /* IB FMR pool */
299         unsigned long         fpo_deadline;        /* deadline of this pool */
300         int                   fpo_failed;          /* fmr pool is failed */
301         int                   fpo_map_count;       /* # of mapped FMR */
302 } kib_fmr_pool_t;
303
304 typedef struct {
305         struct ib_pool_fmr    *fmr_pfmr;           /* IB pool fmr */
306         kib_fmr_pool_t        *fmr_pool;           /* pool of FMR */
307 } kib_fmr_t;
308
309 typedef struct kib_net {
310         struct list_head      ibn_list;       /* chain on kib_dev_t::ibd_nets */
311         __u64                 ibn_incarnation;/* my epoch */
312         int                   ibn_init;       /* initialisation state */
313         int                   ibn_shutdown;   /* shutting down? */
314
315         atomic_t              ibn_npeers;     /* # peers extant */
316         atomic_t              ibn_nconns;     /* # connections extant */
317
318         kib_tx_poolset_t      **ibn_tx_ps;    /* tx pool-set */
319         kib_fmr_poolset_t     **ibn_fmr_ps;   /* fmr pool-set */
320
321         kib_dev_t             *ibn_dev;       /* underlying IB device */
322 } kib_net_t;
323
324 #define KIB_THREAD_SHIFT                16
325 #define KIB_THREAD_ID(cpt, tid)         ((cpt) << KIB_THREAD_SHIFT | (tid))
326 #define KIB_THREAD_CPT(id)              ((id) >> KIB_THREAD_SHIFT)
327 #define KIB_THREAD_TID(id)              ((id) & ((1UL << KIB_THREAD_SHIFT) - 1))
328
329 struct kib_sched_info {
330         spinlock_t         ibs_lock;     /* serialise */
331         wait_queue_head_t  ibs_waitq;    /* schedulers sleep here */
332         struct list_head   ibs_conns;    /* conns to check for rx completions */
333         int                ibs_nthreads; /* number of scheduler threads */
334         int                ibs_nthreads_max; /* max allowed scheduler threads */
335         int                ibs_cpt;      /* CPT id */
336 };
337
338 typedef struct {
339         int               kib_init;           /* initialisation state */
340         int               kib_shutdown;       /* shut down? */
341         struct list_head  kib_devs;           /* IB devices extant */
342         struct list_head  kib_failed_devs;    /* list head of failed devices */
343         wait_queue_head_t kib_failover_waitq; /* schedulers sleep here */
344         atomic_t kib_nthreads;                /* # live threads */
345         rwlock_t kib_global_lock;    /* stabilize net/dev/peer/conn ops */
346         struct list_head *kib_peers; /* hash table of all my known peers */
347         int  kib_peer_hash_size;     /* size of kib_peers */
348         void *kib_connd; /* the connd task (serialisation assertions) */
349         struct list_head kib_connd_conns;   /* connections to setup/teardown */
350         struct list_head kib_connd_zombies; /* connections with zero refcount */
351         /* connections to reconnect */
352         struct list_head        kib_reconn_list;
353         /* peers wait for reconnection */
354         struct list_head        kib_reconn_wait;
355         /**
356          * The second that peers are pulled out from \a kib_reconn_wait
357          * for reconnection.
358          */
359         time64_t                kib_reconn_sec;
360
361         wait_queue_head_t kib_connd_waitq;  /* connection daemon sleeps here */
362         spinlock_t kib_connd_lock;          /* serialise */
363         struct ib_qp_attr kib_error_qpa;    /* QP->ERROR */
364         struct kib_sched_info **kib_scheds; /* percpt data for schedulers */
365 } kib_data_t;
366
367 #define IBLND_INIT_NOTHING 0
368 #define IBLND_INIT_DATA    1
369 #define IBLND_INIT_ALL     2
370
371 /************************************************************************
372  * IB Wire message format.
373  * These are sent in sender's byte order (i.e. receiver flips).
374  */
375
376 typedef struct kib_connparams {
377         __u16        ibcp_queue_depth;
378         __u16        ibcp_max_frags;
379         __u32        ibcp_max_msg_size;
380 } WIRE_ATTR kib_connparams_t;
381
382 typedef struct {
383         lnet_hdr_t   ibim_hdr;        /* portals header */
384         char         ibim_payload[0]; /* piggy-backed payload */
385 } WIRE_ATTR kib_immediate_msg_t;
386
387 typedef struct {
388         __u32        rf_nob;          /* # bytes this frag */
389         __u64        rf_addr;         /* CAVEAT EMPTOR: misaligned!! */
390 } WIRE_ATTR kib_rdma_frag_t;
391
392 typedef struct {
393         __u32           rd_key;       /* local/remote key */
394         __u32           rd_nfrags;    /* # fragments */
395         kib_rdma_frag_t rd_frags[0];  /* buffer frags */
396 } WIRE_ATTR kib_rdma_desc_t;
397
398 typedef struct {
399         lnet_hdr_t      ibprm_hdr;    /* portals header */
400         __u64           ibprm_cookie; /* opaque completion cookie */
401 } WIRE_ATTR kib_putreq_msg_t;
402
403 typedef struct {
404         __u64           ibpam_src_cookie; /* reflected completion cookie */
405         __u64           ibpam_dst_cookie; /* opaque completion cookie */
406         kib_rdma_desc_t ibpam_rd;         /* sender's sink buffer */
407 } WIRE_ATTR kib_putack_msg_t;
408
409 typedef struct {
410         lnet_hdr_t      ibgm_hdr;     /* portals header */
411         __u64           ibgm_cookie;  /* opaque completion cookie */
412         kib_rdma_desc_t ibgm_rd;      /* rdma descriptor */
413 } WIRE_ATTR kib_get_msg_t;
414
415 typedef struct {
416         __u64           ibcm_cookie;  /* opaque completion cookie */
417         __s32           ibcm_status;  /* < 0 failure: >= 0 length */
418 } WIRE_ATTR kib_completion_msg_t;
419
420 typedef struct {
421         /* First 2 fields fixed FOR ALL TIME */
422         __u32           ibm_magic;    /* I'm an ibnal message */
423         __u16           ibm_version;  /* this is my version number */
424
425         __u8            ibm_type;     /* msg type */
426         __u8            ibm_credits;  /* returned credits */
427         __u32           ibm_nob;      /* # bytes in whole message */
428         __u32           ibm_cksum;    /* checksum (0 == no checksum) */
429         __u64           ibm_srcnid;   /* sender's NID */
430         __u64           ibm_srcstamp; /* sender's incarnation */
431         __u64           ibm_dstnid;   /* destination's NID */
432         __u64           ibm_dststamp; /* destination's incarnation */
433
434         union {
435                 kib_connparams_t     connparams;
436                 kib_immediate_msg_t  immediate;
437                 kib_putreq_msg_t     putreq;
438                 kib_putack_msg_t     putack;
439                 kib_get_msg_t        get;
440                 kib_completion_msg_t completion;
441         } WIRE_ATTR ibm_u;
442 } WIRE_ATTR kib_msg_t;
443
444 #define IBLND_MSG_MAGIC     LNET_PROTO_IB_MAGIC /* unique magic */
445
446 #define IBLND_MSG_VERSION_1 0x11
447 #define IBLND_MSG_VERSION_2 0x12
448 #define IBLND_MSG_VERSION   IBLND_MSG_VERSION_2
449
450 #define IBLND_MSG_CONNREQ   0xc0        /* connection request */
451 #define IBLND_MSG_CONNACK   0xc1        /* connection acknowledge */
452 #define IBLND_MSG_NOOP      0xd0        /* nothing (just credits) */
453 #define IBLND_MSG_IMMEDIATE 0xd1        /* immediate */
454 #define IBLND_MSG_PUT_REQ   0xd2        /* putreq (src->sink) */
455 #define IBLND_MSG_PUT_NAK   0xd3        /* completion (sink->src) */
456 #define IBLND_MSG_PUT_ACK   0xd4        /* putack (sink->src) */
457 #define IBLND_MSG_PUT_DONE  0xd5        /* completion (src->sink) */
458 #define IBLND_MSG_GET_REQ   0xd6        /* getreq (sink->src) */
459 #define IBLND_MSG_GET_DONE  0xd7        /* completion (src->sink: all OK) */
460
461 typedef struct {
462         __u32            ibr_magic;       /* sender's magic */
463         __u16            ibr_version;     /* sender's version */
464         __u8             ibr_why;         /* reject reason */
465         __u8             ibr_padding;     /* padding */
466         __u64            ibr_incarnation; /* incarnation of peer */
467         kib_connparams_t ibr_cp;          /* connection parameters */
468 } WIRE_ATTR kib_rej_t;
469
470 /* connection rejection reasons */
471 #define IBLND_REJECT_CONN_RACE      1 /* You lost connection race */
472 #define IBLND_REJECT_NO_RESOURCES   2 /* Out of memory/conns etc */
473 #define IBLND_REJECT_FATAL          3 /* Anything else */
474 #define IBLND_REJECT_CONN_UNCOMPAT  4 /* incompatible version peer */
475 #define IBLND_REJECT_CONN_STALE     5 /* stale peer */
476 /* peer's rdma frags doesn't match mine */
477 #define IBLND_REJECT_RDMA_FRAGS     6
478 /* peer's msg queue size doesn't match mine */
479 #define IBLND_REJECT_MSG_QUEUE_SIZE 7
480
481 /***********************************************************************/
482
483 typedef struct kib_rx                         /* receive message */
484 {
485         struct list_head       rx_list;       /* queue for attention */
486         struct kib_conn        *rx_conn;      /* owning conn */
487         int                    rx_nob; /* # bytes received (-1 while posted) */
488         enum ib_wc_status      rx_status;     /* completion status */
489         kib_msg_t              *rx_msg;       /* message buffer (host vaddr) */
490         __u64                  rx_msgaddr;    /* message buffer (I/O addr) */
491         DECLARE_PCI_UNMAP_ADDR(rx_msgunmap);  /* for dma_unmap_single() */
492         struct ib_recv_wr      rx_wrq;        /* receive work item... */
493         struct ib_sge          rx_sge;        /* ...and its memory */
494 } kib_rx_t;
495
496 #define IBLND_POSTRX_DONT_POST    0 /* don't post */
497 #define IBLND_POSTRX_NO_CREDIT    1 /* post: no credits */
498 #define IBLND_POSTRX_PEER_CREDIT  2 /* post: give peer back 1 credit */
499 #define IBLND_POSTRX_RSRVD_CREDIT 3 /* post: give self back 1 reserved credit */
500
501 typedef struct kib_tx                         /* transmit message */
502 {
503         struct list_head      tx_list; /* queue on idle_txs ibc_tx_queue etc. */
504         kib_tx_pool_t         *tx_pool;       /* pool I'm from */
505         struct kib_conn       *tx_conn;       /* owning conn */
506         short                 tx_sending;     /* # tx callbacks outstanding */
507         short                 tx_queued;      /* queued for sending */
508         short                 tx_waiting;     /* waiting for peer */
509         int                   tx_status;      /* LNET completion status */
510         unsigned long         tx_deadline;    /* completion deadline */
511         __u64                 tx_cookie;      /* completion cookie */
512         lnet_msg_t *tx_lntmsg[2]; /* lnet msgs to finalize on completion */
513         kib_msg_t             *tx_msg;        /* message buffer (host vaddr) */
514         __u64                 tx_msgaddr;     /* message buffer (I/O addr) */
515         DECLARE_PCI_UNMAP_ADDR(tx_msgunmap);  /* for dma_unmap_single() */
516         int                   tx_nwrq;        /* # send work items */
517         struct ib_rdma_wr     *tx_wrq;        /* send work items... */
518         struct ib_sge         *tx_sge;        /* ...and their memory */
519         kib_rdma_desc_t       *tx_rd;         /* rdma descriptor */
520         int                   tx_nfrags;      /* # entries in... */
521         struct scatterlist    *tx_frags;      /* dma_map_sg descriptor */
522         __u64                 *tx_pages;      /* rdma phys page addrs */
523         kib_fmr_t             fmr;            /* FMR */
524         int                   tx_dmadir;      /* dma direction */
525 } kib_tx_t;
526
527 typedef struct kib_connvars {
528         kib_msg_t cv_msg; /* connection-in-progress variables */
529 } kib_connvars_t;
530
531 typedef struct kib_conn {
532         struct kib_sched_info *ibc_sched;      /* scheduler information */
533         struct kib_peer       *ibc_peer;       /* owning peer */
534         kib_hca_dev_t         *ibc_hdev;       /* HCA bound on */
535         struct list_head ibc_list;             /* stash on peer's conn list */
536         struct list_head      ibc_sched_list;  /* schedule for attention */
537         __u16                 ibc_version;     /* version of connection */
538         /* reconnect later */
539         __u16                   ibc_reconnect:1;
540         __u64                 ibc_incarnation; /* which instance of the peer */
541         atomic_t              ibc_refcount;    /* # users */
542         int                   ibc_state;       /* what's happening */
543         int                   ibc_nsends_posted; /* # uncompleted sends */
544         int                   ibc_noops_posted;  /* # uncompleted NOOPs */
545         int                   ibc_credits;     /* # credits I have */
546         int                   ibc_outstanding_credits; /* # credits to return */
547         int                   ibc_reserved_credits; /* # ACK/DONE msg credits */
548         int                   ibc_comms_error; /* set on comms error */
549         /* connections queue depth */
550         __u16                 ibc_queue_depth;
551         /* connections max frags */
552         __u16                 ibc_max_frags;
553         unsigned int          ibc_nrx:16;      /* receive buffers owned */
554         unsigned int          ibc_scheduled:1; /* scheduled for attention */
555         unsigned int          ibc_ready:1;     /* CQ callback fired */
556         unsigned long         ibc_last_send;   /* time of last send */
557         struct list_head      ibc_connd_list;  /* link chain for */
558                                                /* kiblnd_check_conns only */
559         struct list_head ibc_early_rxs; /* rxs completed before ESTABLISHED */
560         struct list_head ibc_tx_noops;         /* IBLND_MSG_NOOPs for */
561                                                /* IBLND_MSG_VERSION_1 */
562         struct list_head ibc_tx_queue;         /* sends that need a credit */
563         struct list_head ibc_tx_queue_nocred;  /* sends that don't need a */
564                                                /* credit */
565         struct list_head ibc_tx_queue_rsrvd;   /* sends that need to */
566                                                /* reserve an ACK/DONE msg */
567         struct list_head ibc_active_txs; /* active tx awaiting completion */
568         spinlock_t            ibc_lock;        /* serialise */
569         kib_rx_t              *ibc_rxs;        /* the rx descs */
570         kib_pages_t           *ibc_rx_pages;   /* premapped rx msg pages */
571
572         struct rdma_cm_id     *ibc_cmid;       /* CM id */
573         struct ib_cq          *ibc_cq;         /* completion queue */
574
575         kib_connvars_t        *ibc_connvars; /* in-progress connection state */
576 } kib_conn_t;
577
578 #define IBLND_CONN_INIT           0      /* being initialised */
579 #define IBLND_CONN_ACTIVE_CONNECT 1      /* active sending req */
580 #define IBLND_CONN_PASSIVE_WAIT   2      /* passive waiting for rtu */
581 #define IBLND_CONN_ESTABLISHED    3      /* connection established */
582 #define IBLND_CONN_CLOSING        4      /* being closed */
583 #define IBLND_CONN_DISCONNECTED   5      /* disconnected */
584
585 typedef struct kib_peer {
586         struct list_head ibp_list;        /* stash on global peer list */
587         lnet_nid_t       ibp_nid;         /* who's on the other end(s) */
588         lnet_ni_t        *ibp_ni;         /* LNet interface */
589         struct list_head ibp_conns;       /* all active connections */
590         struct list_head ibp_tx_queue;    /* msgs waiting for a conn */
591         __u64            ibp_incarnation; /* incarnation of peer */
592         /* when (in jiffies) I was last alive */
593         unsigned long           ibp_last_alive;
594         /* # users */
595         atomic_t                ibp_refcount;
596         /* version of peer */
597         __u16                   ibp_version;
598         /* current passive connection attempts */
599         unsigned short          ibp_accepting;
600         /* current active connection attempts */
601         unsigned short          ibp_connecting;
602         /* reconnect this peer later */
603         unsigned short          ibp_reconnecting:1;
604         /* # consecutive reconnection attempts to this peer */
605         unsigned int            ibp_reconnected;
606         /* errno on closing this peer */
607         int              ibp_error;
608         /* max map_on_demand */
609         __u16            ibp_max_frags;
610         /* max_peer_credits */
611         __u16            ibp_queue_depth;
612 } kib_peer_t;
613
614 extern kib_data_t kiblnd_data;
615
616 void kiblnd_hdev_destroy(kib_hca_dev_t *hdev);
617
618 static inline void
619 kiblnd_hdev_addref_locked(kib_hca_dev_t *hdev)
620 {
621         LASSERT(atomic_read(&hdev->ibh_ref) > 0);
622         atomic_inc(&hdev->ibh_ref);
623 }
624
625 static inline void
626 kiblnd_hdev_decref(kib_hca_dev_t *hdev)
627 {
628         LASSERT(atomic_read(&hdev->ibh_ref) > 0);
629         if (atomic_dec_and_test(&hdev->ibh_ref))
630                 kiblnd_hdev_destroy(hdev);
631 }
632
633 static inline int
634 kiblnd_dev_can_failover(kib_dev_t *dev)
635 {
636         if (!list_empty(&dev->ibd_fail_list)) /* already scheduled */
637                 return 0;
638
639         if (!*kiblnd_tunables.kib_dev_failover) /* disabled */
640                 return 0;
641
642         if (*kiblnd_tunables.kib_dev_failover > 1) /* force failover */
643                 return 1;
644
645         return dev->ibd_can_failover;
646 }
647
648 #define kiblnd_conn_addref(conn)                                \
649 do {                                                        \
650         CDEBUG(D_NET, "conn[%p] (%d)++\n",                    \
651                (conn), atomic_read(&(conn)->ibc_refcount)); \
652         atomic_inc(&(conn)->ibc_refcount);                \
653 } while (0)
654
655 #define kiblnd_conn_decref(conn)                                        \
656 do {                                                                    \
657         unsigned long flags;                                            \
658                                                                         \
659         CDEBUG(D_NET, "conn[%p] (%d)--\n",                              \
660                (conn), atomic_read(&(conn)->ibc_refcount));             \
661         LASSERT_ATOMIC_POS(&(conn)->ibc_refcount);                      \
662         if (atomic_dec_and_test(&(conn)->ibc_refcount)) {               \
663                 spin_lock_irqsave(&kiblnd_data.kib_connd_lock, flags);  \
664                 list_add_tail(&(conn)->ibc_list,                        \
665                                   &kiblnd_data.kib_connd_zombies);      \
666                 wake_up(&kiblnd_data.kib_connd_waitq);          \
667                 spin_unlock_irqrestore(&kiblnd_data.kib_connd_lock, flags);\
668         }                                                               \
669 } while (0)
670
671 #define kiblnd_peer_addref(peer)                                \
672 do {                                                        \
673         CDEBUG(D_NET, "peer[%p] -> %s (%d)++\n",                \
674                (peer), libcfs_nid2str((peer)->ibp_nid),  \
675                atomic_read(&(peer)->ibp_refcount));     \
676         atomic_inc(&(peer)->ibp_refcount);                \
677 } while (0)
678
679 #define kiblnd_peer_decref(peer)                                \
680 do {                                                        \
681         CDEBUG(D_NET, "peer[%p] -> %s (%d)--\n",                \
682                (peer), libcfs_nid2str((peer)->ibp_nid),  \
683                atomic_read(&(peer)->ibp_refcount));     \
684         LASSERT_ATOMIC_POS(&(peer)->ibp_refcount);            \
685         if (atomic_dec_and_test(&(peer)->ibp_refcount))     \
686                 kiblnd_destroy_peer(peer);                    \
687 } while (0)
688
689 static inline bool
690 kiblnd_peer_connecting(kib_peer_t *peer)
691 {
692         return peer->ibp_connecting ||
693                peer->ibp_reconnecting ||
694                peer->ibp_accepting;
695 }
696
697 static inline bool
698 kiblnd_peer_idle(kib_peer_t *peer)
699 {
700         return !kiblnd_peer_connecting(peer) && list_empty(&peer->ibp_conns);
701 }
702
703 static inline struct list_head *
704 kiblnd_nid2peerlist(lnet_nid_t nid)
705 {
706         unsigned int hash =
707                 ((unsigned int)nid) % kiblnd_data.kib_peer_hash_size;
708
709         return &kiblnd_data.kib_peers[hash];
710 }
711
712 static inline int
713 kiblnd_peer_active(kib_peer_t *peer)
714 {
715         /* Am I in the peer hash table? */
716         return !list_empty(&peer->ibp_list);
717 }
718
719 static inline kib_conn_t *
720 kiblnd_get_conn_locked(kib_peer_t *peer)
721 {
722         LASSERT(!list_empty(&peer->ibp_conns));
723
724         /* just return the first connection */
725         return list_entry(peer->ibp_conns.next, kib_conn_t, ibc_list);
726 }
727
728 static inline int
729 kiblnd_send_keepalive(kib_conn_t *conn)
730 {
731         return (*kiblnd_tunables.kib_keepalive > 0) &&
732                 cfs_time_after(jiffies, conn->ibc_last_send +
733                                msecs_to_jiffies(*kiblnd_tunables.kib_keepalive *
734                                                 MSEC_PER_SEC));
735 }
736
737 static inline int
738 kiblnd_need_noop(kib_conn_t *conn)
739 {
740         LASSERT(conn->ibc_state >= IBLND_CONN_ESTABLISHED);
741
742         if (conn->ibc_outstanding_credits <
743             IBLND_CREDITS_HIGHWATER(conn->ibc_version) &&
744             !kiblnd_send_keepalive(conn))
745                 return 0; /* No need to send NOOP */
746
747         if (IBLND_OOB_CAPABLE(conn->ibc_version)) {
748                 if (!list_empty(&conn->ibc_tx_queue_nocred))
749                         return 0; /* NOOP can be piggybacked */
750
751                 /* No tx to piggyback NOOP onto or no credit to send a tx */
752                 return (list_empty(&conn->ibc_tx_queue) ||
753                         !conn->ibc_credits);
754         }
755
756         if (!list_empty(&conn->ibc_tx_noops) || /* NOOP already queued */
757             !list_empty(&conn->ibc_tx_queue_nocred) || /* piggyback NOOP */
758             !conn->ibc_credits)             /* no credit */
759                 return 0;
760
761         if (conn->ibc_credits == 1 &&      /* last credit reserved for */
762             !conn->ibc_outstanding_credits) /* giving back credits */
763                 return 0;
764
765         /* No tx to piggyback NOOP onto or no credit to send a tx */
766         return (list_empty(&conn->ibc_tx_queue) || conn->ibc_credits == 1);
767 }
768
769 static inline void
770 kiblnd_abort_receives(kib_conn_t *conn)
771 {
772         ib_modify_qp(conn->ibc_cmid->qp,
773                      &kiblnd_data.kib_error_qpa, IB_QP_STATE);
774 }
775
776 static inline const char *
777 kiblnd_queue2str(kib_conn_t *conn, struct list_head *q)
778 {
779         if (q == &conn->ibc_tx_queue)
780                 return "tx_queue";
781
782         if (q == &conn->ibc_tx_queue_rsrvd)
783                 return "tx_queue_rsrvd";
784
785         if (q == &conn->ibc_tx_queue_nocred)
786                 return "tx_queue_nocred";
787
788         if (q == &conn->ibc_active_txs)
789                 return "active_txs";
790
791         LBUG();
792         return NULL;
793 }
794
795 /* CAVEAT EMPTOR: We rely on descriptor alignment to allow us to use the */
796 /* lowest bits of the work request id to stash the work item type. */
797
798 #define IBLND_WID_INVAL 0
799 #define IBLND_WID_TX    1
800 #define IBLND_WID_RX    2
801 #define IBLND_WID_RDMA  3
802 #define IBLND_WID_MASK  3UL
803
804 static inline __u64
805 kiblnd_ptr2wreqid(void *ptr, int type)
806 {
807         unsigned long lptr = (unsigned long)ptr;
808
809         LASSERT(!(lptr & IBLND_WID_MASK));
810         LASSERT(!(type & ~IBLND_WID_MASK));
811         return (__u64)(lptr | type);
812 }
813
814 static inline void *
815 kiblnd_wreqid2ptr(__u64 wreqid)
816 {
817         return (void *)(((unsigned long)wreqid) & ~IBLND_WID_MASK);
818 }
819
820 static inline int
821 kiblnd_wreqid2type(__u64 wreqid)
822 {
823         return wreqid & IBLND_WID_MASK;
824 }
825
826 static inline void
827 kiblnd_set_conn_state(kib_conn_t *conn, int state)
828 {
829         conn->ibc_state = state;
830         mb();
831 }
832
833 static inline void
834 kiblnd_init_msg(kib_msg_t *msg, int type, int body_nob)
835 {
836         msg->ibm_type = type;
837         msg->ibm_nob  = offsetof(kib_msg_t, ibm_u) + body_nob;
838 }
839
840 static inline int
841 kiblnd_rd_size(kib_rdma_desc_t *rd)
842 {
843         int   i;
844         int   size;
845
846         for (i = size = 0; i < rd->rd_nfrags; i++)
847                 size += rd->rd_frags[i].rf_nob;
848
849         return size;
850 }
851
852 static inline __u64
853 kiblnd_rd_frag_addr(kib_rdma_desc_t *rd, int index)
854 {
855         return rd->rd_frags[index].rf_addr;
856 }
857
858 static inline __u32
859 kiblnd_rd_frag_size(kib_rdma_desc_t *rd, int index)
860 {
861         return rd->rd_frags[index].rf_nob;
862 }
863
864 static inline __u32
865 kiblnd_rd_frag_key(kib_rdma_desc_t *rd, int index)
866 {
867         return rd->rd_key;
868 }
869
870 static inline int
871 kiblnd_rd_consume_frag(kib_rdma_desc_t *rd, int index, __u32 nob)
872 {
873         if (nob < rd->rd_frags[index].rf_nob) {
874                 rd->rd_frags[index].rf_addr += nob;
875                 rd->rd_frags[index].rf_nob  -= nob;
876         } else {
877                 index++;
878         }
879
880         return index;
881 }
882
883 static inline int
884 kiblnd_rd_msg_size(kib_rdma_desc_t *rd, int msgtype, int n)
885 {
886         LASSERT(msgtype == IBLND_MSG_GET_REQ ||
887                 msgtype == IBLND_MSG_PUT_ACK);
888
889         return msgtype == IBLND_MSG_GET_REQ ?
890                offsetof(kib_get_msg_t, ibgm_rd.rd_frags[n]) :
891                offsetof(kib_putack_msg_t, ibpam_rd.rd_frags[n]);
892 }
893
894 static inline __u64
895 kiblnd_dma_mapping_error(struct ib_device *dev, u64 dma_addr)
896 {
897         return ib_dma_mapping_error(dev, dma_addr);
898 }
899
900 static inline __u64 kiblnd_dma_map_single(struct ib_device *dev,
901                                           void *msg, size_t size,
902                                           enum dma_data_direction direction)
903 {
904         return ib_dma_map_single(dev, msg, size, direction);
905 }
906
907 static inline void kiblnd_dma_unmap_single(struct ib_device *dev,
908                                            __u64 addr, size_t size,
909                                           enum dma_data_direction direction)
910 {
911         ib_dma_unmap_single(dev, addr, size, direction);
912 }
913
914 #define KIBLND_UNMAP_ADDR_SET(p, m, a)  do {} while (0)
915 #define KIBLND_UNMAP_ADDR(p, m, a)      (a)
916
917 static inline int kiblnd_dma_map_sg(struct ib_device *dev,
918                                     struct scatterlist *sg, int nents,
919                                     enum dma_data_direction direction)
920 {
921         return ib_dma_map_sg(dev, sg, nents, direction);
922 }
923
924 static inline void kiblnd_dma_unmap_sg(struct ib_device *dev,
925                                        struct scatterlist *sg, int nents,
926                                        enum dma_data_direction direction)
927 {
928         ib_dma_unmap_sg(dev, sg, nents, direction);
929 }
930
931 static inline __u64 kiblnd_sg_dma_address(struct ib_device *dev,
932                                           struct scatterlist *sg)
933 {
934         return ib_sg_dma_address(dev, sg);
935 }
936
937 static inline unsigned int kiblnd_sg_dma_len(struct ib_device *dev,
938                                              struct scatterlist *sg)
939 {
940         return ib_sg_dma_len(dev, sg);
941 }
942
943 /* XXX We use KIBLND_CONN_PARAM(e) as writable buffer, it's not strictly */
944 /* right because OFED1.2 defines it as const, to use it we have to add */
945 /* (void *) cast to overcome "const" */
946
947 #define KIBLND_CONN_PARAM(e)     ((e)->param.conn.private_data)
948 #define KIBLND_CONN_PARAM_LEN(e) ((e)->param.conn.private_data_len)
949
950 struct ib_mr *kiblnd_find_rd_dma_mr(kib_hca_dev_t *hdev,
951                                     kib_rdma_desc_t *rd,
952                                     int negotiated_nfrags);
953 void kiblnd_map_rx_descs(kib_conn_t *conn);
954 void kiblnd_unmap_rx_descs(kib_conn_t *conn);
955 void kiblnd_pool_free_node(kib_pool_t *pool, struct list_head *node);
956 struct list_head *kiblnd_pool_alloc_node(kib_poolset_t *ps);
957
958 int  kiblnd_fmr_pool_map(kib_fmr_poolset_t *fps, __u64 *pages,
959                          int npages, __u64 iov, kib_fmr_t *fmr);
960 void kiblnd_fmr_pool_unmap(kib_fmr_t *fmr, int status);
961
962 int  kiblnd_tunables_init(void);
963 void kiblnd_tunables_fini(void);
964
965 int  kiblnd_connd(void *arg);
966 int  kiblnd_scheduler(void *arg);
967 int  kiblnd_thread_start(int (*fn)(void *arg), void *arg, char *name);
968 int  kiblnd_failover_thread(void *arg);
969
970 int  kiblnd_alloc_pages(kib_pages_t **pp, int cpt, int npages);
971
972 int  kiblnd_cm_callback(struct rdma_cm_id *cmid,
973                         struct rdma_cm_event *event);
974 int  kiblnd_translate_mtu(int value);
975
976 int  kiblnd_dev_failover(kib_dev_t *dev);
977 int  kiblnd_create_peer(lnet_ni_t *ni, kib_peer_t **peerp, lnet_nid_t nid);
978 void kiblnd_destroy_peer(kib_peer_t *peer);
979 bool kiblnd_reconnect_peer(kib_peer_t *peer);
980 void kiblnd_destroy_dev(kib_dev_t *dev);
981 void kiblnd_unlink_peer_locked(kib_peer_t *peer);
982 kib_peer_t *kiblnd_find_peer_locked(lnet_nid_t nid);
983 int  kiblnd_close_stale_conns_locked(kib_peer_t *peer,
984                                      int version, __u64 incarnation);
985 int  kiblnd_close_peer_conns_locked(kib_peer_t *peer, int why);
986
987 kib_conn_t *kiblnd_create_conn(kib_peer_t *peer, struct rdma_cm_id *cmid,
988                                int state, int version);
989 void kiblnd_destroy_conn(kib_conn_t *conn, bool free_conn);
990 void kiblnd_close_conn(kib_conn_t *conn, int error);
991 void kiblnd_close_conn_locked(kib_conn_t *conn, int error);
992
993 void kiblnd_launch_tx(lnet_ni_t *ni, kib_tx_t *tx, lnet_nid_t nid);
994 void kiblnd_txlist_done(lnet_ni_t *ni, struct list_head *txlist,
995                         int status);
996
997 void kiblnd_qp_event(struct ib_event *event, void *arg);
998 void kiblnd_cq_event(struct ib_event *event, void *arg);
999 void kiblnd_cq_completion(struct ib_cq *cq, void *arg);
1000
1001 void kiblnd_pack_msg(lnet_ni_t *ni, kib_msg_t *msg, int version,
1002                      int credits, lnet_nid_t dstnid, __u64 dststamp);
1003 int  kiblnd_unpack_msg(kib_msg_t *msg, int nob);
1004 int  kiblnd_post_rx(kib_rx_t *rx, int credit);
1005
1006 int  kiblnd_send(lnet_ni_t *ni, void *private, lnet_msg_t *lntmsg);
1007 int  kiblnd_recv(lnet_ni_t *ni, void *private, lnet_msg_t *lntmsg, int delayed,
1008                  unsigned int niov, struct kvec *iov, lnet_kiov_t *kiov,
1009                  unsigned int offset, unsigned int mlen, unsigned int rlen);