]> git.karo-electronics.de Git - mv-sheeva.git/blob - drivers/scsi/libfc/fc_exch.c
[SCSI] libfc: fix mem leak in fc_seq_assign()
[mv-sheeva.git] / drivers / scsi / libfc / fc_exch.c
1 /*
2  * Copyright(c) 2007 Intel Corporation. All rights reserved.
3  * Copyright(c) 2008 Red Hat, Inc.  All rights reserved.
4  * Copyright(c) 2008 Mike Christie
5  *
6  * This program is free software; you can redistribute it and/or modify it
7  * under the terms and conditions of the GNU General Public License,
8  * version 2, as published by the Free Software Foundation.
9  *
10  * This program is distributed in the hope it will be useful, but WITHOUT
11  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
13  * more details.
14  *
15  * You should have received a copy of the GNU General Public License along with
16  * this program; if not, write to the Free Software Foundation, Inc.,
17  * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
18  *
19  * Maintained at www.Open-FCoE.org
20  */
21
22 /*
23  * Fibre Channel exchange and sequence handling.
24  */
25
26 #include <linux/timer.h>
27 #include <linux/slab.h>
28 #include <linux/err.h>
29
30 #include <scsi/fc/fc_fc2.h>
31
32 #include <scsi/libfc.h>
33 #include <scsi/fc_encode.h>
34
35 #include "fc_libfc.h"
36
37 u16     fc_cpu_mask;            /* cpu mask for possible cpus */
38 EXPORT_SYMBOL(fc_cpu_mask);
39 static u16      fc_cpu_order;   /* 2's power to represent total possible cpus */
40 static struct kmem_cache *fc_em_cachep;        /* cache for exchanges */
41 struct workqueue_struct *fc_exch_workqueue;
42
43 /*
44  * Structure and function definitions for managing Fibre Channel Exchanges
45  * and Sequences.
46  *
47  * The three primary structures used here are fc_exch_mgr, fc_exch, and fc_seq.
48  *
49  * fc_exch_mgr holds the exchange state for an N port
50  *
51  * fc_exch holds state for one exchange and links to its active sequence.
52  *
53  * fc_seq holds the state for an individual sequence.
54  */
55
56 /**
57  * struct fc_exch_pool - Per cpu exchange pool
58  * @next_index:   Next possible free exchange index
59  * @total_exches: Total allocated exchanges
60  * @lock:         Exch pool lock
61  * @ex_list:      List of exchanges
62  *
63  * This structure manages per cpu exchanges in array of exchange pointers.
64  * This array is allocated followed by struct fc_exch_pool memory for
65  * assigned range of exchanges to per cpu pool.
66  */
67 struct fc_exch_pool {
68         u16              next_index;
69         u16              total_exches;
70
71         /* two cache of free slot in exch array */
72         u16              left;
73         u16              right;
74
75         spinlock_t       lock;
76         struct list_head ex_list;
77 };
78
79 /**
80  * struct fc_exch_mgr - The Exchange Manager (EM).
81  * @class:          Default class for new sequences
82  * @kref:           Reference counter
83  * @min_xid:        Minimum exchange ID
84  * @max_xid:        Maximum exchange ID
85  * @ep_pool:        Reserved exchange pointers
86  * @pool_max_index: Max exch array index in exch pool
87  * @pool:           Per cpu exch pool
88  * @stats:          Statistics structure
89  *
90  * This structure is the center for creating exchanges and sequences.
91  * It manages the allocation of exchange IDs.
92  */
93 struct fc_exch_mgr {
94         enum fc_class   class;
95         struct kref     kref;
96         u16             min_xid;
97         u16             max_xid;
98         mempool_t       *ep_pool;
99         u16             pool_max_index;
100         struct fc_exch_pool *pool;
101
102         /*
103          * currently exchange mgr stats are updated but not used.
104          * either stats can be expose via sysfs or remove them
105          * all together if not used XXX
106          */
107         struct {
108                 atomic_t no_free_exch;
109                 atomic_t no_free_exch_xid;
110                 atomic_t xid_not_found;
111                 atomic_t xid_busy;
112                 atomic_t seq_not_found;
113                 atomic_t non_bls_resp;
114         } stats;
115 };
116
117 /**
118  * struct fc_exch_mgr_anchor - primary structure for list of EMs
119  * @ema_list: Exchange Manager Anchor list
120  * @mp:       Exchange Manager associated with this anchor
121  * @match:    Routine to determine if this anchor's EM should be used
122  *
123  * When walking the list of anchors the match routine will be called
124  * for each anchor to determine if that EM should be used. The last
125  * anchor in the list will always match to handle any exchanges not
126  * handled by other EMs. The non-default EMs would be added to the
127  * anchor list by HW that provides FCoE offloads.
128  */
129 struct fc_exch_mgr_anchor {
130         struct list_head ema_list;
131         struct fc_exch_mgr *mp;
132         bool (*match)(struct fc_frame *);
133 };
134
135 static void fc_exch_rrq(struct fc_exch *);
136 static void fc_seq_ls_acc(struct fc_frame *);
137 static void fc_seq_ls_rjt(struct fc_frame *, enum fc_els_rjt_reason,
138                           enum fc_els_rjt_explan);
139 static void fc_exch_els_rec(struct fc_frame *);
140 static void fc_exch_els_rrq(struct fc_frame *);
141
142 /*
143  * Internal implementation notes.
144  *
145  * The exchange manager is one by default in libfc but LLD may choose
146  * to have one per CPU. The sequence manager is one per exchange manager
147  * and currently never separated.
148  *
149  * Section 9.8 in FC-FS-2 specifies:  "The SEQ_ID is a one-byte field
150  * assigned by the Sequence Initiator that shall be unique for a specific
151  * D_ID and S_ID pair while the Sequence is open."   Note that it isn't
152  * qualified by exchange ID, which one might think it would be.
153  * In practice this limits the number of open sequences and exchanges to 256
154  * per session.  For most targets we could treat this limit as per exchange.
155  *
156  * The exchange and its sequence are freed when the last sequence is received.
157  * It's possible for the remote port to leave an exchange open without
158  * sending any sequences.
159  *
160  * Notes on reference counts:
161  *
162  * Exchanges are reference counted and exchange gets freed when the reference
163  * count becomes zero.
164  *
165  * Timeouts:
166  * Sequences are timed out for E_D_TOV and R_A_TOV.
167  *
168  * Sequence event handling:
169  *
170  * The following events may occur on initiator sequences:
171  *
172  *      Send.
173  *          For now, the whole thing is sent.
174  *      Receive ACK
175  *          This applies only to class F.
176  *          The sequence is marked complete.
177  *      ULP completion.
178  *          The upper layer calls fc_exch_done() when done
179  *          with exchange and sequence tuple.
180  *      RX-inferred completion.
181  *          When we receive the next sequence on the same exchange, we can
182  *          retire the previous sequence ID.  (XXX not implemented).
183  *      Timeout.
184  *          R_A_TOV frees the sequence ID.  If we're waiting for ACK,
185  *          E_D_TOV causes abort and calls upper layer response handler
186  *          with FC_EX_TIMEOUT error.
187  *      Receive RJT
188  *          XXX defer.
189  *      Send ABTS
190  *          On timeout.
191  *
192  * The following events may occur on recipient sequences:
193  *
194  *      Receive
195  *          Allocate sequence for first frame received.
196  *          Hold during receive handler.
197  *          Release when final frame received.
198  *          Keep status of last N of these for the ELS RES command.  XXX TBD.
199  *      Receive ABTS
200  *          Deallocate sequence
201  *      Send RJT
202  *          Deallocate
203  *
204  * For now, we neglect conditions where only part of a sequence was
205  * received or transmitted, or where out-of-order receipt is detected.
206  */
207
208 /*
209  * Locking notes:
210  *
211  * The EM code run in a per-CPU worker thread.
212  *
213  * To protect against concurrency between a worker thread code and timers,
214  * sequence allocation and deallocation must be locked.
215  *  - exchange refcnt can be done atomicly without locks.
216  *  - sequence allocation must be locked by exch lock.
217  *  - If the EM pool lock and ex_lock must be taken at the same time, then the
218  *    EM pool lock must be taken before the ex_lock.
219  */
220
221 /*
222  * opcode names for debugging.
223  */
224 static char *fc_exch_rctl_names[] = FC_RCTL_NAMES_INIT;
225
226 /**
227  * fc_exch_name_lookup() - Lookup name by opcode
228  * @op:        Opcode to be looked up
229  * @table:     Opcode/name table
230  * @max_index: Index not to be exceeded
231  *
232  * This routine is used to determine a human-readable string identifying
233  * a R_CTL opcode.
234  */
235 static inline const char *fc_exch_name_lookup(unsigned int op, char **table,
236                                               unsigned int max_index)
237 {
238         const char *name = NULL;
239
240         if (op < max_index)
241                 name = table[op];
242         if (!name)
243                 name = "unknown";
244         return name;
245 }
246
247 /**
248  * fc_exch_rctl_name() - Wrapper routine for fc_exch_name_lookup()
249  * @op: The opcode to be looked up
250  */
251 static const char *fc_exch_rctl_name(unsigned int op)
252 {
253         return fc_exch_name_lookup(op, fc_exch_rctl_names,
254                                    ARRAY_SIZE(fc_exch_rctl_names));
255 }
256
257 /**
258  * fc_exch_hold() - Increment an exchange's reference count
259  * @ep: Echange to be held
260  */
261 static inline void fc_exch_hold(struct fc_exch *ep)
262 {
263         atomic_inc(&ep->ex_refcnt);
264 }
265
266 /**
267  * fc_exch_setup_hdr() - Initialize a FC header by initializing some fields
268  *                       and determine SOF and EOF.
269  * @ep:    The exchange to that will use the header
270  * @fp:    The frame whose header is to be modified
271  * @f_ctl: F_CTL bits that will be used for the frame header
272  *
273  * The fields initialized by this routine are: fh_ox_id, fh_rx_id,
274  * fh_seq_id, fh_seq_cnt and the SOF and EOF.
275  */
276 static void fc_exch_setup_hdr(struct fc_exch *ep, struct fc_frame *fp,
277                               u32 f_ctl)
278 {
279         struct fc_frame_header *fh = fc_frame_header_get(fp);
280         u16 fill;
281
282         fr_sof(fp) = ep->class;
283         if (ep->seq.cnt)
284                 fr_sof(fp) = fc_sof_normal(ep->class);
285
286         if (f_ctl & FC_FC_END_SEQ) {
287                 fr_eof(fp) = FC_EOF_T;
288                 if (fc_sof_needs_ack(ep->class))
289                         fr_eof(fp) = FC_EOF_N;
290                 /*
291                  * From F_CTL.
292                  * The number of fill bytes to make the length a 4-byte
293                  * multiple is the low order 2-bits of the f_ctl.
294                  * The fill itself will have been cleared by the frame
295                  * allocation.
296                  * After this, the length will be even, as expected by
297                  * the transport.
298                  */
299                 fill = fr_len(fp) & 3;
300                 if (fill) {
301                         fill = 4 - fill;
302                         /* TODO, this may be a problem with fragmented skb */
303                         skb_put(fp_skb(fp), fill);
304                         hton24(fh->fh_f_ctl, f_ctl | fill);
305                 }
306         } else {
307                 WARN_ON(fr_len(fp) % 4 != 0);   /* no pad to non last frame */
308                 fr_eof(fp) = FC_EOF_N;
309         }
310
311         /*
312          * Initialize remainig fh fields
313          * from fc_fill_fc_hdr
314          */
315         fh->fh_ox_id = htons(ep->oxid);
316         fh->fh_rx_id = htons(ep->rxid);
317         fh->fh_seq_id = ep->seq.id;
318         fh->fh_seq_cnt = htons(ep->seq.cnt);
319 }
320
321 /**
322  * fc_exch_release() - Decrement an exchange's reference count
323  * @ep: Exchange to be released
324  *
325  * If the reference count reaches zero and the exchange is complete,
326  * it is freed.
327  */
328 static void fc_exch_release(struct fc_exch *ep)
329 {
330         struct fc_exch_mgr *mp;
331
332         if (atomic_dec_and_test(&ep->ex_refcnt)) {
333                 mp = ep->em;
334                 if (ep->destructor)
335                         ep->destructor(&ep->seq, ep->arg);
336                 WARN_ON(!(ep->esb_stat & ESB_ST_COMPLETE));
337                 mempool_free(ep, mp->ep_pool);
338         }
339 }
340
341 /**
342  * fc_exch_done_locked() - Complete an exchange with the exchange lock held
343  * @ep: The exchange that is complete
344  */
345 static int fc_exch_done_locked(struct fc_exch *ep)
346 {
347         int rc = 1;
348
349         /*
350          * We must check for completion in case there are two threads
351          * tyring to complete this. But the rrq code will reuse the
352          * ep, and in that case we only clear the resp and set it as
353          * complete, so it can be reused by the timer to send the rrq.
354          */
355         ep->resp = NULL;
356         if (ep->state & FC_EX_DONE)
357                 return rc;
358         ep->esb_stat |= ESB_ST_COMPLETE;
359
360         if (!(ep->esb_stat & ESB_ST_REC_QUAL)) {
361                 ep->state |= FC_EX_DONE;
362                 if (cancel_delayed_work(&ep->timeout_work))
363                         atomic_dec(&ep->ex_refcnt); /* drop hold for timer */
364                 rc = 0;
365         }
366         return rc;
367 }
368
369 /**
370  * fc_exch_ptr_get() - Return an exchange from an exchange pool
371  * @pool:  Exchange Pool to get an exchange from
372  * @index: Index of the exchange within the pool
373  *
374  * Use the index to get an exchange from within an exchange pool. exches
375  * will point to an array of exchange pointers. The index will select
376  * the exchange within the array.
377  */
378 static inline struct fc_exch *fc_exch_ptr_get(struct fc_exch_pool *pool,
379                                               u16 index)
380 {
381         struct fc_exch **exches = (struct fc_exch **)(pool + 1);
382         return exches[index];
383 }
384
385 /**
386  * fc_exch_ptr_set() - Assign an exchange to a slot in an exchange pool
387  * @pool:  The pool to assign the exchange to
388  * @index: The index in the pool where the exchange will be assigned
389  * @ep:    The exchange to assign to the pool
390  */
391 static inline void fc_exch_ptr_set(struct fc_exch_pool *pool, u16 index,
392                                    struct fc_exch *ep)
393 {
394         ((struct fc_exch **)(pool + 1))[index] = ep;
395 }
396
397 /**
398  * fc_exch_delete() - Delete an exchange
399  * @ep: The exchange to be deleted
400  */
401 static void fc_exch_delete(struct fc_exch *ep)
402 {
403         struct fc_exch_pool *pool;
404         u16 index;
405
406         pool = ep->pool;
407         spin_lock_bh(&pool->lock);
408         WARN_ON(pool->total_exches <= 0);
409         pool->total_exches--;
410
411         /* update cache of free slot */
412         index = (ep->xid - ep->em->min_xid) >> fc_cpu_order;
413         if (pool->left == FC_XID_UNKNOWN)
414                 pool->left = index;
415         else if (pool->right == FC_XID_UNKNOWN)
416                 pool->right = index;
417         else
418                 pool->next_index = index;
419
420         fc_exch_ptr_set(pool, index, NULL);
421         list_del(&ep->ex_list);
422         spin_unlock_bh(&pool->lock);
423         fc_exch_release(ep);    /* drop hold for exch in mp */
424 }
425
426 /**
427  * fc_exch_timer_set_locked() - Start a timer for an exchange w/ the
428  *                              the exchange lock held
429  * @ep:         The exchange whose timer will start
430  * @timer_msec: The timeout period
431  *
432  * Used for upper level protocols to time out the exchange.
433  * The timer is cancelled when it fires or when the exchange completes.
434  */
435 static inline void fc_exch_timer_set_locked(struct fc_exch *ep,
436                                             unsigned int timer_msec)
437 {
438         if (ep->state & (FC_EX_RST_CLEANUP | FC_EX_DONE))
439                 return;
440
441         FC_EXCH_DBG(ep, "Exchange timer armed\n");
442
443         if (queue_delayed_work(fc_exch_workqueue, &ep->timeout_work,
444                                msecs_to_jiffies(timer_msec)))
445                 fc_exch_hold(ep);               /* hold for timer */
446 }
447
448 /**
449  * fc_exch_timer_set() - Lock the exchange and set the timer
450  * @ep:         The exchange whose timer will start
451  * @timer_msec: The timeout period
452  */
453 static void fc_exch_timer_set(struct fc_exch *ep, unsigned int timer_msec)
454 {
455         spin_lock_bh(&ep->ex_lock);
456         fc_exch_timer_set_locked(ep, timer_msec);
457         spin_unlock_bh(&ep->ex_lock);
458 }
459
460 /**
461  * fc_seq_send() - Send a frame using existing sequence/exchange pair
462  * @lport: The local port that the exchange will be sent on
463  * @sp:    The sequence to be sent
464  * @fp:    The frame to be sent on the exchange
465  */
466 static int fc_seq_send(struct fc_lport *lport, struct fc_seq *sp,
467                        struct fc_frame *fp)
468 {
469         struct fc_exch *ep;
470         struct fc_frame_header *fh = fc_frame_header_get(fp);
471         int error;
472         u32 f_ctl;
473
474         ep = fc_seq_exch(sp);
475         WARN_ON((ep->esb_stat & ESB_ST_SEQ_INIT) != ESB_ST_SEQ_INIT);
476
477         f_ctl = ntoh24(fh->fh_f_ctl);
478         fc_exch_setup_hdr(ep, fp, f_ctl);
479         fr_encaps(fp) = ep->encaps;
480
481         /*
482          * update sequence count if this frame is carrying
483          * multiple FC frames when sequence offload is enabled
484          * by LLD.
485          */
486         if (fr_max_payload(fp))
487                 sp->cnt += DIV_ROUND_UP((fr_len(fp) - sizeof(*fh)),
488                                         fr_max_payload(fp));
489         else
490                 sp->cnt++;
491
492         /*
493          * Send the frame.
494          */
495         error = lport->tt.frame_send(lport, fp);
496
497         /*
498          * Update the exchange and sequence flags,
499          * assuming all frames for the sequence have been sent.
500          * We can only be called to send once for each sequence.
501          */
502         spin_lock_bh(&ep->ex_lock);
503         ep->f_ctl = f_ctl & ~FC_FC_FIRST_SEQ;   /* not first seq */
504         if (f_ctl & FC_FC_SEQ_INIT)
505                 ep->esb_stat &= ~ESB_ST_SEQ_INIT;
506         spin_unlock_bh(&ep->ex_lock);
507         return error;
508 }
509
510 /**
511  * fc_seq_alloc() - Allocate a sequence for a given exchange
512  * @ep:     The exchange to allocate a new sequence for
513  * @seq_id: The sequence ID to be used
514  *
515  * We don't support multiple originated sequences on the same exchange.
516  * By implication, any previously originated sequence on this exchange
517  * is complete, and we reallocate the same sequence.
518  */
519 static struct fc_seq *fc_seq_alloc(struct fc_exch *ep, u8 seq_id)
520 {
521         struct fc_seq *sp;
522
523         sp = &ep->seq;
524         sp->ssb_stat = 0;
525         sp->cnt = 0;
526         sp->id = seq_id;
527         return sp;
528 }
529
530 /**
531  * fc_seq_start_next_locked() - Allocate a new sequence on the same
532  *                              exchange as the supplied sequence
533  * @sp: The sequence/exchange to get a new sequence for
534  */
535 static struct fc_seq *fc_seq_start_next_locked(struct fc_seq *sp)
536 {
537         struct fc_exch *ep = fc_seq_exch(sp);
538
539         sp = fc_seq_alloc(ep, ep->seq_id++);
540         FC_EXCH_DBG(ep, "f_ctl %6x seq %2x\n",
541                     ep->f_ctl, sp->id);
542         return sp;
543 }
544
545 /**
546  * fc_seq_start_next() - Lock the exchange and get a new sequence
547  *                       for a given sequence/exchange pair
548  * @sp: The sequence/exchange to get a new exchange for
549  */
550 static struct fc_seq *fc_seq_start_next(struct fc_seq *sp)
551 {
552         struct fc_exch *ep = fc_seq_exch(sp);
553
554         spin_lock_bh(&ep->ex_lock);
555         sp = fc_seq_start_next_locked(sp);
556         spin_unlock_bh(&ep->ex_lock);
557
558         return sp;
559 }
560
561 /**
562  * fc_seq_exch_abort() - Abort an exchange and sequence
563  * @req_sp:     The sequence to be aborted
564  * @timer_msec: The period of time to wait before aborting
565  *
566  * Generally called because of a timeout or an abort from the upper layer.
567  */
568 static int fc_seq_exch_abort(const struct fc_seq *req_sp,
569                              unsigned int timer_msec)
570 {
571         struct fc_seq *sp;
572         struct fc_exch *ep;
573         struct fc_frame *fp;
574         int error;
575
576         ep = fc_seq_exch(req_sp);
577
578         spin_lock_bh(&ep->ex_lock);
579         if (ep->esb_stat & (ESB_ST_COMPLETE | ESB_ST_ABNORMAL) ||
580             ep->state & (FC_EX_DONE | FC_EX_RST_CLEANUP)) {
581                 spin_unlock_bh(&ep->ex_lock);
582                 return -ENXIO;
583         }
584
585         /*
586          * Send the abort on a new sequence if possible.
587          */
588         sp = fc_seq_start_next_locked(&ep->seq);
589         if (!sp) {
590                 spin_unlock_bh(&ep->ex_lock);
591                 return -ENOMEM;
592         }
593
594         ep->esb_stat |= ESB_ST_SEQ_INIT | ESB_ST_ABNORMAL;
595         if (timer_msec)
596                 fc_exch_timer_set_locked(ep, timer_msec);
597         spin_unlock_bh(&ep->ex_lock);
598
599         /*
600          * If not logged into the fabric, don't send ABTS but leave
601          * sequence active until next timeout.
602          */
603         if (!ep->sid)
604                 return 0;
605
606         /*
607          * Send an abort for the sequence that timed out.
608          */
609         fp = fc_frame_alloc(ep->lp, 0);
610         if (fp) {
611                 fc_fill_fc_hdr(fp, FC_RCTL_BA_ABTS, ep->did, ep->sid,
612                                FC_TYPE_BLS, FC_FC_END_SEQ | FC_FC_SEQ_INIT, 0);
613                 error = fc_seq_send(ep->lp, sp, fp);
614         } else
615                 error = -ENOBUFS;
616         return error;
617 }
618
619 /**
620  * fc_exch_timeout() - Handle exchange timer expiration
621  * @work: The work_struct identifying the exchange that timed out
622  */
623 static void fc_exch_timeout(struct work_struct *work)
624 {
625         struct fc_exch *ep = container_of(work, struct fc_exch,
626                                           timeout_work.work);
627         struct fc_seq *sp = &ep->seq;
628         void (*resp)(struct fc_seq *, struct fc_frame *fp, void *arg);
629         void *arg;
630         u32 e_stat;
631         int rc = 1;
632
633         FC_EXCH_DBG(ep, "Exchange timed out\n");
634
635         spin_lock_bh(&ep->ex_lock);
636         if (ep->state & (FC_EX_RST_CLEANUP | FC_EX_DONE))
637                 goto unlock;
638
639         e_stat = ep->esb_stat;
640         if (e_stat & ESB_ST_COMPLETE) {
641                 ep->esb_stat = e_stat & ~ESB_ST_REC_QUAL;
642                 spin_unlock_bh(&ep->ex_lock);
643                 if (e_stat & ESB_ST_REC_QUAL)
644                         fc_exch_rrq(ep);
645                 goto done;
646         } else {
647                 resp = ep->resp;
648                 arg = ep->arg;
649                 ep->resp = NULL;
650                 if (e_stat & ESB_ST_ABNORMAL)
651                         rc = fc_exch_done_locked(ep);
652                 spin_unlock_bh(&ep->ex_lock);
653                 if (!rc)
654                         fc_exch_delete(ep);
655                 if (resp)
656                         resp(sp, ERR_PTR(-FC_EX_TIMEOUT), arg);
657                 fc_seq_exch_abort(sp, 2 * ep->r_a_tov);
658                 goto done;
659         }
660 unlock:
661         spin_unlock_bh(&ep->ex_lock);
662 done:
663         /*
664          * This release matches the hold taken when the timer was set.
665          */
666         fc_exch_release(ep);
667 }
668
669 /**
670  * fc_exch_em_alloc() - Allocate an exchange from a specified EM.
671  * @lport: The local port that the exchange is for
672  * @mp:    The exchange manager that will allocate the exchange
673  *
674  * Returns pointer to allocated fc_exch with exch lock held.
675  */
676 static struct fc_exch *fc_exch_em_alloc(struct fc_lport *lport,
677                                         struct fc_exch_mgr *mp)
678 {
679         struct fc_exch *ep;
680         unsigned int cpu;
681         u16 index;
682         struct fc_exch_pool *pool;
683
684         /* allocate memory for exchange */
685         ep = mempool_alloc(mp->ep_pool, GFP_ATOMIC);
686         if (!ep) {
687                 atomic_inc(&mp->stats.no_free_exch);
688                 goto out;
689         }
690         memset(ep, 0, sizeof(*ep));
691
692         cpu = get_cpu();
693         pool = per_cpu_ptr(mp->pool, cpu);
694         spin_lock_bh(&pool->lock);
695         put_cpu();
696
697         /* peek cache of free slot */
698         if (pool->left != FC_XID_UNKNOWN) {
699                 index = pool->left;
700                 pool->left = FC_XID_UNKNOWN;
701                 goto hit;
702         }
703         if (pool->right != FC_XID_UNKNOWN) {
704                 index = pool->right;
705                 pool->right = FC_XID_UNKNOWN;
706                 goto hit;
707         }
708
709         index = pool->next_index;
710         /* allocate new exch from pool */
711         while (fc_exch_ptr_get(pool, index)) {
712                 index = index == mp->pool_max_index ? 0 : index + 1;
713                 if (index == pool->next_index)
714                         goto err;
715         }
716         pool->next_index = index == mp->pool_max_index ? 0 : index + 1;
717 hit:
718         fc_exch_hold(ep);       /* hold for exch in mp */
719         spin_lock_init(&ep->ex_lock);
720         /*
721          * Hold exch lock for caller to prevent fc_exch_reset()
722          * from releasing exch  while fc_exch_alloc() caller is
723          * still working on exch.
724          */
725         spin_lock_bh(&ep->ex_lock);
726
727         fc_exch_ptr_set(pool, index, ep);
728         list_add_tail(&ep->ex_list, &pool->ex_list);
729         fc_seq_alloc(ep, ep->seq_id++);
730         pool->total_exches++;
731         spin_unlock_bh(&pool->lock);
732
733         /*
734          *  update exchange
735          */
736         ep->oxid = ep->xid = (index << fc_cpu_order | cpu) + mp->min_xid;
737         ep->em = mp;
738         ep->pool = pool;
739         ep->lp = lport;
740         ep->f_ctl = FC_FC_FIRST_SEQ;    /* next seq is first seq */
741         ep->rxid = FC_XID_UNKNOWN;
742         ep->class = mp->class;
743         INIT_DELAYED_WORK(&ep->timeout_work, fc_exch_timeout);
744 out:
745         return ep;
746 err:
747         spin_unlock_bh(&pool->lock);
748         atomic_inc(&mp->stats.no_free_exch_xid);
749         mempool_free(ep, mp->ep_pool);
750         return NULL;
751 }
752
753 /**
754  * fc_exch_alloc() - Allocate an exchange from an EM on a
755  *                   local port's list of EMs.
756  * @lport: The local port that will own the exchange
757  * @fp:    The FC frame that the exchange will be for
758  *
759  * This function walks the list of exchange manager(EM)
760  * anchors to select an EM for a new exchange allocation. The
761  * EM is selected when a NULL match function pointer is encountered
762  * or when a call to a match function returns true.
763  */
764 static inline struct fc_exch *fc_exch_alloc(struct fc_lport *lport,
765                                             struct fc_frame *fp)
766 {
767         struct fc_exch_mgr_anchor *ema;
768
769         list_for_each_entry(ema, &lport->ema_list, ema_list)
770                 if (!ema->match || ema->match(fp))
771                         return fc_exch_em_alloc(lport, ema->mp);
772         return NULL;
773 }
774
775 /**
776  * fc_exch_find() - Lookup and hold an exchange
777  * @mp:  The exchange manager to lookup the exchange from
778  * @xid: The XID of the exchange to look up
779  */
780 static struct fc_exch *fc_exch_find(struct fc_exch_mgr *mp, u16 xid)
781 {
782         struct fc_exch_pool *pool;
783         struct fc_exch *ep = NULL;
784
785         if ((xid >= mp->min_xid) && (xid <= mp->max_xid)) {
786                 pool = per_cpu_ptr(mp->pool, xid & fc_cpu_mask);
787                 spin_lock_bh(&pool->lock);
788                 ep = fc_exch_ptr_get(pool, (xid - mp->min_xid) >> fc_cpu_order);
789                 if (ep) {
790                         fc_exch_hold(ep);
791                         WARN_ON(ep->xid != xid);
792                 }
793                 spin_unlock_bh(&pool->lock);
794         }
795         return ep;
796 }
797
798
799 /**
800  * fc_exch_done() - Indicate that an exchange/sequence tuple is complete and
801  *                  the memory allocated for the related objects may be freed.
802  * @sp: The sequence that has completed
803  */
804 static void fc_exch_done(struct fc_seq *sp)
805 {
806         struct fc_exch *ep = fc_seq_exch(sp);
807         int rc;
808
809         spin_lock_bh(&ep->ex_lock);
810         rc = fc_exch_done_locked(ep);
811         spin_unlock_bh(&ep->ex_lock);
812         if (!rc)
813                 fc_exch_delete(ep);
814 }
815
816 /**
817  * fc_exch_resp() - Allocate a new exchange for a response frame
818  * @lport: The local port that the exchange was for
819  * @mp:    The exchange manager to allocate the exchange from
820  * @fp:    The response frame
821  *
822  * Sets the responder ID in the frame header.
823  */
824 static struct fc_exch *fc_exch_resp(struct fc_lport *lport,
825                                     struct fc_exch_mgr *mp,
826                                     struct fc_frame *fp)
827 {
828         struct fc_exch *ep;
829         struct fc_frame_header *fh;
830
831         ep = fc_exch_alloc(lport, fp);
832         if (ep) {
833                 ep->class = fc_frame_class(fp);
834
835                 /*
836                  * Set EX_CTX indicating we're responding on this exchange.
837                  */
838                 ep->f_ctl |= FC_FC_EX_CTX;      /* we're responding */
839                 ep->f_ctl &= ~FC_FC_FIRST_SEQ;  /* not new */
840                 fh = fc_frame_header_get(fp);
841                 ep->sid = ntoh24(fh->fh_d_id);
842                 ep->did = ntoh24(fh->fh_s_id);
843                 ep->oid = ep->did;
844
845                 /*
846                  * Allocated exchange has placed the XID in the
847                  * originator field. Move it to the responder field,
848                  * and set the originator XID from the frame.
849                  */
850                 ep->rxid = ep->xid;
851                 ep->oxid = ntohs(fh->fh_ox_id);
852                 ep->esb_stat |= ESB_ST_RESP | ESB_ST_SEQ_INIT;
853                 if ((ntoh24(fh->fh_f_ctl) & FC_FC_SEQ_INIT) == 0)
854                         ep->esb_stat &= ~ESB_ST_SEQ_INIT;
855
856                 fc_exch_hold(ep);       /* hold for caller */
857                 spin_unlock_bh(&ep->ex_lock);   /* lock from fc_exch_alloc */
858         }
859         return ep;
860 }
861
862 /**
863  * fc_seq_lookup_recip() - Find a sequence where the other end
864  *                         originated the sequence
865  * @lport: The local port that the frame was sent to
866  * @mp:    The Exchange Manager to lookup the exchange from
867  * @fp:    The frame associated with the sequence we're looking for
868  *
869  * If fc_pf_rjt_reason is FC_RJT_NONE then this function will have a hold
870  * on the ep that should be released by the caller.
871  */
872 static enum fc_pf_rjt_reason fc_seq_lookup_recip(struct fc_lport *lport,
873                                                  struct fc_exch_mgr *mp,
874                                                  struct fc_frame *fp)
875 {
876         struct fc_frame_header *fh = fc_frame_header_get(fp);
877         struct fc_exch *ep = NULL;
878         struct fc_seq *sp = NULL;
879         enum fc_pf_rjt_reason reject = FC_RJT_NONE;
880         u32 f_ctl;
881         u16 xid;
882
883         f_ctl = ntoh24(fh->fh_f_ctl);
884         WARN_ON((f_ctl & FC_FC_SEQ_CTX) != 0);
885
886         /*
887          * Lookup or create the exchange if we will be creating the sequence.
888          */
889         if (f_ctl & FC_FC_EX_CTX) {
890                 xid = ntohs(fh->fh_ox_id);      /* we originated exch */
891                 ep = fc_exch_find(mp, xid);
892                 if (!ep) {
893                         atomic_inc(&mp->stats.xid_not_found);
894                         reject = FC_RJT_OX_ID;
895                         goto out;
896                 }
897                 if (ep->rxid == FC_XID_UNKNOWN)
898                         ep->rxid = ntohs(fh->fh_rx_id);
899                 else if (ep->rxid != ntohs(fh->fh_rx_id)) {
900                         reject = FC_RJT_OX_ID;
901                         goto rel;
902                 }
903         } else {
904                 xid = ntohs(fh->fh_rx_id);      /* we are the responder */
905
906                 /*
907                  * Special case for MDS issuing an ELS TEST with a
908                  * bad rxid of 0.
909                  * XXX take this out once we do the proper reject.
910                  */
911                 if (xid == 0 && fh->fh_r_ctl == FC_RCTL_ELS_REQ &&
912                     fc_frame_payload_op(fp) == ELS_TEST) {
913                         fh->fh_rx_id = htons(FC_XID_UNKNOWN);
914                         xid = FC_XID_UNKNOWN;
915                 }
916
917                 /*
918                  * new sequence - find the exchange
919                  */
920                 ep = fc_exch_find(mp, xid);
921                 if ((f_ctl & FC_FC_FIRST_SEQ) && fc_sof_is_init(fr_sof(fp))) {
922                         if (ep) {
923                                 atomic_inc(&mp->stats.xid_busy);
924                                 reject = FC_RJT_RX_ID;
925                                 goto rel;
926                         }
927                         ep = fc_exch_resp(lport, mp, fp);
928                         if (!ep) {
929                                 reject = FC_RJT_EXCH_EST;       /* XXX */
930                                 goto out;
931                         }
932                         xid = ep->xid;  /* get our XID */
933                 } else if (!ep) {
934                         atomic_inc(&mp->stats.xid_not_found);
935                         reject = FC_RJT_RX_ID;  /* XID not found */
936                         goto out;
937                 }
938         }
939
940         /*
941          * At this point, we have the exchange held.
942          * Find or create the sequence.
943          */
944         if (fc_sof_is_init(fr_sof(fp))) {
945                 sp = &ep->seq;
946                 sp->ssb_stat |= SSB_ST_RESP;
947                 sp->id = fh->fh_seq_id;
948         } else {
949                 sp = &ep->seq;
950                 if (sp->id != fh->fh_seq_id) {
951                         atomic_inc(&mp->stats.seq_not_found);
952                         reject = FC_RJT_SEQ_ID; /* sequence/exch should exist */
953                         goto rel;
954                 }
955         }
956         WARN_ON(ep != fc_seq_exch(sp));
957
958         if (f_ctl & FC_FC_SEQ_INIT)
959                 ep->esb_stat |= ESB_ST_SEQ_INIT;
960
961         fr_seq(fp) = sp;
962 out:
963         return reject;
964 rel:
965         fc_exch_done(&ep->seq);
966         fc_exch_release(ep);    /* hold from fc_exch_find/fc_exch_resp */
967         return reject;
968 }
969
970 /**
971  * fc_seq_lookup_orig() - Find a sequence where this end
972  *                        originated the sequence
973  * @mp:    The Exchange Manager to lookup the exchange from
974  * @fp:    The frame associated with the sequence we're looking for
975  *
976  * Does not hold the sequence for the caller.
977  */
978 static struct fc_seq *fc_seq_lookup_orig(struct fc_exch_mgr *mp,
979                                          struct fc_frame *fp)
980 {
981         struct fc_frame_header *fh = fc_frame_header_get(fp);
982         struct fc_exch *ep;
983         struct fc_seq *sp = NULL;
984         u32 f_ctl;
985         u16 xid;
986
987         f_ctl = ntoh24(fh->fh_f_ctl);
988         WARN_ON((f_ctl & FC_FC_SEQ_CTX) != FC_FC_SEQ_CTX);
989         xid = ntohs((f_ctl & FC_FC_EX_CTX) ? fh->fh_ox_id : fh->fh_rx_id);
990         ep = fc_exch_find(mp, xid);
991         if (!ep)
992                 return NULL;
993         if (ep->seq.id == fh->fh_seq_id) {
994                 /*
995                  * Save the RX_ID if we didn't previously know it.
996                  */
997                 sp = &ep->seq;
998                 if ((f_ctl & FC_FC_EX_CTX) != 0 &&
999                     ep->rxid == FC_XID_UNKNOWN) {
1000                         ep->rxid = ntohs(fh->fh_rx_id);
1001                 }
1002         }
1003         fc_exch_release(ep);
1004         return sp;
1005 }
1006
1007 /**
1008  * fc_exch_set_addr() - Set the source and destination IDs for an exchange
1009  * @ep:      The exchange to set the addresses for
1010  * @orig_id: The originator's ID
1011  * @resp_id: The responder's ID
1012  *
1013  * Note this must be done before the first sequence of the exchange is sent.
1014  */
1015 static void fc_exch_set_addr(struct fc_exch *ep,
1016                              u32 orig_id, u32 resp_id)
1017 {
1018         ep->oid = orig_id;
1019         if (ep->esb_stat & ESB_ST_RESP) {
1020                 ep->sid = resp_id;
1021                 ep->did = orig_id;
1022         } else {
1023                 ep->sid = orig_id;
1024                 ep->did = resp_id;
1025         }
1026 }
1027
1028 /**
1029  * fc_seq_els_rsp_send() - Send an ELS response using infomation from
1030  *                         the existing sequence/exchange.
1031  * @fp:       The received frame
1032  * @els_cmd:  The ELS command to be sent
1033  * @els_data: The ELS data to be sent
1034  *
1035  * The received frame is not freed.
1036  */
1037 static void fc_seq_els_rsp_send(struct fc_frame *fp, enum fc_els_cmd els_cmd,
1038                                 struct fc_seq_els_data *els_data)
1039 {
1040         switch (els_cmd) {
1041         case ELS_LS_RJT:
1042                 fc_seq_ls_rjt(fp, els_data->reason, els_data->explan);
1043                 break;
1044         case ELS_LS_ACC:
1045                 fc_seq_ls_acc(fp);
1046                 break;
1047         case ELS_RRQ:
1048                 fc_exch_els_rrq(fp);
1049                 break;
1050         case ELS_REC:
1051                 fc_exch_els_rec(fp);
1052                 break;
1053         default:
1054                 FC_LPORT_DBG(fr_dev(fp), "Invalid ELS CMD:%x\n", els_cmd);
1055         }
1056 }
1057
1058 /**
1059  * fc_seq_send_last() - Send a sequence that is the last in the exchange
1060  * @sp:      The sequence that is to be sent
1061  * @fp:      The frame that will be sent on the sequence
1062  * @rctl:    The R_CTL information to be sent
1063  * @fh_type: The frame header type
1064  */
1065 static void fc_seq_send_last(struct fc_seq *sp, struct fc_frame *fp,
1066                              enum fc_rctl rctl, enum fc_fh_type fh_type)
1067 {
1068         u32 f_ctl;
1069         struct fc_exch *ep = fc_seq_exch(sp);
1070
1071         f_ctl = FC_FC_LAST_SEQ | FC_FC_END_SEQ | FC_FC_SEQ_INIT;
1072         f_ctl |= ep->f_ctl;
1073         fc_fill_fc_hdr(fp, rctl, ep->did, ep->sid, fh_type, f_ctl, 0);
1074         fc_seq_send(ep->lp, sp, fp);
1075 }
1076
1077 /**
1078  * fc_seq_send_ack() - Send an acknowledgement that we've received a frame
1079  * @sp:    The sequence to send the ACK on
1080  * @rx_fp: The received frame that is being acknoledged
1081  *
1082  * Send ACK_1 (or equiv.) indicating we received something.
1083  */
1084 static void fc_seq_send_ack(struct fc_seq *sp, const struct fc_frame *rx_fp)
1085 {
1086         struct fc_frame *fp;
1087         struct fc_frame_header *rx_fh;
1088         struct fc_frame_header *fh;
1089         struct fc_exch *ep = fc_seq_exch(sp);
1090         struct fc_lport *lport = ep->lp;
1091         unsigned int f_ctl;
1092
1093         /*
1094          * Don't send ACKs for class 3.
1095          */
1096         if (fc_sof_needs_ack(fr_sof(rx_fp))) {
1097                 fp = fc_frame_alloc(lport, 0);
1098                 if (!fp)
1099                         return;
1100
1101                 fh = fc_frame_header_get(fp);
1102                 fh->fh_r_ctl = FC_RCTL_ACK_1;
1103                 fh->fh_type = FC_TYPE_BLS;
1104
1105                 /*
1106                  * Form f_ctl by inverting EX_CTX and SEQ_CTX (bits 23, 22).
1107                  * Echo FIRST_SEQ, LAST_SEQ, END_SEQ, END_CONN, SEQ_INIT.
1108                  * Bits 9-8 are meaningful (retransmitted or unidirectional).
1109                  * Last ACK uses bits 7-6 (continue sequence),
1110                  * bits 5-4 are meaningful (what kind of ACK to use).
1111                  */
1112                 rx_fh = fc_frame_header_get(rx_fp);
1113                 f_ctl = ntoh24(rx_fh->fh_f_ctl);
1114                 f_ctl &= FC_FC_EX_CTX | FC_FC_SEQ_CTX |
1115                         FC_FC_FIRST_SEQ | FC_FC_LAST_SEQ |
1116                         FC_FC_END_SEQ | FC_FC_END_CONN | FC_FC_SEQ_INIT |
1117                         FC_FC_RETX_SEQ | FC_FC_UNI_TX;
1118                 f_ctl ^= FC_FC_EX_CTX | FC_FC_SEQ_CTX;
1119                 hton24(fh->fh_f_ctl, f_ctl);
1120
1121                 fc_exch_setup_hdr(ep, fp, f_ctl);
1122                 fh->fh_seq_id = rx_fh->fh_seq_id;
1123                 fh->fh_seq_cnt = rx_fh->fh_seq_cnt;
1124                 fh->fh_parm_offset = htonl(1);  /* ack single frame */
1125
1126                 fr_sof(fp) = fr_sof(rx_fp);
1127                 if (f_ctl & FC_FC_END_SEQ)
1128                         fr_eof(fp) = FC_EOF_T;
1129                 else
1130                         fr_eof(fp) = FC_EOF_N;
1131
1132                 lport->tt.frame_send(lport, fp);
1133         }
1134 }
1135
1136 /**
1137  * fc_exch_send_ba_rjt() - Send BLS Reject
1138  * @rx_fp:  The frame being rejected
1139  * @reason: The reason the frame is being rejected
1140  * @explan: The explaination for the rejection
1141  *
1142  * This is for rejecting BA_ABTS only.
1143  */
1144 static void fc_exch_send_ba_rjt(struct fc_frame *rx_fp,
1145                                 enum fc_ba_rjt_reason reason,
1146                                 enum fc_ba_rjt_explan explan)
1147 {
1148         struct fc_frame *fp;
1149         struct fc_frame_header *rx_fh;
1150         struct fc_frame_header *fh;
1151         struct fc_ba_rjt *rp;
1152         struct fc_lport *lport;
1153         unsigned int f_ctl;
1154
1155         lport = fr_dev(rx_fp);
1156         fp = fc_frame_alloc(lport, sizeof(*rp));
1157         if (!fp)
1158                 return;
1159         fh = fc_frame_header_get(fp);
1160         rx_fh = fc_frame_header_get(rx_fp);
1161
1162         memset(fh, 0, sizeof(*fh) + sizeof(*rp));
1163
1164         rp = fc_frame_payload_get(fp, sizeof(*rp));
1165         rp->br_reason = reason;
1166         rp->br_explan = explan;
1167
1168         /*
1169          * seq_id, cs_ctl, df_ctl and param/offset are zero.
1170          */
1171         memcpy(fh->fh_s_id, rx_fh->fh_d_id, 3);
1172         memcpy(fh->fh_d_id, rx_fh->fh_s_id, 3);
1173         fh->fh_ox_id = rx_fh->fh_ox_id;
1174         fh->fh_rx_id = rx_fh->fh_rx_id;
1175         fh->fh_seq_cnt = rx_fh->fh_seq_cnt;
1176         fh->fh_r_ctl = FC_RCTL_BA_RJT;
1177         fh->fh_type = FC_TYPE_BLS;
1178
1179         /*
1180          * Form f_ctl by inverting EX_CTX and SEQ_CTX (bits 23, 22).
1181          * Echo FIRST_SEQ, LAST_SEQ, END_SEQ, END_CONN, SEQ_INIT.
1182          * Bits 9-8 are meaningful (retransmitted or unidirectional).
1183          * Last ACK uses bits 7-6 (continue sequence),
1184          * bits 5-4 are meaningful (what kind of ACK to use).
1185          * Always set LAST_SEQ, END_SEQ.
1186          */
1187         f_ctl = ntoh24(rx_fh->fh_f_ctl);
1188         f_ctl &= FC_FC_EX_CTX | FC_FC_SEQ_CTX |
1189                 FC_FC_END_CONN | FC_FC_SEQ_INIT |
1190                 FC_FC_RETX_SEQ | FC_FC_UNI_TX;
1191         f_ctl ^= FC_FC_EX_CTX | FC_FC_SEQ_CTX;
1192         f_ctl |= FC_FC_LAST_SEQ | FC_FC_END_SEQ;
1193         f_ctl &= ~FC_FC_FIRST_SEQ;
1194         hton24(fh->fh_f_ctl, f_ctl);
1195
1196         fr_sof(fp) = fc_sof_class(fr_sof(rx_fp));
1197         fr_eof(fp) = FC_EOF_T;
1198         if (fc_sof_needs_ack(fr_sof(fp)))
1199                 fr_eof(fp) = FC_EOF_N;
1200
1201         lport->tt.frame_send(lport, fp);
1202 }
1203
1204 /**
1205  * fc_exch_recv_abts() - Handle an incoming ABTS
1206  * @ep:    The exchange the abort was on
1207  * @rx_fp: The ABTS frame
1208  *
1209  * This would be for target mode usually, but could be due to lost
1210  * FCP transfer ready, confirm or RRQ. We always handle this as an
1211  * exchange abort, ignoring the parameter.
1212  */
1213 static void fc_exch_recv_abts(struct fc_exch *ep, struct fc_frame *rx_fp)
1214 {
1215         struct fc_frame *fp;
1216         struct fc_ba_acc *ap;
1217         struct fc_frame_header *fh;
1218         struct fc_seq *sp;
1219
1220         if (!ep)
1221                 goto reject;
1222         spin_lock_bh(&ep->ex_lock);
1223         if (ep->esb_stat & ESB_ST_COMPLETE) {
1224                 spin_unlock_bh(&ep->ex_lock);
1225                 goto reject;
1226         }
1227         if (!(ep->esb_stat & ESB_ST_REC_QUAL))
1228                 fc_exch_hold(ep);               /* hold for REC_QUAL */
1229         ep->esb_stat |= ESB_ST_ABNORMAL | ESB_ST_REC_QUAL;
1230         fc_exch_timer_set_locked(ep, ep->r_a_tov);
1231
1232         fp = fc_frame_alloc(ep->lp, sizeof(*ap));
1233         if (!fp) {
1234                 spin_unlock_bh(&ep->ex_lock);
1235                 goto free;
1236         }
1237         fh = fc_frame_header_get(fp);
1238         ap = fc_frame_payload_get(fp, sizeof(*ap));
1239         memset(ap, 0, sizeof(*ap));
1240         sp = &ep->seq;
1241         ap->ba_high_seq_cnt = htons(0xffff);
1242         if (sp->ssb_stat & SSB_ST_RESP) {
1243                 ap->ba_seq_id = sp->id;
1244                 ap->ba_seq_id_val = FC_BA_SEQ_ID_VAL;
1245                 ap->ba_high_seq_cnt = fh->fh_seq_cnt;
1246                 ap->ba_low_seq_cnt = htons(sp->cnt);
1247         }
1248         sp = fc_seq_start_next_locked(sp);
1249         spin_unlock_bh(&ep->ex_lock);
1250         fc_seq_send_last(sp, fp, FC_RCTL_BA_ACC, FC_TYPE_BLS);
1251         fc_frame_free(rx_fp);
1252         return;
1253
1254 reject:
1255         fc_exch_send_ba_rjt(rx_fp, FC_BA_RJT_UNABLE, FC_BA_RJT_INV_XID);
1256 free:
1257         fc_frame_free(rx_fp);
1258 }
1259
1260 /**
1261  * fc_seq_assign() - Assign exchange and sequence for incoming request
1262  * @lport: The local port that received the request
1263  * @fp:    The request frame
1264  *
1265  * On success, the sequence pointer will be returned and also in fr_seq(@fp).
1266  */
1267 static struct fc_seq *fc_seq_assign(struct fc_lport *lport, struct fc_frame *fp)
1268 {
1269         struct fc_exch_mgr_anchor *ema;
1270
1271         WARN_ON(lport != fr_dev(fp));
1272         WARN_ON(fr_seq(fp));
1273         fr_seq(fp) = NULL;
1274
1275         list_for_each_entry(ema, &lport->ema_list, ema_list)
1276                 if ((!ema->match || ema->match(fp)) &&
1277                     fc_seq_lookup_recip(lport, ema->mp, fp) == FC_RJT_NONE)
1278                         break;
1279         return fr_seq(fp);
1280 }
1281
1282 /**
1283  * fc_exch_recv_req() - Handler for an incoming request
1284  * @lport: The local port that received the request
1285  * @mp:    The EM that the exchange is on
1286  * @fp:    The request frame
1287  *
1288  * This is used when the other end is originating the exchange
1289  * and the sequence.
1290  */
1291 static void fc_exch_recv_req(struct fc_lport *lport, struct fc_exch_mgr *mp,
1292                              struct fc_frame *fp)
1293 {
1294         struct fc_frame_header *fh = fc_frame_header_get(fp);
1295         struct fc_seq *sp = NULL;
1296         struct fc_exch *ep = NULL;
1297         enum fc_pf_rjt_reason reject;
1298
1299         /* We can have the wrong fc_lport at this point with NPIV, which is a
1300          * problem now that we know a new exchange needs to be allocated
1301          */
1302         lport = fc_vport_id_lookup(lport, ntoh24(fh->fh_d_id));
1303         if (!lport) {
1304                 fc_frame_free(fp);
1305                 return;
1306         }
1307         fr_dev(fp) = lport;
1308
1309         BUG_ON(fr_seq(fp));             /* XXX remove later */
1310
1311         /*
1312          * If the RX_ID is 0xffff, don't allocate an exchange.
1313          * The upper-level protocol may request one later, if needed.
1314          */
1315         if (fh->fh_rx_id == htons(FC_XID_UNKNOWN))
1316                 return lport->tt.lport_recv(lport, fp);
1317
1318         reject = fc_seq_lookup_recip(lport, mp, fp);
1319         if (reject == FC_RJT_NONE) {
1320                 sp = fr_seq(fp);        /* sequence will be held */
1321                 ep = fc_seq_exch(sp);
1322                 fc_seq_send_ack(sp, fp);
1323                 ep->encaps = fr_encaps(fp);
1324
1325                 /*
1326                  * Call the receive function.
1327                  *
1328                  * The receive function may allocate a new sequence
1329                  * over the old one, so we shouldn't change the
1330                  * sequence after this.
1331                  *
1332                  * The frame will be freed by the receive function.
1333                  * If new exch resp handler is valid then call that
1334                  * first.
1335                  */
1336                 if (ep->resp)
1337                         ep->resp(sp, fp, ep->arg);
1338                 else
1339                         lport->tt.lport_recv(lport, fp);
1340                 fc_exch_release(ep);    /* release from lookup */
1341         } else {
1342                 FC_LPORT_DBG(lport, "exch/seq lookup failed: reject %x\n",
1343                              reject);
1344                 fc_frame_free(fp);
1345         }
1346 }
1347
1348 /**
1349  * fc_exch_recv_seq_resp() - Handler for an incoming response where the other
1350  *                           end is the originator of the sequence that is a
1351  *                           response to our initial exchange
1352  * @mp: The EM that the exchange is on
1353  * @fp: The response frame
1354  */
1355 static void fc_exch_recv_seq_resp(struct fc_exch_mgr *mp, struct fc_frame *fp)
1356 {
1357         struct fc_frame_header *fh = fc_frame_header_get(fp);
1358         struct fc_seq *sp;
1359         struct fc_exch *ep;
1360         enum fc_sof sof;
1361         u32 f_ctl;
1362         void (*resp)(struct fc_seq *, struct fc_frame *fp, void *arg);
1363         void *ex_resp_arg;
1364         int rc;
1365
1366         ep = fc_exch_find(mp, ntohs(fh->fh_ox_id));
1367         if (!ep) {
1368                 atomic_inc(&mp->stats.xid_not_found);
1369                 goto out;
1370         }
1371         if (ep->esb_stat & ESB_ST_COMPLETE) {
1372                 atomic_inc(&mp->stats.xid_not_found);
1373                 goto rel;
1374         }
1375         if (ep->rxid == FC_XID_UNKNOWN)
1376                 ep->rxid = ntohs(fh->fh_rx_id);
1377         if (ep->sid != 0 && ep->sid != ntoh24(fh->fh_d_id)) {
1378                 atomic_inc(&mp->stats.xid_not_found);
1379                 goto rel;
1380         }
1381         if (ep->did != ntoh24(fh->fh_s_id) &&
1382             ep->did != FC_FID_FLOGI) {
1383                 atomic_inc(&mp->stats.xid_not_found);
1384                 goto rel;
1385         }
1386         sof = fr_sof(fp);
1387         sp = &ep->seq;
1388         if (fc_sof_is_init(sof)) {
1389                 sp->ssb_stat |= SSB_ST_RESP;
1390                 sp->id = fh->fh_seq_id;
1391         } else if (sp->id != fh->fh_seq_id) {
1392                 atomic_inc(&mp->stats.seq_not_found);
1393                 goto rel;
1394         }
1395
1396         f_ctl = ntoh24(fh->fh_f_ctl);
1397         fr_seq(fp) = sp;
1398         if (f_ctl & FC_FC_SEQ_INIT)
1399                 ep->esb_stat |= ESB_ST_SEQ_INIT;
1400
1401         if (fc_sof_needs_ack(sof))
1402                 fc_seq_send_ack(sp, fp);
1403         resp = ep->resp;
1404         ex_resp_arg = ep->arg;
1405
1406         if (fh->fh_type != FC_TYPE_FCP && fr_eof(fp) == FC_EOF_T &&
1407             (f_ctl & (FC_FC_LAST_SEQ | FC_FC_END_SEQ)) ==
1408             (FC_FC_LAST_SEQ | FC_FC_END_SEQ)) {
1409                 spin_lock_bh(&ep->ex_lock);
1410                 rc = fc_exch_done_locked(ep);
1411                 WARN_ON(fc_seq_exch(sp) != ep);
1412                 spin_unlock_bh(&ep->ex_lock);
1413                 if (!rc)
1414                         fc_exch_delete(ep);
1415         }
1416
1417         /*
1418          * Call the receive function.
1419          * The sequence is held (has a refcnt) for us,
1420          * but not for the receive function.
1421          *
1422          * The receive function may allocate a new sequence
1423          * over the old one, so we shouldn't change the
1424          * sequence after this.
1425          *
1426          * The frame will be freed by the receive function.
1427          * If new exch resp handler is valid then call that
1428          * first.
1429          */
1430         if (resp)
1431                 resp(sp, fp, ex_resp_arg);
1432         else
1433                 fc_frame_free(fp);
1434         fc_exch_release(ep);
1435         return;
1436 rel:
1437         fc_exch_release(ep);
1438 out:
1439         fc_frame_free(fp);
1440 }
1441
1442 /**
1443  * fc_exch_recv_resp() - Handler for a sequence where other end is
1444  *                       responding to our sequence
1445  * @mp: The EM that the exchange is on
1446  * @fp: The response frame
1447  */
1448 static void fc_exch_recv_resp(struct fc_exch_mgr *mp, struct fc_frame *fp)
1449 {
1450         struct fc_seq *sp;
1451
1452         sp = fc_seq_lookup_orig(mp, fp);        /* doesn't hold sequence */
1453
1454         if (!sp)
1455                 atomic_inc(&mp->stats.xid_not_found);
1456         else
1457                 atomic_inc(&mp->stats.non_bls_resp);
1458
1459         fc_frame_free(fp);
1460 }
1461
1462 /**
1463  * fc_exch_abts_resp() - Handler for a response to an ABT
1464  * @ep: The exchange that the frame is on
1465  * @fp: The response frame
1466  *
1467  * This response would be to an ABTS cancelling an exchange or sequence.
1468  * The response can be either BA_ACC or BA_RJT
1469  */
1470 static void fc_exch_abts_resp(struct fc_exch *ep, struct fc_frame *fp)
1471 {
1472         void (*resp)(struct fc_seq *, struct fc_frame *fp, void *arg);
1473         void *ex_resp_arg;
1474         struct fc_frame_header *fh;
1475         struct fc_ba_acc *ap;
1476         struct fc_seq *sp;
1477         u16 low;
1478         u16 high;
1479         int rc = 1, has_rec = 0;
1480
1481         fh = fc_frame_header_get(fp);
1482         FC_EXCH_DBG(ep, "exch: BLS rctl %x - %s\n", fh->fh_r_ctl,
1483                     fc_exch_rctl_name(fh->fh_r_ctl));
1484
1485         if (cancel_delayed_work_sync(&ep->timeout_work))
1486                 fc_exch_release(ep);    /* release from pending timer hold */
1487
1488         spin_lock_bh(&ep->ex_lock);
1489         switch (fh->fh_r_ctl) {
1490         case FC_RCTL_BA_ACC:
1491                 ap = fc_frame_payload_get(fp, sizeof(*ap));
1492                 if (!ap)
1493                         break;
1494
1495                 /*
1496                  * Decide whether to establish a Recovery Qualifier.
1497                  * We do this if there is a non-empty SEQ_CNT range and
1498                  * SEQ_ID is the same as the one we aborted.
1499                  */
1500                 low = ntohs(ap->ba_low_seq_cnt);
1501                 high = ntohs(ap->ba_high_seq_cnt);
1502                 if ((ep->esb_stat & ESB_ST_REC_QUAL) == 0 &&
1503                     (ap->ba_seq_id_val != FC_BA_SEQ_ID_VAL ||
1504                      ap->ba_seq_id == ep->seq_id) && low != high) {
1505                         ep->esb_stat |= ESB_ST_REC_QUAL;
1506                         fc_exch_hold(ep);  /* hold for recovery qualifier */
1507                         has_rec = 1;
1508                 }
1509                 break;
1510         case FC_RCTL_BA_RJT:
1511                 break;
1512         default:
1513                 break;
1514         }
1515
1516         resp = ep->resp;
1517         ex_resp_arg = ep->arg;
1518
1519         /* do we need to do some other checks here. Can we reuse more of
1520          * fc_exch_recv_seq_resp
1521          */
1522         sp = &ep->seq;
1523         /*
1524          * do we want to check END_SEQ as well as LAST_SEQ here?
1525          */
1526         if (ep->fh_type != FC_TYPE_FCP &&
1527             ntoh24(fh->fh_f_ctl) & FC_FC_LAST_SEQ)
1528                 rc = fc_exch_done_locked(ep);
1529         spin_unlock_bh(&ep->ex_lock);
1530         if (!rc)
1531                 fc_exch_delete(ep);
1532
1533         if (resp)
1534                 resp(sp, fp, ex_resp_arg);
1535         else
1536                 fc_frame_free(fp);
1537
1538         if (has_rec)
1539                 fc_exch_timer_set(ep, ep->r_a_tov);
1540
1541 }
1542
1543 /**
1544  * fc_exch_recv_bls() - Handler for a BLS sequence
1545  * @mp: The EM that the exchange is on
1546  * @fp: The request frame
1547  *
1548  * The BLS frame is always a sequence initiated by the remote side.
1549  * We may be either the originator or recipient of the exchange.
1550  */
1551 static void fc_exch_recv_bls(struct fc_exch_mgr *mp, struct fc_frame *fp)
1552 {
1553         struct fc_frame_header *fh;
1554         struct fc_exch *ep;
1555         u32 f_ctl;
1556
1557         fh = fc_frame_header_get(fp);
1558         f_ctl = ntoh24(fh->fh_f_ctl);
1559         fr_seq(fp) = NULL;
1560
1561         ep = fc_exch_find(mp, (f_ctl & FC_FC_EX_CTX) ?
1562                           ntohs(fh->fh_ox_id) : ntohs(fh->fh_rx_id));
1563         if (ep && (f_ctl & FC_FC_SEQ_INIT)) {
1564                 spin_lock_bh(&ep->ex_lock);
1565                 ep->esb_stat |= ESB_ST_SEQ_INIT;
1566                 spin_unlock_bh(&ep->ex_lock);
1567         }
1568         if (f_ctl & FC_FC_SEQ_CTX) {
1569                 /*
1570                  * A response to a sequence we initiated.
1571                  * This should only be ACKs for class 2 or F.
1572                  */
1573                 switch (fh->fh_r_ctl) {
1574                 case FC_RCTL_ACK_1:
1575                 case FC_RCTL_ACK_0:
1576                         break;
1577                 default:
1578                         FC_EXCH_DBG(ep, "BLS rctl %x - %s received",
1579                                     fh->fh_r_ctl,
1580                                     fc_exch_rctl_name(fh->fh_r_ctl));
1581                         break;
1582                 }
1583                 fc_frame_free(fp);
1584         } else {
1585                 switch (fh->fh_r_ctl) {
1586                 case FC_RCTL_BA_RJT:
1587                 case FC_RCTL_BA_ACC:
1588                         if (ep)
1589                                 fc_exch_abts_resp(ep, fp);
1590                         else
1591                                 fc_frame_free(fp);
1592                         break;
1593                 case FC_RCTL_BA_ABTS:
1594                         fc_exch_recv_abts(ep, fp);
1595                         break;
1596                 default:                        /* ignore junk */
1597                         fc_frame_free(fp);
1598                         break;
1599                 }
1600         }
1601         if (ep)
1602                 fc_exch_release(ep);    /* release hold taken by fc_exch_find */
1603 }
1604
1605 /**
1606  * fc_seq_ls_acc() - Accept sequence with LS_ACC
1607  * @rx_fp: The received frame, not freed here.
1608  *
1609  * If this fails due to allocation or transmit congestion, assume the
1610  * originator will repeat the sequence.
1611  */
1612 static void fc_seq_ls_acc(struct fc_frame *rx_fp)
1613 {
1614         struct fc_lport *lport;
1615         struct fc_els_ls_acc *acc;
1616         struct fc_frame *fp;
1617
1618         lport = fr_dev(rx_fp);
1619         fp = fc_frame_alloc(lport, sizeof(*acc));
1620         if (!fp)
1621                 return;
1622         acc = fc_frame_payload_get(fp, sizeof(*acc));
1623         memset(acc, 0, sizeof(*acc));
1624         acc->la_cmd = ELS_LS_ACC;
1625         fc_fill_reply_hdr(fp, rx_fp, FC_RCTL_ELS_REP, 0);
1626         lport->tt.frame_send(lport, fp);
1627 }
1628
1629 /**
1630  * fc_seq_ls_rjt() - Reject a sequence with ELS LS_RJT
1631  * @rx_fp: The received frame, not freed here.
1632  * @reason: The reason the sequence is being rejected
1633  * @explan: The explanation for the rejection
1634  *
1635  * If this fails due to allocation or transmit congestion, assume the
1636  * originator will repeat the sequence.
1637  */
1638 static void fc_seq_ls_rjt(struct fc_frame *rx_fp, enum fc_els_rjt_reason reason,
1639                           enum fc_els_rjt_explan explan)
1640 {
1641         struct fc_lport *lport;
1642         struct fc_els_ls_rjt *rjt;
1643         struct fc_frame *fp;
1644
1645         lport = fr_dev(rx_fp);
1646         fp = fc_frame_alloc(lport, sizeof(*rjt));
1647         if (!fp)
1648                 return;
1649         rjt = fc_frame_payload_get(fp, sizeof(*rjt));
1650         memset(rjt, 0, sizeof(*rjt));
1651         rjt->er_cmd = ELS_LS_RJT;
1652         rjt->er_reason = reason;
1653         rjt->er_explan = explan;
1654         fc_fill_reply_hdr(fp, rx_fp, FC_RCTL_ELS_REP, 0);
1655         lport->tt.frame_send(lport, fp);
1656 }
1657
1658 /**
1659  * fc_exch_reset() - Reset an exchange
1660  * @ep: The exchange to be reset
1661  */
1662 static void fc_exch_reset(struct fc_exch *ep)
1663 {
1664         struct fc_seq *sp;
1665         void (*resp)(struct fc_seq *, struct fc_frame *, void *);
1666         void *arg;
1667         int rc = 1;
1668
1669         spin_lock_bh(&ep->ex_lock);
1670         ep->state |= FC_EX_RST_CLEANUP;
1671         if (cancel_delayed_work(&ep->timeout_work))
1672                 atomic_dec(&ep->ex_refcnt);     /* drop hold for timer */
1673         resp = ep->resp;
1674         ep->resp = NULL;
1675         if (ep->esb_stat & ESB_ST_REC_QUAL)
1676                 atomic_dec(&ep->ex_refcnt);     /* drop hold for rec_qual */
1677         ep->esb_stat &= ~ESB_ST_REC_QUAL;
1678         arg = ep->arg;
1679         sp = &ep->seq;
1680         rc = fc_exch_done_locked(ep);
1681         spin_unlock_bh(&ep->ex_lock);
1682         if (!rc)
1683                 fc_exch_delete(ep);
1684
1685         if (resp)
1686                 resp(sp, ERR_PTR(-FC_EX_CLOSED), arg);
1687 }
1688
1689 /**
1690  * fc_exch_pool_reset() - Reset a per cpu exchange pool
1691  * @lport: The local port that the exchange pool is on
1692  * @pool:  The exchange pool to be reset
1693  * @sid:   The source ID
1694  * @did:   The destination ID
1695  *
1696  * Resets a per cpu exches pool, releasing all of its sequences
1697  * and exchanges. If sid is non-zero then reset only exchanges
1698  * we sourced from the local port's FID. If did is non-zero then
1699  * only reset exchanges destined for the local port's FID.
1700  */
1701 static void fc_exch_pool_reset(struct fc_lport *lport,
1702                                struct fc_exch_pool *pool,
1703                                u32 sid, u32 did)
1704 {
1705         struct fc_exch *ep;
1706         struct fc_exch *next;
1707
1708         spin_lock_bh(&pool->lock);
1709 restart:
1710         list_for_each_entry_safe(ep, next, &pool->ex_list, ex_list) {
1711                 if ((lport == ep->lp) &&
1712                     (sid == 0 || sid == ep->sid) &&
1713                     (did == 0 || did == ep->did)) {
1714                         fc_exch_hold(ep);
1715                         spin_unlock_bh(&pool->lock);
1716
1717                         fc_exch_reset(ep);
1718
1719                         fc_exch_release(ep);
1720                         spin_lock_bh(&pool->lock);
1721
1722                         /*
1723                          * must restart loop incase while lock
1724                          * was down multiple eps were released.
1725                          */
1726                         goto restart;
1727                 }
1728         }
1729         spin_unlock_bh(&pool->lock);
1730 }
1731
1732 /**
1733  * fc_exch_mgr_reset() - Reset all EMs of a local port
1734  * @lport: The local port whose EMs are to be reset
1735  * @sid:   The source ID
1736  * @did:   The destination ID
1737  *
1738  * Reset all EMs associated with a given local port. Release all
1739  * sequences and exchanges. If sid is non-zero then reset only the
1740  * exchanges sent from the local port's FID. If did is non-zero then
1741  * reset only exchanges destined for the local port's FID.
1742  */
1743 void fc_exch_mgr_reset(struct fc_lport *lport, u32 sid, u32 did)
1744 {
1745         struct fc_exch_mgr_anchor *ema;
1746         unsigned int cpu;
1747
1748         list_for_each_entry(ema, &lport->ema_list, ema_list) {
1749                 for_each_possible_cpu(cpu)
1750                         fc_exch_pool_reset(lport,
1751                                            per_cpu_ptr(ema->mp->pool, cpu),
1752                                            sid, did);
1753         }
1754 }
1755 EXPORT_SYMBOL(fc_exch_mgr_reset);
1756
1757 /**
1758  * fc_exch_lookup() - find an exchange
1759  * @lport: The local port
1760  * @xid: The exchange ID
1761  *
1762  * Returns exchange pointer with hold for caller, or NULL if not found.
1763  */
1764 static struct fc_exch *fc_exch_lookup(struct fc_lport *lport, u32 xid)
1765 {
1766         struct fc_exch_mgr_anchor *ema;
1767
1768         list_for_each_entry(ema, &lport->ema_list, ema_list)
1769                 if (ema->mp->min_xid <= xid && xid <= ema->mp->max_xid)
1770                         return fc_exch_find(ema->mp, xid);
1771         return NULL;
1772 }
1773
1774 /**
1775  * fc_exch_els_rec() - Handler for ELS REC (Read Exchange Concise) requests
1776  * @rfp: The REC frame, not freed here.
1777  *
1778  * Note that the requesting port may be different than the S_ID in the request.
1779  */
1780 static void fc_exch_els_rec(struct fc_frame *rfp)
1781 {
1782         struct fc_lport *lport;
1783         struct fc_frame *fp;
1784         struct fc_exch *ep;
1785         struct fc_els_rec *rp;
1786         struct fc_els_rec_acc *acc;
1787         enum fc_els_rjt_reason reason = ELS_RJT_LOGIC;
1788         enum fc_els_rjt_explan explan;
1789         u32 sid;
1790         u16 rxid;
1791         u16 oxid;
1792
1793         lport = fr_dev(rfp);
1794         rp = fc_frame_payload_get(rfp, sizeof(*rp));
1795         explan = ELS_EXPL_INV_LEN;
1796         if (!rp)
1797                 goto reject;
1798         sid = ntoh24(rp->rec_s_id);
1799         rxid = ntohs(rp->rec_rx_id);
1800         oxid = ntohs(rp->rec_ox_id);
1801
1802         ep = fc_exch_lookup(lport,
1803                             sid == fc_host_port_id(lport->host) ? oxid : rxid);
1804         explan = ELS_EXPL_OXID_RXID;
1805         if (!ep)
1806                 goto reject;
1807         if (ep->oid != sid || oxid != ep->oxid)
1808                 goto rel;
1809         if (rxid != FC_XID_UNKNOWN && rxid != ep->rxid)
1810                 goto rel;
1811         fp = fc_frame_alloc(lport, sizeof(*acc));
1812         if (!fp)
1813                 goto out;
1814
1815         acc = fc_frame_payload_get(fp, sizeof(*acc));
1816         memset(acc, 0, sizeof(*acc));
1817         acc->reca_cmd = ELS_LS_ACC;
1818         acc->reca_ox_id = rp->rec_ox_id;
1819         memcpy(acc->reca_ofid, rp->rec_s_id, 3);
1820         acc->reca_rx_id = htons(ep->rxid);
1821         if (ep->sid == ep->oid)
1822                 hton24(acc->reca_rfid, ep->did);
1823         else
1824                 hton24(acc->reca_rfid, ep->sid);
1825         acc->reca_fc4value = htonl(ep->seq.rec_data);
1826         acc->reca_e_stat = htonl(ep->esb_stat & (ESB_ST_RESP |
1827                                                  ESB_ST_SEQ_INIT |
1828                                                  ESB_ST_COMPLETE));
1829         fc_fill_reply_hdr(fp, rfp, FC_RCTL_ELS_REP, 0);
1830         lport->tt.frame_send(lport, fp);
1831 out:
1832         fc_exch_release(ep);
1833         return;
1834
1835 rel:
1836         fc_exch_release(ep);
1837 reject:
1838         fc_seq_ls_rjt(rfp, reason, explan);
1839 }
1840
1841 /**
1842  * fc_exch_rrq_resp() - Handler for RRQ responses
1843  * @sp:  The sequence that the RRQ is on
1844  * @fp:  The RRQ frame
1845  * @arg: The exchange that the RRQ is on
1846  *
1847  * TODO: fix error handler.
1848  */
1849 static void fc_exch_rrq_resp(struct fc_seq *sp, struct fc_frame *fp, void *arg)
1850 {
1851         struct fc_exch *aborted_ep = arg;
1852         unsigned int op;
1853
1854         if (IS_ERR(fp)) {
1855                 int err = PTR_ERR(fp);
1856
1857                 if (err == -FC_EX_CLOSED || err == -FC_EX_TIMEOUT)
1858                         goto cleanup;
1859                 FC_EXCH_DBG(aborted_ep, "Cannot process RRQ, "
1860                             "frame error %d\n", err);
1861                 return;
1862         }
1863
1864         op = fc_frame_payload_op(fp);
1865         fc_frame_free(fp);
1866
1867         switch (op) {
1868         case ELS_LS_RJT:
1869                 FC_EXCH_DBG(aborted_ep, "LS_RJT for RRQ");
1870                 /* fall through */
1871         case ELS_LS_ACC:
1872                 goto cleanup;
1873         default:
1874                 FC_EXCH_DBG(aborted_ep, "unexpected response op %x "
1875                             "for RRQ", op);
1876                 return;
1877         }
1878
1879 cleanup:
1880         fc_exch_done(&aborted_ep->seq);
1881         /* drop hold for rec qual */
1882         fc_exch_release(aborted_ep);
1883 }
1884
1885
1886 /**
1887  * fc_exch_seq_send() - Send a frame using a new exchange and sequence
1888  * @lport:      The local port to send the frame on
1889  * @fp:         The frame to be sent
1890  * @resp:       The response handler for this request
1891  * @destructor: The destructor for the exchange
1892  * @arg:        The argument to be passed to the response handler
1893  * @timer_msec: The timeout period for the exchange
1894  *
1895  * The frame pointer with some of the header's fields must be
1896  * filled before calling this routine, those fields are:
1897  *
1898  * - routing control
1899  * - FC port did
1900  * - FC port sid
1901  * - FC header type
1902  * - frame control
1903  * - parameter or relative offset
1904  */
1905 static struct fc_seq *fc_exch_seq_send(struct fc_lport *lport,
1906                                        struct fc_frame *fp,
1907                                        void (*resp)(struct fc_seq *,
1908                                                     struct fc_frame *fp,
1909                                                     void *arg),
1910                                        void (*destructor)(struct fc_seq *,
1911                                                           void *),
1912                                        void *arg, u32 timer_msec)
1913 {
1914         struct fc_exch *ep;
1915         struct fc_seq *sp = NULL;
1916         struct fc_frame_header *fh;
1917         int rc = 1;
1918
1919         ep = fc_exch_alloc(lport, fp);
1920         if (!ep) {
1921                 fc_frame_free(fp);
1922                 return NULL;
1923         }
1924         ep->esb_stat |= ESB_ST_SEQ_INIT;
1925         fh = fc_frame_header_get(fp);
1926         fc_exch_set_addr(ep, ntoh24(fh->fh_s_id), ntoh24(fh->fh_d_id));
1927         ep->resp = resp;
1928         ep->destructor = destructor;
1929         ep->arg = arg;
1930         ep->r_a_tov = FC_DEF_R_A_TOV;
1931         ep->lp = lport;
1932         sp = &ep->seq;
1933
1934         ep->fh_type = fh->fh_type; /* save for possbile timeout handling */
1935         ep->f_ctl = ntoh24(fh->fh_f_ctl);
1936         fc_exch_setup_hdr(ep, fp, ep->f_ctl);
1937         sp->cnt++;
1938
1939         if (ep->xid <= lport->lro_xid && fh->fh_r_ctl == FC_RCTL_DD_UNSOL_CMD)
1940                 fc_fcp_ddp_setup(fr_fsp(fp), ep->xid);
1941
1942         if (unlikely(lport->tt.frame_send(lport, fp)))
1943                 goto err;
1944
1945         if (timer_msec)
1946                 fc_exch_timer_set_locked(ep, timer_msec);
1947         ep->f_ctl &= ~FC_FC_FIRST_SEQ;  /* not first seq */
1948
1949         if (ep->f_ctl & FC_FC_SEQ_INIT)
1950                 ep->esb_stat &= ~ESB_ST_SEQ_INIT;
1951         spin_unlock_bh(&ep->ex_lock);
1952         return sp;
1953 err:
1954         rc = fc_exch_done_locked(ep);
1955         spin_unlock_bh(&ep->ex_lock);
1956         if (!rc)
1957                 fc_exch_delete(ep);
1958         return NULL;
1959 }
1960
1961 /**
1962  * fc_exch_rrq() - Send an ELS RRQ (Reinstate Recovery Qualifier) command
1963  * @ep: The exchange to send the RRQ on
1964  *
1965  * This tells the remote port to stop blocking the use of
1966  * the exchange and the seq_cnt range.
1967  */
1968 static void fc_exch_rrq(struct fc_exch *ep)
1969 {
1970         struct fc_lport *lport;
1971         struct fc_els_rrq *rrq;
1972         struct fc_frame *fp;
1973         u32 did;
1974
1975         lport = ep->lp;
1976
1977         fp = fc_frame_alloc(lport, sizeof(*rrq));
1978         if (!fp)
1979                 goto retry;
1980
1981         rrq = fc_frame_payload_get(fp, sizeof(*rrq));
1982         memset(rrq, 0, sizeof(*rrq));
1983         rrq->rrq_cmd = ELS_RRQ;
1984         hton24(rrq->rrq_s_id, ep->sid);
1985         rrq->rrq_ox_id = htons(ep->oxid);
1986         rrq->rrq_rx_id = htons(ep->rxid);
1987
1988         did = ep->did;
1989         if (ep->esb_stat & ESB_ST_RESP)
1990                 did = ep->sid;
1991
1992         fc_fill_fc_hdr(fp, FC_RCTL_ELS_REQ, did,
1993                        lport->port_id, FC_TYPE_ELS,
1994                        FC_FC_FIRST_SEQ | FC_FC_END_SEQ | FC_FC_SEQ_INIT, 0);
1995
1996         if (fc_exch_seq_send(lport, fp, fc_exch_rrq_resp, NULL, ep,
1997                              lport->e_d_tov))
1998                 return;
1999
2000 retry:
2001         spin_lock_bh(&ep->ex_lock);
2002         if (ep->state & (FC_EX_RST_CLEANUP | FC_EX_DONE)) {
2003                 spin_unlock_bh(&ep->ex_lock);
2004                 /* drop hold for rec qual */
2005                 fc_exch_release(ep);
2006                 return;
2007         }
2008         ep->esb_stat |= ESB_ST_REC_QUAL;
2009         fc_exch_timer_set_locked(ep, ep->r_a_tov);
2010         spin_unlock_bh(&ep->ex_lock);
2011 }
2012
2013 /**
2014  * fc_exch_els_rrq() - Handler for ELS RRQ (Reset Recovery Qualifier) requests
2015  * @fp: The RRQ frame, not freed here.
2016  */
2017 static void fc_exch_els_rrq(struct fc_frame *fp)
2018 {
2019         struct fc_lport *lport;
2020         struct fc_exch *ep = NULL;      /* request or subject exchange */
2021         struct fc_els_rrq *rp;
2022         u32 sid;
2023         u16 xid;
2024         enum fc_els_rjt_explan explan;
2025
2026         lport = fr_dev(fp);
2027         rp = fc_frame_payload_get(fp, sizeof(*rp));
2028         explan = ELS_EXPL_INV_LEN;
2029         if (!rp)
2030                 goto reject;
2031
2032         /*
2033          * lookup subject exchange.
2034          */
2035         sid = ntoh24(rp->rrq_s_id);             /* subject source */
2036         xid = fc_host_port_id(lport->host) == sid ?
2037                         ntohs(rp->rrq_ox_id) : ntohs(rp->rrq_rx_id);
2038         ep = fc_exch_lookup(lport, xid);
2039         explan = ELS_EXPL_OXID_RXID;
2040         if (!ep)
2041                 goto reject;
2042         spin_lock_bh(&ep->ex_lock);
2043         if (ep->oxid != ntohs(rp->rrq_ox_id))
2044                 goto unlock_reject;
2045         if (ep->rxid != ntohs(rp->rrq_rx_id) &&
2046             ep->rxid != FC_XID_UNKNOWN)
2047                 goto unlock_reject;
2048         explan = ELS_EXPL_SID;
2049         if (ep->sid != sid)
2050                 goto unlock_reject;
2051
2052         /*
2053          * Clear Recovery Qualifier state, and cancel timer if complete.
2054          */
2055         if (ep->esb_stat & ESB_ST_REC_QUAL) {
2056                 ep->esb_stat &= ~ESB_ST_REC_QUAL;
2057                 atomic_dec(&ep->ex_refcnt);     /* drop hold for rec qual */
2058         }
2059         if (ep->esb_stat & ESB_ST_COMPLETE) {
2060                 if (cancel_delayed_work(&ep->timeout_work))
2061                         atomic_dec(&ep->ex_refcnt);     /* drop timer hold */
2062         }
2063
2064         spin_unlock_bh(&ep->ex_lock);
2065
2066         /*
2067          * Send LS_ACC.
2068          */
2069         fc_seq_ls_acc(fp);
2070         goto out;
2071
2072 unlock_reject:
2073         spin_unlock_bh(&ep->ex_lock);
2074 reject:
2075         fc_seq_ls_rjt(fp, ELS_RJT_LOGIC, explan);
2076 out:
2077         if (ep)
2078                 fc_exch_release(ep);    /* drop hold from fc_exch_find */
2079 }
2080
2081 /**
2082  * fc_exch_mgr_add() - Add an exchange manager to a local port's list of EMs
2083  * @lport: The local port to add the exchange manager to
2084  * @mp:    The exchange manager to be added to the local port
2085  * @match: The match routine that indicates when this EM should be used
2086  */
2087 struct fc_exch_mgr_anchor *fc_exch_mgr_add(struct fc_lport *lport,
2088                                            struct fc_exch_mgr *mp,
2089                                            bool (*match)(struct fc_frame *))
2090 {
2091         struct fc_exch_mgr_anchor *ema;
2092
2093         ema = kmalloc(sizeof(*ema), GFP_ATOMIC);
2094         if (!ema)
2095                 return ema;
2096
2097         ema->mp = mp;
2098         ema->match = match;
2099         /* add EM anchor to EM anchors list */
2100         list_add_tail(&ema->ema_list, &lport->ema_list);
2101         kref_get(&mp->kref);
2102         return ema;
2103 }
2104 EXPORT_SYMBOL(fc_exch_mgr_add);
2105
2106 /**
2107  * fc_exch_mgr_destroy() - Destroy an exchange manager
2108  * @kref: The reference to the EM to be destroyed
2109  */
2110 static void fc_exch_mgr_destroy(struct kref *kref)
2111 {
2112         struct fc_exch_mgr *mp = container_of(kref, struct fc_exch_mgr, kref);
2113
2114         mempool_destroy(mp->ep_pool);
2115         free_percpu(mp->pool);
2116         kfree(mp);
2117 }
2118
2119 /**
2120  * fc_exch_mgr_del() - Delete an EM from a local port's list
2121  * @ema: The exchange manager anchor identifying the EM to be deleted
2122  */
2123 void fc_exch_mgr_del(struct fc_exch_mgr_anchor *ema)
2124 {
2125         /* remove EM anchor from EM anchors list */
2126         list_del(&ema->ema_list);
2127         kref_put(&ema->mp->kref, fc_exch_mgr_destroy);
2128         kfree(ema);
2129 }
2130 EXPORT_SYMBOL(fc_exch_mgr_del);
2131
2132 /**
2133  * fc_exch_mgr_list_clone() - Share all exchange manager objects
2134  * @src: Source lport to clone exchange managers from
2135  * @dst: New lport that takes references to all the exchange managers
2136  */
2137 int fc_exch_mgr_list_clone(struct fc_lport *src, struct fc_lport *dst)
2138 {
2139         struct fc_exch_mgr_anchor *ema, *tmp;
2140
2141         list_for_each_entry(ema, &src->ema_list, ema_list) {
2142                 if (!fc_exch_mgr_add(dst, ema->mp, ema->match))
2143                         goto err;
2144         }
2145         return 0;
2146 err:
2147         list_for_each_entry_safe(ema, tmp, &dst->ema_list, ema_list)
2148                 fc_exch_mgr_del(ema);
2149         return -ENOMEM;
2150 }
2151
2152 /**
2153  * fc_exch_mgr_alloc() - Allocate an exchange manager
2154  * @lport:   The local port that the new EM will be associated with
2155  * @class:   The default FC class for new exchanges
2156  * @min_xid: The minimum XID for exchanges from the new EM
2157  * @max_xid: The maximum XID for exchanges from the new EM
2158  * @match:   The match routine for the new EM
2159  */
2160 struct fc_exch_mgr *fc_exch_mgr_alloc(struct fc_lport *lport,
2161                                       enum fc_class class,
2162                                       u16 min_xid, u16 max_xid,
2163                                       bool (*match)(struct fc_frame *))
2164 {
2165         struct fc_exch_mgr *mp;
2166         u16 pool_exch_range;
2167         size_t pool_size;
2168         unsigned int cpu;
2169         struct fc_exch_pool *pool;
2170
2171         if (max_xid <= min_xid || max_xid == FC_XID_UNKNOWN ||
2172             (min_xid & fc_cpu_mask) != 0) {
2173                 FC_LPORT_DBG(lport, "Invalid min_xid 0x:%x and max_xid 0x:%x\n",
2174                              min_xid, max_xid);
2175                 return NULL;
2176         }
2177
2178         /*
2179          * allocate memory for EM
2180          */
2181         mp = kzalloc(sizeof(struct fc_exch_mgr), GFP_ATOMIC);
2182         if (!mp)
2183                 return NULL;
2184
2185         mp->class = class;
2186         /* adjust em exch xid range for offload */
2187         mp->min_xid = min_xid;
2188         mp->max_xid = max_xid;
2189
2190         mp->ep_pool = mempool_create_slab_pool(2, fc_em_cachep);
2191         if (!mp->ep_pool)
2192                 goto free_mp;
2193
2194         /*
2195          * Setup per cpu exch pool with entire exchange id range equally
2196          * divided across all cpus. The exch pointers array memory is
2197          * allocated for exch range per pool.
2198          */
2199         pool_exch_range = (mp->max_xid - mp->min_xid + 1) / (fc_cpu_mask + 1);
2200         mp->pool_max_index = pool_exch_range - 1;
2201
2202         /*
2203          * Allocate and initialize per cpu exch pool
2204          */
2205         pool_size = sizeof(*pool) + pool_exch_range * sizeof(struct fc_exch *);
2206         mp->pool = __alloc_percpu(pool_size, __alignof__(struct fc_exch_pool));
2207         if (!mp->pool)
2208                 goto free_mempool;
2209         for_each_possible_cpu(cpu) {
2210                 pool = per_cpu_ptr(mp->pool, cpu);
2211                 pool->left = FC_XID_UNKNOWN;
2212                 pool->right = FC_XID_UNKNOWN;
2213                 spin_lock_init(&pool->lock);
2214                 INIT_LIST_HEAD(&pool->ex_list);
2215         }
2216
2217         kref_init(&mp->kref);
2218         if (!fc_exch_mgr_add(lport, mp, match)) {
2219                 free_percpu(mp->pool);
2220                 goto free_mempool;
2221         }
2222
2223         /*
2224          * Above kref_init() sets mp->kref to 1 and then
2225          * call to fc_exch_mgr_add incremented mp->kref again,
2226          * so adjust that extra increment.
2227          */
2228         kref_put(&mp->kref, fc_exch_mgr_destroy);
2229         return mp;
2230
2231 free_mempool:
2232         mempool_destroy(mp->ep_pool);
2233 free_mp:
2234         kfree(mp);
2235         return NULL;
2236 }
2237 EXPORT_SYMBOL(fc_exch_mgr_alloc);
2238
2239 /**
2240  * fc_exch_mgr_free() - Free all exchange managers on a local port
2241  * @lport: The local port whose EMs are to be freed
2242  */
2243 void fc_exch_mgr_free(struct fc_lport *lport)
2244 {
2245         struct fc_exch_mgr_anchor *ema, *next;
2246
2247         flush_workqueue(fc_exch_workqueue);
2248         list_for_each_entry_safe(ema, next, &lport->ema_list, ema_list)
2249                 fc_exch_mgr_del(ema);
2250 }
2251 EXPORT_SYMBOL(fc_exch_mgr_free);
2252
2253 /**
2254  * fc_exch_recv() - Handler for received frames
2255  * @lport: The local port the frame was received on
2256  * @fp:    The received frame
2257  */
2258 void fc_exch_recv(struct fc_lport *lport, struct fc_frame *fp)
2259 {
2260         struct fc_frame_header *fh = fc_frame_header_get(fp);
2261         struct fc_exch_mgr_anchor *ema;
2262         u32 f_ctl, found = 0;
2263         u16 oxid;
2264
2265         /* lport lock ? */
2266         if (!lport || lport->state == LPORT_ST_DISABLED) {
2267                 FC_LPORT_DBG(lport, "Receiving frames for an lport that "
2268                              "has not been initialized correctly\n");
2269                 fc_frame_free(fp);
2270                 return;
2271         }
2272
2273         f_ctl = ntoh24(fh->fh_f_ctl);
2274         oxid = ntohs(fh->fh_ox_id);
2275         if (f_ctl & FC_FC_EX_CTX) {
2276                 list_for_each_entry(ema, &lport->ema_list, ema_list) {
2277                         if ((oxid >= ema->mp->min_xid) &&
2278                             (oxid <= ema->mp->max_xid)) {
2279                                 found = 1;
2280                                 break;
2281                         }
2282                 }
2283
2284                 if (!found) {
2285                         FC_LPORT_DBG(lport, "Received response for out "
2286                                      "of range oxid:%hx\n", oxid);
2287                         fc_frame_free(fp);
2288                         return;
2289                 }
2290         } else
2291                 ema = list_entry(lport->ema_list.prev, typeof(*ema), ema_list);
2292
2293         /*
2294          * If frame is marked invalid, just drop it.
2295          */
2296         switch (fr_eof(fp)) {
2297         case FC_EOF_T:
2298                 if (f_ctl & FC_FC_END_SEQ)
2299                         skb_trim(fp_skb(fp), fr_len(fp) - FC_FC_FILL(f_ctl));
2300                 /* fall through */
2301         case FC_EOF_N:
2302                 if (fh->fh_type == FC_TYPE_BLS)
2303                         fc_exch_recv_bls(ema->mp, fp);
2304                 else if ((f_ctl & (FC_FC_EX_CTX | FC_FC_SEQ_CTX)) ==
2305                          FC_FC_EX_CTX)
2306                         fc_exch_recv_seq_resp(ema->mp, fp);
2307                 else if (f_ctl & FC_FC_SEQ_CTX)
2308                         fc_exch_recv_resp(ema->mp, fp);
2309                 else    /* no EX_CTX and no SEQ_CTX */
2310                         fc_exch_recv_req(lport, ema->mp, fp);
2311                 break;
2312         default:
2313                 FC_LPORT_DBG(lport, "dropping invalid frame (eof %x)",
2314                              fr_eof(fp));
2315                 fc_frame_free(fp);
2316         }
2317 }
2318 EXPORT_SYMBOL(fc_exch_recv);
2319
2320 /**
2321  * fc_exch_init() - Initialize the exchange layer for a local port
2322  * @lport: The local port to initialize the exchange layer for
2323  */
2324 int fc_exch_init(struct fc_lport *lport)
2325 {
2326         if (!lport->tt.seq_start_next)
2327                 lport->tt.seq_start_next = fc_seq_start_next;
2328
2329         if (!lport->tt.exch_seq_send)
2330                 lport->tt.exch_seq_send = fc_exch_seq_send;
2331
2332         if (!lport->tt.seq_send)
2333                 lport->tt.seq_send = fc_seq_send;
2334
2335         if (!lport->tt.seq_els_rsp_send)
2336                 lport->tt.seq_els_rsp_send = fc_seq_els_rsp_send;
2337
2338         if (!lport->tt.exch_done)
2339                 lport->tt.exch_done = fc_exch_done;
2340
2341         if (!lport->tt.exch_mgr_reset)
2342                 lport->tt.exch_mgr_reset = fc_exch_mgr_reset;
2343
2344         if (!lport->tt.seq_exch_abort)
2345                 lport->tt.seq_exch_abort = fc_seq_exch_abort;
2346
2347         if (!lport->tt.seq_assign)
2348                 lport->tt.seq_assign = fc_seq_assign;
2349
2350         return 0;
2351 }
2352 EXPORT_SYMBOL(fc_exch_init);
2353
2354 /**
2355  * fc_setup_exch_mgr() - Setup an exchange manager
2356  */
2357 int fc_setup_exch_mgr()
2358 {
2359         fc_em_cachep = kmem_cache_create("libfc_em", sizeof(struct fc_exch),
2360                                          0, SLAB_HWCACHE_ALIGN, NULL);
2361         if (!fc_em_cachep)
2362                 return -ENOMEM;
2363
2364         /*
2365          * Initialize fc_cpu_mask and fc_cpu_order. The
2366          * fc_cpu_mask is set for nr_cpu_ids rounded up
2367          * to order of 2's * power and order is stored
2368          * in fc_cpu_order as this is later required in
2369          * mapping between an exch id and exch array index
2370          * in per cpu exch pool.
2371          *
2372          * This round up is required to align fc_cpu_mask
2373          * to exchange id's lower bits such that all incoming
2374          * frames of an exchange gets delivered to the same
2375          * cpu on which exchange originated by simple bitwise
2376          * AND operation between fc_cpu_mask and exchange id.
2377          */
2378         fc_cpu_mask = 1;
2379         fc_cpu_order = 0;
2380         while (fc_cpu_mask < nr_cpu_ids) {
2381                 fc_cpu_mask <<= 1;
2382                 fc_cpu_order++;
2383         }
2384         fc_cpu_mask--;
2385
2386         fc_exch_workqueue = create_singlethread_workqueue("fc_exch_workqueue");
2387         if (!fc_exch_workqueue)
2388                 return -ENOMEM;
2389         return 0;
2390 }
2391
2392 /**
2393  * fc_destroy_exch_mgr() - Destroy an exchange manager
2394  */
2395 void fc_destroy_exch_mgr()
2396 {
2397         destroy_workqueue(fc_exch_workqueue);
2398         kmem_cache_destroy(fc_em_cachep);
2399 }