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 static 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 * Set the response handler for the exchange associated with a sequence. 563 */ 564 static void fc_seq_set_resp(struct fc_seq *sp, 565 void (*resp)(struct fc_seq *, struct fc_frame *, 566 void *), 567 void *arg) 568 { 569 struct fc_exch *ep = fc_seq_exch(sp); 570 571 spin_lock_bh(&ep->ex_lock); 572 ep->resp = resp; 573 ep->arg = arg; 574 spin_unlock_bh(&ep->ex_lock); 575 } 576 577 /** 578 * fc_seq_exch_abort() - Abort an exchange and sequence 579 * @req_sp: The sequence to be aborted 580 * @timer_msec: The period of time to wait before aborting 581 * 582 * Generally called because of a timeout or an abort from the upper layer. 583 */ 584 static int fc_seq_exch_abort(const struct fc_seq *req_sp, 585 unsigned int timer_msec) 586 { 587 struct fc_seq *sp; 588 struct fc_exch *ep; 589 struct fc_frame *fp; 590 int error; 591 592 ep = fc_seq_exch(req_sp); 593 594 spin_lock_bh(&ep->ex_lock); 595 if (ep->esb_stat & (ESB_ST_COMPLETE | ESB_ST_ABNORMAL) || 596 ep->state & (FC_EX_DONE | FC_EX_RST_CLEANUP)) { 597 spin_unlock_bh(&ep->ex_lock); 598 return -ENXIO; 599 } 600 601 /* 602 * Send the abort on a new sequence if possible. 603 */ 604 sp = fc_seq_start_next_locked(&ep->seq); 605 if (!sp) { 606 spin_unlock_bh(&ep->ex_lock); 607 return -ENOMEM; 608 } 609 610 ep->esb_stat |= ESB_ST_SEQ_INIT | ESB_ST_ABNORMAL; 611 if (timer_msec) 612 fc_exch_timer_set_locked(ep, timer_msec); 613 spin_unlock_bh(&ep->ex_lock); 614 615 /* 616 * If not logged into the fabric, don't send ABTS but leave 617 * sequence active until next timeout. 618 */ 619 if (!ep->sid) 620 return 0; 621 622 /* 623 * Send an abort for the sequence that timed out. 624 */ 625 fp = fc_frame_alloc(ep->lp, 0); 626 if (fp) { 627 fc_fill_fc_hdr(fp, FC_RCTL_BA_ABTS, ep->did, ep->sid, 628 FC_TYPE_BLS, FC_FC_END_SEQ | FC_FC_SEQ_INIT, 0); 629 error = fc_seq_send(ep->lp, sp, fp); 630 } else 631 error = -ENOBUFS; 632 return error; 633 } 634 635 /** 636 * fc_exch_timeout() - Handle exchange timer expiration 637 * @work: The work_struct identifying the exchange that timed out 638 */ 639 static void fc_exch_timeout(struct work_struct *work) 640 { 641 struct fc_exch *ep = container_of(work, struct fc_exch, 642 timeout_work.work); 643 struct fc_seq *sp = &ep->seq; 644 void (*resp)(struct fc_seq *, struct fc_frame *fp, void *arg); 645 void *arg; 646 u32 e_stat; 647 int rc = 1; 648 649 FC_EXCH_DBG(ep, "Exchange timed out\n"); 650 651 spin_lock_bh(&ep->ex_lock); 652 if (ep->state & (FC_EX_RST_CLEANUP | FC_EX_DONE)) 653 goto unlock; 654 655 e_stat = ep->esb_stat; 656 if (e_stat & ESB_ST_COMPLETE) { 657 ep->esb_stat = e_stat & ~ESB_ST_REC_QUAL; 658 spin_unlock_bh(&ep->ex_lock); 659 if (e_stat & ESB_ST_REC_QUAL) 660 fc_exch_rrq(ep); 661 goto done; 662 } else { 663 resp = ep->resp; 664 arg = ep->arg; 665 ep->resp = NULL; 666 if (e_stat & ESB_ST_ABNORMAL) 667 rc = fc_exch_done_locked(ep); 668 spin_unlock_bh(&ep->ex_lock); 669 if (!rc) 670 fc_exch_delete(ep); 671 if (resp) 672 resp(sp, ERR_PTR(-FC_EX_TIMEOUT), arg); 673 fc_seq_exch_abort(sp, 2 * ep->r_a_tov); 674 goto done; 675 } 676 unlock: 677 spin_unlock_bh(&ep->ex_lock); 678 done: 679 /* 680 * This release matches the hold taken when the timer was set. 681 */ 682 fc_exch_release(ep); 683 } 684 685 /** 686 * fc_exch_em_alloc() - Allocate an exchange from a specified EM. 687 * @lport: The local port that the exchange is for 688 * @mp: The exchange manager that will allocate the exchange 689 * 690 * Returns pointer to allocated fc_exch with exch lock held. 691 */ 692 static struct fc_exch *fc_exch_em_alloc(struct fc_lport *lport, 693 struct fc_exch_mgr *mp) 694 { 695 struct fc_exch *ep; 696 unsigned int cpu; 697 u16 index; 698 struct fc_exch_pool *pool; 699 700 /* allocate memory for exchange */ 701 ep = mempool_alloc(mp->ep_pool, GFP_ATOMIC); 702 if (!ep) { 703 atomic_inc(&mp->stats.no_free_exch); 704 goto out; 705 } 706 memset(ep, 0, sizeof(*ep)); 707 708 cpu = get_cpu(); 709 pool = per_cpu_ptr(mp->pool, cpu); 710 spin_lock_bh(&pool->lock); 711 put_cpu(); 712 713 /* peek cache of free slot */ 714 if (pool->left != FC_XID_UNKNOWN) { 715 index = pool->left; 716 pool->left = FC_XID_UNKNOWN; 717 goto hit; 718 } 719 if (pool->right != FC_XID_UNKNOWN) { 720 index = pool->right; 721 pool->right = FC_XID_UNKNOWN; 722 goto hit; 723 } 724 725 index = pool->next_index; 726 /* allocate new exch from pool */ 727 while (fc_exch_ptr_get(pool, index)) { 728 index = index == mp->pool_max_index ? 0 : index + 1; 729 if (index == pool->next_index) 730 goto err; 731 } 732 pool->next_index = index == mp->pool_max_index ? 0 : index + 1; 733 hit: 734 fc_exch_hold(ep); /* hold for exch in mp */ 735 spin_lock_init(&ep->ex_lock); 736 /* 737 * Hold exch lock for caller to prevent fc_exch_reset() 738 * from releasing exch while fc_exch_alloc() caller is 739 * still working on exch. 740 */ 741 spin_lock_bh(&ep->ex_lock); 742 743 fc_exch_ptr_set(pool, index, ep); 744 list_add_tail(&ep->ex_list, &pool->ex_list); 745 fc_seq_alloc(ep, ep->seq_id++); 746 pool->total_exches++; 747 spin_unlock_bh(&pool->lock); 748 749 /* 750 * update exchange 751 */ 752 ep->oxid = ep->xid = (index << fc_cpu_order | cpu) + mp->min_xid; 753 ep->em = mp; 754 ep->pool = pool; 755 ep->lp = lport; 756 ep->f_ctl = FC_FC_FIRST_SEQ; /* next seq is first seq */ 757 ep->rxid = FC_XID_UNKNOWN; 758 ep->class = mp->class; 759 INIT_DELAYED_WORK(&ep->timeout_work, fc_exch_timeout); 760 out: 761 return ep; 762 err: 763 spin_unlock_bh(&pool->lock); 764 atomic_inc(&mp->stats.no_free_exch_xid); 765 mempool_free(ep, mp->ep_pool); 766 return NULL; 767 } 768 769 /** 770 * fc_exch_alloc() - Allocate an exchange from an EM on a 771 * local port's list of EMs. 772 * @lport: The local port that will own the exchange 773 * @fp: The FC frame that the exchange will be for 774 * 775 * This function walks the list of exchange manager(EM) 776 * anchors to select an EM for a new exchange allocation. The 777 * EM is selected when a NULL match function pointer is encountered 778 * or when a call to a match function returns true. 779 */ 780 static inline struct fc_exch *fc_exch_alloc(struct fc_lport *lport, 781 struct fc_frame *fp) 782 { 783 struct fc_exch_mgr_anchor *ema; 784 785 list_for_each_entry(ema, &lport->ema_list, ema_list) 786 if (!ema->match || ema->match(fp)) 787 return fc_exch_em_alloc(lport, ema->mp); 788 return NULL; 789 } 790 791 /** 792 * fc_exch_find() - Lookup and hold an exchange 793 * @mp: The exchange manager to lookup the exchange from 794 * @xid: The XID of the exchange to look up 795 */ 796 static struct fc_exch *fc_exch_find(struct fc_exch_mgr *mp, u16 xid) 797 { 798 struct fc_exch_pool *pool; 799 struct fc_exch *ep = NULL; 800 801 if ((xid >= mp->min_xid) && (xid <= mp->max_xid)) { 802 pool = per_cpu_ptr(mp->pool, xid & fc_cpu_mask); 803 spin_lock_bh(&pool->lock); 804 ep = fc_exch_ptr_get(pool, (xid - mp->min_xid) >> fc_cpu_order); 805 if (ep) { 806 fc_exch_hold(ep); 807 WARN_ON(ep->xid != xid); 808 } 809 spin_unlock_bh(&pool->lock); 810 } 811 return ep; 812 } 813 814 815 /** 816 * fc_exch_done() - Indicate that an exchange/sequence tuple is complete and 817 * the memory allocated for the related objects may be freed. 818 * @sp: The sequence that has completed 819 */ 820 static void fc_exch_done(struct fc_seq *sp) 821 { 822 struct fc_exch *ep = fc_seq_exch(sp); 823 int rc; 824 825 spin_lock_bh(&ep->ex_lock); 826 rc = fc_exch_done_locked(ep); 827 spin_unlock_bh(&ep->ex_lock); 828 if (!rc) 829 fc_exch_delete(ep); 830 } 831 832 /** 833 * fc_exch_resp() - Allocate a new exchange for a response frame 834 * @lport: The local port that the exchange was for 835 * @mp: The exchange manager to allocate the exchange from 836 * @fp: The response frame 837 * 838 * Sets the responder ID in the frame header. 839 */ 840 static struct fc_exch *fc_exch_resp(struct fc_lport *lport, 841 struct fc_exch_mgr *mp, 842 struct fc_frame *fp) 843 { 844 struct fc_exch *ep; 845 struct fc_frame_header *fh; 846 847 ep = fc_exch_alloc(lport, fp); 848 if (ep) { 849 ep->class = fc_frame_class(fp); 850 851 /* 852 * Set EX_CTX indicating we're responding on this exchange. 853 */ 854 ep->f_ctl |= FC_FC_EX_CTX; /* we're responding */ 855 ep->f_ctl &= ~FC_FC_FIRST_SEQ; /* not new */ 856 fh = fc_frame_header_get(fp); 857 ep->sid = ntoh24(fh->fh_d_id); 858 ep->did = ntoh24(fh->fh_s_id); 859 ep->oid = ep->did; 860 861 /* 862 * Allocated exchange has placed the XID in the 863 * originator field. Move it to the responder field, 864 * and set the originator XID from the frame. 865 */ 866 ep->rxid = ep->xid; 867 ep->oxid = ntohs(fh->fh_ox_id); 868 ep->esb_stat |= ESB_ST_RESP | ESB_ST_SEQ_INIT; 869 if ((ntoh24(fh->fh_f_ctl) & FC_FC_SEQ_INIT) == 0) 870 ep->esb_stat &= ~ESB_ST_SEQ_INIT; 871 872 fc_exch_hold(ep); /* hold for caller */ 873 spin_unlock_bh(&ep->ex_lock); /* lock from fc_exch_alloc */ 874 } 875 return ep; 876 } 877 878 /** 879 * fc_seq_lookup_recip() - Find a sequence where the other end 880 * originated the sequence 881 * @lport: The local port that the frame was sent to 882 * @mp: The Exchange Manager to lookup the exchange from 883 * @fp: The frame associated with the sequence we're looking for 884 * 885 * If fc_pf_rjt_reason is FC_RJT_NONE then this function will have a hold 886 * on the ep that should be released by the caller. 887 */ 888 static enum fc_pf_rjt_reason fc_seq_lookup_recip(struct fc_lport *lport, 889 struct fc_exch_mgr *mp, 890 struct fc_frame *fp) 891 { 892 struct fc_frame_header *fh = fc_frame_header_get(fp); 893 struct fc_exch *ep = NULL; 894 struct fc_seq *sp = NULL; 895 enum fc_pf_rjt_reason reject = FC_RJT_NONE; 896 u32 f_ctl; 897 u16 xid; 898 899 f_ctl = ntoh24(fh->fh_f_ctl); 900 WARN_ON((f_ctl & FC_FC_SEQ_CTX) != 0); 901 902 /* 903 * Lookup or create the exchange if we will be creating the sequence. 904 */ 905 if (f_ctl & FC_FC_EX_CTX) { 906 xid = ntohs(fh->fh_ox_id); /* we originated exch */ 907 ep = fc_exch_find(mp, xid); 908 if (!ep) { 909 atomic_inc(&mp->stats.xid_not_found); 910 reject = FC_RJT_OX_ID; 911 goto out; 912 } 913 if (ep->rxid == FC_XID_UNKNOWN) 914 ep->rxid = ntohs(fh->fh_rx_id); 915 else if (ep->rxid != ntohs(fh->fh_rx_id)) { 916 reject = FC_RJT_OX_ID; 917 goto rel; 918 } 919 } else { 920 xid = ntohs(fh->fh_rx_id); /* we are the responder */ 921 922 /* 923 * Special case for MDS issuing an ELS TEST with a 924 * bad rxid of 0. 925 * XXX take this out once we do the proper reject. 926 */ 927 if (xid == 0 && fh->fh_r_ctl == FC_RCTL_ELS_REQ && 928 fc_frame_payload_op(fp) == ELS_TEST) { 929 fh->fh_rx_id = htons(FC_XID_UNKNOWN); 930 xid = FC_XID_UNKNOWN; 931 } 932 933 /* 934 * new sequence - find the exchange 935 */ 936 ep = fc_exch_find(mp, xid); 937 if ((f_ctl & FC_FC_FIRST_SEQ) && fc_sof_is_init(fr_sof(fp))) { 938 if (ep) { 939 atomic_inc(&mp->stats.xid_busy); 940 reject = FC_RJT_RX_ID; 941 goto rel; 942 } 943 ep = fc_exch_resp(lport, mp, fp); 944 if (!ep) { 945 reject = FC_RJT_EXCH_EST; /* XXX */ 946 goto out; 947 } 948 xid = ep->xid; /* get our XID */ 949 } else if (!ep) { 950 atomic_inc(&mp->stats.xid_not_found); 951 reject = FC_RJT_RX_ID; /* XID not found */ 952 goto out; 953 } 954 } 955 956 /* 957 * At this point, we have the exchange held. 958 * Find or create the sequence. 959 */ 960 if (fc_sof_is_init(fr_sof(fp))) { 961 sp = &ep->seq; 962 sp->ssb_stat |= SSB_ST_RESP; 963 sp->id = fh->fh_seq_id; 964 } else { 965 sp = &ep->seq; 966 if (sp->id != fh->fh_seq_id) { 967 atomic_inc(&mp->stats.seq_not_found); 968 reject = FC_RJT_SEQ_ID; /* sequence/exch should exist */ 969 goto rel; 970 } 971 } 972 WARN_ON(ep != fc_seq_exch(sp)); 973 974 if (f_ctl & FC_FC_SEQ_INIT) 975 ep->esb_stat |= ESB_ST_SEQ_INIT; 976 977 fr_seq(fp) = sp; 978 out: 979 return reject; 980 rel: 981 fc_exch_done(&ep->seq); 982 fc_exch_release(ep); /* hold from fc_exch_find/fc_exch_resp */ 983 return reject; 984 } 985 986 /** 987 * fc_seq_lookup_orig() - Find a sequence where this end 988 * originated the sequence 989 * @mp: The Exchange Manager to lookup the exchange from 990 * @fp: The frame associated with the sequence we're looking for 991 * 992 * Does not hold the sequence for the caller. 993 */ 994 static struct fc_seq *fc_seq_lookup_orig(struct fc_exch_mgr *mp, 995 struct fc_frame *fp) 996 { 997 struct fc_frame_header *fh = fc_frame_header_get(fp); 998 struct fc_exch *ep; 999 struct fc_seq *sp = NULL; 1000 u32 f_ctl; 1001 u16 xid; 1002 1003 f_ctl = ntoh24(fh->fh_f_ctl); 1004 WARN_ON((f_ctl & FC_FC_SEQ_CTX) != FC_FC_SEQ_CTX); 1005 xid = ntohs((f_ctl & FC_FC_EX_CTX) ? fh->fh_ox_id : fh->fh_rx_id); 1006 ep = fc_exch_find(mp, xid); 1007 if (!ep) 1008 return NULL; 1009 if (ep->seq.id == fh->fh_seq_id) { 1010 /* 1011 * Save the RX_ID if we didn't previously know it. 1012 */ 1013 sp = &ep->seq; 1014 if ((f_ctl & FC_FC_EX_CTX) != 0 && 1015 ep->rxid == FC_XID_UNKNOWN) { 1016 ep->rxid = ntohs(fh->fh_rx_id); 1017 } 1018 } 1019 fc_exch_release(ep); 1020 return sp; 1021 } 1022 1023 /** 1024 * fc_exch_set_addr() - Set the source and destination IDs for an exchange 1025 * @ep: The exchange to set the addresses for 1026 * @orig_id: The originator's ID 1027 * @resp_id: The responder's ID 1028 * 1029 * Note this must be done before the first sequence of the exchange is sent. 1030 */ 1031 static void fc_exch_set_addr(struct fc_exch *ep, 1032 u32 orig_id, u32 resp_id) 1033 { 1034 ep->oid = orig_id; 1035 if (ep->esb_stat & ESB_ST_RESP) { 1036 ep->sid = resp_id; 1037 ep->did = orig_id; 1038 } else { 1039 ep->sid = orig_id; 1040 ep->did = resp_id; 1041 } 1042 } 1043 1044 /** 1045 * fc_seq_els_rsp_send() - Send an ELS response using infomation from 1046 * the existing sequence/exchange. 1047 * @fp: The received frame 1048 * @els_cmd: The ELS command to be sent 1049 * @els_data: The ELS data to be sent 1050 * 1051 * The received frame is not freed. 1052 */ 1053 static void fc_seq_els_rsp_send(struct fc_frame *fp, enum fc_els_cmd els_cmd, 1054 struct fc_seq_els_data *els_data) 1055 { 1056 switch (els_cmd) { 1057 case ELS_LS_RJT: 1058 fc_seq_ls_rjt(fp, els_data->reason, els_data->explan); 1059 break; 1060 case ELS_LS_ACC: 1061 fc_seq_ls_acc(fp); 1062 break; 1063 case ELS_RRQ: 1064 fc_exch_els_rrq(fp); 1065 break; 1066 case ELS_REC: 1067 fc_exch_els_rec(fp); 1068 break; 1069 default: 1070 FC_LPORT_DBG(fr_dev(fp), "Invalid ELS CMD:%x\n", els_cmd); 1071 } 1072 } 1073 1074 /** 1075 * fc_seq_send_last() - Send a sequence that is the last in the exchange 1076 * @sp: The sequence that is to be sent 1077 * @fp: The frame that will be sent on the sequence 1078 * @rctl: The R_CTL information to be sent 1079 * @fh_type: The frame header type 1080 */ 1081 static void fc_seq_send_last(struct fc_seq *sp, struct fc_frame *fp, 1082 enum fc_rctl rctl, enum fc_fh_type fh_type) 1083 { 1084 u32 f_ctl; 1085 struct fc_exch *ep = fc_seq_exch(sp); 1086 1087 f_ctl = FC_FC_LAST_SEQ | FC_FC_END_SEQ | FC_FC_SEQ_INIT; 1088 f_ctl |= ep->f_ctl; 1089 fc_fill_fc_hdr(fp, rctl, ep->did, ep->sid, fh_type, f_ctl, 0); 1090 fc_seq_send(ep->lp, sp, fp); 1091 } 1092 1093 /** 1094 * fc_seq_send_ack() - Send an acknowledgement that we've received a frame 1095 * @sp: The sequence to send the ACK on 1096 * @rx_fp: The received frame that is being acknoledged 1097 * 1098 * Send ACK_1 (or equiv.) indicating we received something. 1099 */ 1100 static void fc_seq_send_ack(struct fc_seq *sp, const struct fc_frame *rx_fp) 1101 { 1102 struct fc_frame *fp; 1103 struct fc_frame_header *rx_fh; 1104 struct fc_frame_header *fh; 1105 struct fc_exch *ep = fc_seq_exch(sp); 1106 struct fc_lport *lport = ep->lp; 1107 unsigned int f_ctl; 1108 1109 /* 1110 * Don't send ACKs for class 3. 1111 */ 1112 if (fc_sof_needs_ack(fr_sof(rx_fp))) { 1113 fp = fc_frame_alloc(lport, 0); 1114 if (!fp) 1115 return; 1116 1117 fh = fc_frame_header_get(fp); 1118 fh->fh_r_ctl = FC_RCTL_ACK_1; 1119 fh->fh_type = FC_TYPE_BLS; 1120 1121 /* 1122 * Form f_ctl by inverting EX_CTX and SEQ_CTX (bits 23, 22). 1123 * Echo FIRST_SEQ, LAST_SEQ, END_SEQ, END_CONN, SEQ_INIT. 1124 * Bits 9-8 are meaningful (retransmitted or unidirectional). 1125 * Last ACK uses bits 7-6 (continue sequence), 1126 * bits 5-4 are meaningful (what kind of ACK to use). 1127 */ 1128 rx_fh = fc_frame_header_get(rx_fp); 1129 f_ctl = ntoh24(rx_fh->fh_f_ctl); 1130 f_ctl &= FC_FC_EX_CTX | FC_FC_SEQ_CTX | 1131 FC_FC_FIRST_SEQ | FC_FC_LAST_SEQ | 1132 FC_FC_END_SEQ | FC_FC_END_CONN | FC_FC_SEQ_INIT | 1133 FC_FC_RETX_SEQ | FC_FC_UNI_TX; 1134 f_ctl ^= FC_FC_EX_CTX | FC_FC_SEQ_CTX; 1135 hton24(fh->fh_f_ctl, f_ctl); 1136 1137 fc_exch_setup_hdr(ep, fp, f_ctl); 1138 fh->fh_seq_id = rx_fh->fh_seq_id; 1139 fh->fh_seq_cnt = rx_fh->fh_seq_cnt; 1140 fh->fh_parm_offset = htonl(1); /* ack single frame */ 1141 1142 fr_sof(fp) = fr_sof(rx_fp); 1143 if (f_ctl & FC_FC_END_SEQ) 1144 fr_eof(fp) = FC_EOF_T; 1145 else 1146 fr_eof(fp) = FC_EOF_N; 1147 1148 lport->tt.frame_send(lport, fp); 1149 } 1150 } 1151 1152 /** 1153 * fc_exch_send_ba_rjt() - Send BLS Reject 1154 * @rx_fp: The frame being rejected 1155 * @reason: The reason the frame is being rejected 1156 * @explan: The explaination for the rejection 1157 * 1158 * This is for rejecting BA_ABTS only. 1159 */ 1160 static void fc_exch_send_ba_rjt(struct fc_frame *rx_fp, 1161 enum fc_ba_rjt_reason reason, 1162 enum fc_ba_rjt_explan explan) 1163 { 1164 struct fc_frame *fp; 1165 struct fc_frame_header *rx_fh; 1166 struct fc_frame_header *fh; 1167 struct fc_ba_rjt *rp; 1168 struct fc_lport *lport; 1169 unsigned int f_ctl; 1170 1171 lport = fr_dev(rx_fp); 1172 fp = fc_frame_alloc(lport, sizeof(*rp)); 1173 if (!fp) 1174 return; 1175 fh = fc_frame_header_get(fp); 1176 rx_fh = fc_frame_header_get(rx_fp); 1177 1178 memset(fh, 0, sizeof(*fh) + sizeof(*rp)); 1179 1180 rp = fc_frame_payload_get(fp, sizeof(*rp)); 1181 rp->br_reason = reason; 1182 rp->br_explan = explan; 1183 1184 /* 1185 * seq_id, cs_ctl, df_ctl and param/offset are zero. 1186 */ 1187 memcpy(fh->fh_s_id, rx_fh->fh_d_id, 3); 1188 memcpy(fh->fh_d_id, rx_fh->fh_s_id, 3); 1189 fh->fh_ox_id = rx_fh->fh_ox_id; 1190 fh->fh_rx_id = rx_fh->fh_rx_id; 1191 fh->fh_seq_cnt = rx_fh->fh_seq_cnt; 1192 fh->fh_r_ctl = FC_RCTL_BA_RJT; 1193 fh->fh_type = FC_TYPE_BLS; 1194 1195 /* 1196 * Form f_ctl by inverting EX_CTX and SEQ_CTX (bits 23, 22). 1197 * Echo FIRST_SEQ, LAST_SEQ, END_SEQ, END_CONN, SEQ_INIT. 1198 * Bits 9-8 are meaningful (retransmitted or unidirectional). 1199 * Last ACK uses bits 7-6 (continue sequence), 1200 * bits 5-4 are meaningful (what kind of ACK to use). 1201 * Always set LAST_SEQ, END_SEQ. 1202 */ 1203 f_ctl = ntoh24(rx_fh->fh_f_ctl); 1204 f_ctl &= FC_FC_EX_CTX | FC_FC_SEQ_CTX | 1205 FC_FC_END_CONN | FC_FC_SEQ_INIT | 1206 FC_FC_RETX_SEQ | FC_FC_UNI_TX; 1207 f_ctl ^= FC_FC_EX_CTX | FC_FC_SEQ_CTX; 1208 f_ctl |= FC_FC_LAST_SEQ | FC_FC_END_SEQ; 1209 f_ctl &= ~FC_FC_FIRST_SEQ; 1210 hton24(fh->fh_f_ctl, f_ctl); 1211 1212 fr_sof(fp) = fc_sof_class(fr_sof(rx_fp)); 1213 fr_eof(fp) = FC_EOF_T; 1214 if (fc_sof_needs_ack(fr_sof(fp))) 1215 fr_eof(fp) = FC_EOF_N; 1216 1217 lport->tt.frame_send(lport, fp); 1218 } 1219 1220 /** 1221 * fc_exch_recv_abts() - Handle an incoming ABTS 1222 * @ep: The exchange the abort was on 1223 * @rx_fp: The ABTS frame 1224 * 1225 * This would be for target mode usually, but could be due to lost 1226 * FCP transfer ready, confirm or RRQ. We always handle this as an 1227 * exchange abort, ignoring the parameter. 1228 */ 1229 static void fc_exch_recv_abts(struct fc_exch *ep, struct fc_frame *rx_fp) 1230 { 1231 struct fc_frame *fp; 1232 struct fc_ba_acc *ap; 1233 struct fc_frame_header *fh; 1234 struct fc_seq *sp; 1235 1236 if (!ep) 1237 goto reject; 1238 spin_lock_bh(&ep->ex_lock); 1239 if (ep->esb_stat & ESB_ST_COMPLETE) { 1240 spin_unlock_bh(&ep->ex_lock); 1241 goto reject; 1242 } 1243 if (!(ep->esb_stat & ESB_ST_REC_QUAL)) 1244 fc_exch_hold(ep); /* hold for REC_QUAL */ 1245 ep->esb_stat |= ESB_ST_ABNORMAL | ESB_ST_REC_QUAL; 1246 fc_exch_timer_set_locked(ep, ep->r_a_tov); 1247 1248 fp = fc_frame_alloc(ep->lp, sizeof(*ap)); 1249 if (!fp) { 1250 spin_unlock_bh(&ep->ex_lock); 1251 goto free; 1252 } 1253 fh = fc_frame_header_get(fp); 1254 ap = fc_frame_payload_get(fp, sizeof(*ap)); 1255 memset(ap, 0, sizeof(*ap)); 1256 sp = &ep->seq; 1257 ap->ba_high_seq_cnt = htons(0xffff); 1258 if (sp->ssb_stat & SSB_ST_RESP) { 1259 ap->ba_seq_id = sp->id; 1260 ap->ba_seq_id_val = FC_BA_SEQ_ID_VAL; 1261 ap->ba_high_seq_cnt = fh->fh_seq_cnt; 1262 ap->ba_low_seq_cnt = htons(sp->cnt); 1263 } 1264 sp = fc_seq_start_next_locked(sp); 1265 spin_unlock_bh(&ep->ex_lock); 1266 fc_seq_send_last(sp, fp, FC_RCTL_BA_ACC, FC_TYPE_BLS); 1267 fc_frame_free(rx_fp); 1268 return; 1269 1270 reject: 1271 fc_exch_send_ba_rjt(rx_fp, FC_BA_RJT_UNABLE, FC_BA_RJT_INV_XID); 1272 free: 1273 fc_frame_free(rx_fp); 1274 } 1275 1276 /** 1277 * fc_seq_assign() - Assign exchange and sequence for incoming request 1278 * @lport: The local port that received the request 1279 * @fp: The request frame 1280 * 1281 * On success, the sequence pointer will be returned and also in fr_seq(@fp). 1282 * A reference will be held on the exchange/sequence for the caller, which 1283 * must call fc_seq_release(). 1284 */ 1285 static struct fc_seq *fc_seq_assign(struct fc_lport *lport, struct fc_frame *fp) 1286 { 1287 struct fc_exch_mgr_anchor *ema; 1288 1289 WARN_ON(lport != fr_dev(fp)); 1290 WARN_ON(fr_seq(fp)); 1291 fr_seq(fp) = NULL; 1292 1293 list_for_each_entry(ema, &lport->ema_list, ema_list) 1294 if ((!ema->match || ema->match(fp)) && 1295 fc_seq_lookup_recip(lport, ema->mp, fp) == FC_RJT_NONE) 1296 break; 1297 return fr_seq(fp); 1298 } 1299 1300 /** 1301 * fc_seq_release() - Release the hold 1302 * @sp: The sequence. 1303 */ 1304 static void fc_seq_release(struct fc_seq *sp) 1305 { 1306 fc_exch_release(fc_seq_exch(sp)); 1307 } 1308 1309 /** 1310 * fc_exch_recv_req() - Handler for an incoming request 1311 * @lport: The local port that received the request 1312 * @mp: The EM that the exchange is on 1313 * @fp: The request frame 1314 * 1315 * This is used when the other end is originating the exchange 1316 * and the sequence. 1317 */ 1318 static void fc_exch_recv_req(struct fc_lport *lport, struct fc_exch_mgr *mp, 1319 struct fc_frame *fp) 1320 { 1321 struct fc_frame_header *fh = fc_frame_header_get(fp); 1322 struct fc_seq *sp = NULL; 1323 struct fc_exch *ep = NULL; 1324 enum fc_pf_rjt_reason reject; 1325 1326 /* We can have the wrong fc_lport at this point with NPIV, which is a 1327 * problem now that we know a new exchange needs to be allocated 1328 */ 1329 lport = fc_vport_id_lookup(lport, ntoh24(fh->fh_d_id)); 1330 if (!lport) { 1331 fc_frame_free(fp); 1332 return; 1333 } 1334 fr_dev(fp) = lport; 1335 1336 BUG_ON(fr_seq(fp)); /* XXX remove later */ 1337 1338 /* 1339 * If the RX_ID is 0xffff, don't allocate an exchange. 1340 * The upper-level protocol may request one later, if needed. 1341 */ 1342 if (fh->fh_rx_id == htons(FC_XID_UNKNOWN)) 1343 return lport->tt.lport_recv(lport, fp); 1344 1345 reject = fc_seq_lookup_recip(lport, mp, fp); 1346 if (reject == FC_RJT_NONE) { 1347 sp = fr_seq(fp); /* sequence will be held */ 1348 ep = fc_seq_exch(sp); 1349 fc_seq_send_ack(sp, fp); 1350 ep->encaps = fr_encaps(fp); 1351 1352 /* 1353 * Call the receive function. 1354 * 1355 * The receive function may allocate a new sequence 1356 * over the old one, so we shouldn't change the 1357 * sequence after this. 1358 * 1359 * The frame will be freed by the receive function. 1360 * If new exch resp handler is valid then call that 1361 * first. 1362 */ 1363 if (ep->resp) 1364 ep->resp(sp, fp, ep->arg); 1365 else 1366 lport->tt.lport_recv(lport, fp); 1367 fc_exch_release(ep); /* release from lookup */ 1368 } else { 1369 FC_LPORT_DBG(lport, "exch/seq lookup failed: reject %x\n", 1370 reject); 1371 fc_frame_free(fp); 1372 } 1373 } 1374 1375 /** 1376 * fc_exch_recv_seq_resp() - Handler for an incoming response where the other 1377 * end is the originator of the sequence that is a 1378 * response to our initial exchange 1379 * @mp: The EM that the exchange is on 1380 * @fp: The response frame 1381 */ 1382 static void fc_exch_recv_seq_resp(struct fc_exch_mgr *mp, struct fc_frame *fp) 1383 { 1384 struct fc_frame_header *fh = fc_frame_header_get(fp); 1385 struct fc_seq *sp; 1386 struct fc_exch *ep; 1387 enum fc_sof sof; 1388 u32 f_ctl; 1389 void (*resp)(struct fc_seq *, struct fc_frame *fp, void *arg); 1390 void *ex_resp_arg; 1391 int rc; 1392 1393 ep = fc_exch_find(mp, ntohs(fh->fh_ox_id)); 1394 if (!ep) { 1395 atomic_inc(&mp->stats.xid_not_found); 1396 goto out; 1397 } 1398 if (ep->esb_stat & ESB_ST_COMPLETE) { 1399 atomic_inc(&mp->stats.xid_not_found); 1400 goto rel; 1401 } 1402 if (ep->rxid == FC_XID_UNKNOWN) 1403 ep->rxid = ntohs(fh->fh_rx_id); 1404 if (ep->sid != 0 && ep->sid != ntoh24(fh->fh_d_id)) { 1405 atomic_inc(&mp->stats.xid_not_found); 1406 goto rel; 1407 } 1408 if (ep->did != ntoh24(fh->fh_s_id) && 1409 ep->did != FC_FID_FLOGI) { 1410 atomic_inc(&mp->stats.xid_not_found); 1411 goto rel; 1412 } 1413 sof = fr_sof(fp); 1414 sp = &ep->seq; 1415 if (fc_sof_is_init(sof)) { 1416 sp->ssb_stat |= SSB_ST_RESP; 1417 sp->id = fh->fh_seq_id; 1418 } else if (sp->id != fh->fh_seq_id) { 1419 atomic_inc(&mp->stats.seq_not_found); 1420 goto rel; 1421 } 1422 1423 f_ctl = ntoh24(fh->fh_f_ctl); 1424 fr_seq(fp) = sp; 1425 if (f_ctl & FC_FC_SEQ_INIT) 1426 ep->esb_stat |= ESB_ST_SEQ_INIT; 1427 1428 if (fc_sof_needs_ack(sof)) 1429 fc_seq_send_ack(sp, fp); 1430 resp = ep->resp; 1431 ex_resp_arg = ep->arg; 1432 1433 if (fh->fh_type != FC_TYPE_FCP && fr_eof(fp) == FC_EOF_T && 1434 (f_ctl & (FC_FC_LAST_SEQ | FC_FC_END_SEQ)) == 1435 (FC_FC_LAST_SEQ | FC_FC_END_SEQ)) { 1436 spin_lock_bh(&ep->ex_lock); 1437 rc = fc_exch_done_locked(ep); 1438 WARN_ON(fc_seq_exch(sp) != ep); 1439 spin_unlock_bh(&ep->ex_lock); 1440 if (!rc) 1441 fc_exch_delete(ep); 1442 } 1443 1444 /* 1445 * Call the receive function. 1446 * The sequence is held (has a refcnt) for us, 1447 * but not for the receive function. 1448 * 1449 * The receive function may allocate a new sequence 1450 * over the old one, so we shouldn't change the 1451 * sequence after this. 1452 * 1453 * The frame will be freed by the receive function. 1454 * If new exch resp handler is valid then call that 1455 * first. 1456 */ 1457 if (resp) 1458 resp(sp, fp, ex_resp_arg); 1459 else 1460 fc_frame_free(fp); 1461 fc_exch_release(ep); 1462 return; 1463 rel: 1464 fc_exch_release(ep); 1465 out: 1466 fc_frame_free(fp); 1467 } 1468 1469 /** 1470 * fc_exch_recv_resp() - Handler for a sequence where other end is 1471 * responding to our sequence 1472 * @mp: The EM that the exchange is on 1473 * @fp: The response frame 1474 */ 1475 static void fc_exch_recv_resp(struct fc_exch_mgr *mp, struct fc_frame *fp) 1476 { 1477 struct fc_seq *sp; 1478 1479 sp = fc_seq_lookup_orig(mp, fp); /* doesn't hold sequence */ 1480 1481 if (!sp) 1482 atomic_inc(&mp->stats.xid_not_found); 1483 else 1484 atomic_inc(&mp->stats.non_bls_resp); 1485 1486 fc_frame_free(fp); 1487 } 1488 1489 /** 1490 * fc_exch_abts_resp() - Handler for a response to an ABT 1491 * @ep: The exchange that the frame is on 1492 * @fp: The response frame 1493 * 1494 * This response would be to an ABTS cancelling an exchange or sequence. 1495 * The response can be either BA_ACC or BA_RJT 1496 */ 1497 static void fc_exch_abts_resp(struct fc_exch *ep, struct fc_frame *fp) 1498 { 1499 void (*resp)(struct fc_seq *, struct fc_frame *fp, void *arg); 1500 void *ex_resp_arg; 1501 struct fc_frame_header *fh; 1502 struct fc_ba_acc *ap; 1503 struct fc_seq *sp; 1504 u16 low; 1505 u16 high; 1506 int rc = 1, has_rec = 0; 1507 1508 fh = fc_frame_header_get(fp); 1509 FC_EXCH_DBG(ep, "exch: BLS rctl %x - %s\n", fh->fh_r_ctl, 1510 fc_exch_rctl_name(fh->fh_r_ctl)); 1511 1512 if (cancel_delayed_work_sync(&ep->timeout_work)) 1513 fc_exch_release(ep); /* release from pending timer hold */ 1514 1515 spin_lock_bh(&ep->ex_lock); 1516 switch (fh->fh_r_ctl) { 1517 case FC_RCTL_BA_ACC: 1518 ap = fc_frame_payload_get(fp, sizeof(*ap)); 1519 if (!ap) 1520 break; 1521 1522 /* 1523 * Decide whether to establish a Recovery Qualifier. 1524 * We do this if there is a non-empty SEQ_CNT range and 1525 * SEQ_ID is the same as the one we aborted. 1526 */ 1527 low = ntohs(ap->ba_low_seq_cnt); 1528 high = ntohs(ap->ba_high_seq_cnt); 1529 if ((ep->esb_stat & ESB_ST_REC_QUAL) == 0 && 1530 (ap->ba_seq_id_val != FC_BA_SEQ_ID_VAL || 1531 ap->ba_seq_id == ep->seq_id) && low != high) { 1532 ep->esb_stat |= ESB_ST_REC_QUAL; 1533 fc_exch_hold(ep); /* hold for recovery qualifier */ 1534 has_rec = 1; 1535 } 1536 break; 1537 case FC_RCTL_BA_RJT: 1538 break; 1539 default: 1540 break; 1541 } 1542 1543 resp = ep->resp; 1544 ex_resp_arg = ep->arg; 1545 1546 /* do we need to do some other checks here. Can we reuse more of 1547 * fc_exch_recv_seq_resp 1548 */ 1549 sp = &ep->seq; 1550 /* 1551 * do we want to check END_SEQ as well as LAST_SEQ here? 1552 */ 1553 if (ep->fh_type != FC_TYPE_FCP && 1554 ntoh24(fh->fh_f_ctl) & FC_FC_LAST_SEQ) 1555 rc = fc_exch_done_locked(ep); 1556 spin_unlock_bh(&ep->ex_lock); 1557 if (!rc) 1558 fc_exch_delete(ep); 1559 1560 if (resp) 1561 resp(sp, fp, ex_resp_arg); 1562 else 1563 fc_frame_free(fp); 1564 1565 if (has_rec) 1566 fc_exch_timer_set(ep, ep->r_a_tov); 1567 1568 } 1569 1570 /** 1571 * fc_exch_recv_bls() - Handler for a BLS sequence 1572 * @mp: The EM that the exchange is on 1573 * @fp: The request frame 1574 * 1575 * The BLS frame is always a sequence initiated by the remote side. 1576 * We may be either the originator or recipient of the exchange. 1577 */ 1578 static void fc_exch_recv_bls(struct fc_exch_mgr *mp, struct fc_frame *fp) 1579 { 1580 struct fc_frame_header *fh; 1581 struct fc_exch *ep; 1582 u32 f_ctl; 1583 1584 fh = fc_frame_header_get(fp); 1585 f_ctl = ntoh24(fh->fh_f_ctl); 1586 fr_seq(fp) = NULL; 1587 1588 ep = fc_exch_find(mp, (f_ctl & FC_FC_EX_CTX) ? 1589 ntohs(fh->fh_ox_id) : ntohs(fh->fh_rx_id)); 1590 if (ep && (f_ctl & FC_FC_SEQ_INIT)) { 1591 spin_lock_bh(&ep->ex_lock); 1592 ep->esb_stat |= ESB_ST_SEQ_INIT; 1593 spin_unlock_bh(&ep->ex_lock); 1594 } 1595 if (f_ctl & FC_FC_SEQ_CTX) { 1596 /* 1597 * A response to a sequence we initiated. 1598 * This should only be ACKs for class 2 or F. 1599 */ 1600 switch (fh->fh_r_ctl) { 1601 case FC_RCTL_ACK_1: 1602 case FC_RCTL_ACK_0: 1603 break; 1604 default: 1605 FC_EXCH_DBG(ep, "BLS rctl %x - %s received", 1606 fh->fh_r_ctl, 1607 fc_exch_rctl_name(fh->fh_r_ctl)); 1608 break; 1609 } 1610 fc_frame_free(fp); 1611 } else { 1612 switch (fh->fh_r_ctl) { 1613 case FC_RCTL_BA_RJT: 1614 case FC_RCTL_BA_ACC: 1615 if (ep) 1616 fc_exch_abts_resp(ep, fp); 1617 else 1618 fc_frame_free(fp); 1619 break; 1620 case FC_RCTL_BA_ABTS: 1621 fc_exch_recv_abts(ep, fp); 1622 break; 1623 default: /* ignore junk */ 1624 fc_frame_free(fp); 1625 break; 1626 } 1627 } 1628 if (ep) 1629 fc_exch_release(ep); /* release hold taken by fc_exch_find */ 1630 } 1631 1632 /** 1633 * fc_seq_ls_acc() - Accept sequence with LS_ACC 1634 * @rx_fp: The received frame, not freed here. 1635 * 1636 * If this fails due to allocation or transmit congestion, assume the 1637 * originator will repeat the sequence. 1638 */ 1639 static void fc_seq_ls_acc(struct fc_frame *rx_fp) 1640 { 1641 struct fc_lport *lport; 1642 struct fc_els_ls_acc *acc; 1643 struct fc_frame *fp; 1644 1645 lport = fr_dev(rx_fp); 1646 fp = fc_frame_alloc(lport, sizeof(*acc)); 1647 if (!fp) 1648 return; 1649 acc = fc_frame_payload_get(fp, sizeof(*acc)); 1650 memset(acc, 0, sizeof(*acc)); 1651 acc->la_cmd = ELS_LS_ACC; 1652 fc_fill_reply_hdr(fp, rx_fp, FC_RCTL_ELS_REP, 0); 1653 lport->tt.frame_send(lport, fp); 1654 } 1655 1656 /** 1657 * fc_seq_ls_rjt() - Reject a sequence with ELS LS_RJT 1658 * @rx_fp: The received frame, not freed here. 1659 * @reason: The reason the sequence is being rejected 1660 * @explan: The explanation for the rejection 1661 * 1662 * If this fails due to allocation or transmit congestion, assume the 1663 * originator will repeat the sequence. 1664 */ 1665 static void fc_seq_ls_rjt(struct fc_frame *rx_fp, enum fc_els_rjt_reason reason, 1666 enum fc_els_rjt_explan explan) 1667 { 1668 struct fc_lport *lport; 1669 struct fc_els_ls_rjt *rjt; 1670 struct fc_frame *fp; 1671 1672 lport = fr_dev(rx_fp); 1673 fp = fc_frame_alloc(lport, sizeof(*rjt)); 1674 if (!fp) 1675 return; 1676 rjt = fc_frame_payload_get(fp, sizeof(*rjt)); 1677 memset(rjt, 0, sizeof(*rjt)); 1678 rjt->er_cmd = ELS_LS_RJT; 1679 rjt->er_reason = reason; 1680 rjt->er_explan = explan; 1681 fc_fill_reply_hdr(fp, rx_fp, FC_RCTL_ELS_REP, 0); 1682 lport->tt.frame_send(lport, fp); 1683 } 1684 1685 /** 1686 * fc_exch_reset() - Reset an exchange 1687 * @ep: The exchange to be reset 1688 */ 1689 static void fc_exch_reset(struct fc_exch *ep) 1690 { 1691 struct fc_seq *sp; 1692 void (*resp)(struct fc_seq *, struct fc_frame *, void *); 1693 void *arg; 1694 int rc = 1; 1695 1696 spin_lock_bh(&ep->ex_lock); 1697 ep->state |= FC_EX_RST_CLEANUP; 1698 if (cancel_delayed_work(&ep->timeout_work)) 1699 atomic_dec(&ep->ex_refcnt); /* drop hold for timer */ 1700 resp = ep->resp; 1701 ep->resp = NULL; 1702 if (ep->esb_stat & ESB_ST_REC_QUAL) 1703 atomic_dec(&ep->ex_refcnt); /* drop hold for rec_qual */ 1704 ep->esb_stat &= ~ESB_ST_REC_QUAL; 1705 arg = ep->arg; 1706 sp = &ep->seq; 1707 rc = fc_exch_done_locked(ep); 1708 spin_unlock_bh(&ep->ex_lock); 1709 if (!rc) 1710 fc_exch_delete(ep); 1711 1712 if (resp) 1713 resp(sp, ERR_PTR(-FC_EX_CLOSED), arg); 1714 } 1715 1716 /** 1717 * fc_exch_pool_reset() - Reset a per cpu exchange pool 1718 * @lport: The local port that the exchange pool is on 1719 * @pool: The exchange pool to be reset 1720 * @sid: The source ID 1721 * @did: The destination ID 1722 * 1723 * Resets a per cpu exches pool, releasing all of its sequences 1724 * and exchanges. If sid is non-zero then reset only exchanges 1725 * we sourced from the local port's FID. If did is non-zero then 1726 * only reset exchanges destined for the local port's FID. 1727 */ 1728 static void fc_exch_pool_reset(struct fc_lport *lport, 1729 struct fc_exch_pool *pool, 1730 u32 sid, u32 did) 1731 { 1732 struct fc_exch *ep; 1733 struct fc_exch *next; 1734 1735 spin_lock_bh(&pool->lock); 1736 restart: 1737 list_for_each_entry_safe(ep, next, &pool->ex_list, ex_list) { 1738 if ((lport == ep->lp) && 1739 (sid == 0 || sid == ep->sid) && 1740 (did == 0 || did == ep->did)) { 1741 fc_exch_hold(ep); 1742 spin_unlock_bh(&pool->lock); 1743 1744 fc_exch_reset(ep); 1745 1746 fc_exch_release(ep); 1747 spin_lock_bh(&pool->lock); 1748 1749 /* 1750 * must restart loop incase while lock 1751 * was down multiple eps were released. 1752 */ 1753 goto restart; 1754 } 1755 } 1756 spin_unlock_bh(&pool->lock); 1757 } 1758 1759 /** 1760 * fc_exch_mgr_reset() - Reset all EMs of a local port 1761 * @lport: The local port whose EMs are to be reset 1762 * @sid: The source ID 1763 * @did: The destination ID 1764 * 1765 * Reset all EMs associated with a given local port. Release all 1766 * sequences and exchanges. If sid is non-zero then reset only the 1767 * exchanges sent from the local port's FID. If did is non-zero then 1768 * reset only exchanges destined for the local port's FID. 1769 */ 1770 void fc_exch_mgr_reset(struct fc_lport *lport, u32 sid, u32 did) 1771 { 1772 struct fc_exch_mgr_anchor *ema; 1773 unsigned int cpu; 1774 1775 list_for_each_entry(ema, &lport->ema_list, ema_list) { 1776 for_each_possible_cpu(cpu) 1777 fc_exch_pool_reset(lport, 1778 per_cpu_ptr(ema->mp->pool, cpu), 1779 sid, did); 1780 } 1781 } 1782 EXPORT_SYMBOL(fc_exch_mgr_reset); 1783 1784 /** 1785 * fc_exch_lookup() - find an exchange 1786 * @lport: The local port 1787 * @xid: The exchange ID 1788 * 1789 * Returns exchange pointer with hold for caller, or NULL if not found. 1790 */ 1791 static struct fc_exch *fc_exch_lookup(struct fc_lport *lport, u32 xid) 1792 { 1793 struct fc_exch_mgr_anchor *ema; 1794 1795 list_for_each_entry(ema, &lport->ema_list, ema_list) 1796 if (ema->mp->min_xid <= xid && xid <= ema->mp->max_xid) 1797 return fc_exch_find(ema->mp, xid); 1798 return NULL; 1799 } 1800 1801 /** 1802 * fc_exch_els_rec() - Handler for ELS REC (Read Exchange Concise) requests 1803 * @rfp: The REC frame, not freed here. 1804 * 1805 * Note that the requesting port may be different than the S_ID in the request. 1806 */ 1807 static void fc_exch_els_rec(struct fc_frame *rfp) 1808 { 1809 struct fc_lport *lport; 1810 struct fc_frame *fp; 1811 struct fc_exch *ep; 1812 struct fc_els_rec *rp; 1813 struct fc_els_rec_acc *acc; 1814 enum fc_els_rjt_reason reason = ELS_RJT_LOGIC; 1815 enum fc_els_rjt_explan explan; 1816 u32 sid; 1817 u16 rxid; 1818 u16 oxid; 1819 1820 lport = fr_dev(rfp); 1821 rp = fc_frame_payload_get(rfp, sizeof(*rp)); 1822 explan = ELS_EXPL_INV_LEN; 1823 if (!rp) 1824 goto reject; 1825 sid = ntoh24(rp->rec_s_id); 1826 rxid = ntohs(rp->rec_rx_id); 1827 oxid = ntohs(rp->rec_ox_id); 1828 1829 ep = fc_exch_lookup(lport, 1830 sid == fc_host_port_id(lport->host) ? oxid : rxid); 1831 explan = ELS_EXPL_OXID_RXID; 1832 if (!ep) 1833 goto reject; 1834 if (ep->oid != sid || oxid != ep->oxid) 1835 goto rel; 1836 if (rxid != FC_XID_UNKNOWN && rxid != ep->rxid) 1837 goto rel; 1838 fp = fc_frame_alloc(lport, sizeof(*acc)); 1839 if (!fp) 1840 goto out; 1841 1842 acc = fc_frame_payload_get(fp, sizeof(*acc)); 1843 memset(acc, 0, sizeof(*acc)); 1844 acc->reca_cmd = ELS_LS_ACC; 1845 acc->reca_ox_id = rp->rec_ox_id; 1846 memcpy(acc->reca_ofid, rp->rec_s_id, 3); 1847 acc->reca_rx_id = htons(ep->rxid); 1848 if (ep->sid == ep->oid) 1849 hton24(acc->reca_rfid, ep->did); 1850 else 1851 hton24(acc->reca_rfid, ep->sid); 1852 acc->reca_fc4value = htonl(ep->seq.rec_data); 1853 acc->reca_e_stat = htonl(ep->esb_stat & (ESB_ST_RESP | 1854 ESB_ST_SEQ_INIT | 1855 ESB_ST_COMPLETE)); 1856 fc_fill_reply_hdr(fp, rfp, FC_RCTL_ELS_REP, 0); 1857 lport->tt.frame_send(lport, fp); 1858 out: 1859 fc_exch_release(ep); 1860 return; 1861 1862 rel: 1863 fc_exch_release(ep); 1864 reject: 1865 fc_seq_ls_rjt(rfp, reason, explan); 1866 } 1867 1868 /** 1869 * fc_exch_rrq_resp() - Handler for RRQ responses 1870 * @sp: The sequence that the RRQ is on 1871 * @fp: The RRQ frame 1872 * @arg: The exchange that the RRQ is on 1873 * 1874 * TODO: fix error handler. 1875 */ 1876 static void fc_exch_rrq_resp(struct fc_seq *sp, struct fc_frame *fp, void *arg) 1877 { 1878 struct fc_exch *aborted_ep = arg; 1879 unsigned int op; 1880 1881 if (IS_ERR(fp)) { 1882 int err = PTR_ERR(fp); 1883 1884 if (err == -FC_EX_CLOSED || err == -FC_EX_TIMEOUT) 1885 goto cleanup; 1886 FC_EXCH_DBG(aborted_ep, "Cannot process RRQ, " 1887 "frame error %d\n", err); 1888 return; 1889 } 1890 1891 op = fc_frame_payload_op(fp); 1892 fc_frame_free(fp); 1893 1894 switch (op) { 1895 case ELS_LS_RJT: 1896 FC_EXCH_DBG(aborted_ep, "LS_RJT for RRQ"); 1897 /* fall through */ 1898 case ELS_LS_ACC: 1899 goto cleanup; 1900 default: 1901 FC_EXCH_DBG(aborted_ep, "unexpected response op %x " 1902 "for RRQ", op); 1903 return; 1904 } 1905 1906 cleanup: 1907 fc_exch_done(&aborted_ep->seq); 1908 /* drop hold for rec qual */ 1909 fc_exch_release(aborted_ep); 1910 } 1911 1912 1913 /** 1914 * fc_exch_seq_send() - Send a frame using a new exchange and sequence 1915 * @lport: The local port to send the frame on 1916 * @fp: The frame to be sent 1917 * @resp: The response handler for this request 1918 * @destructor: The destructor for the exchange 1919 * @arg: The argument to be passed to the response handler 1920 * @timer_msec: The timeout period for the exchange 1921 * 1922 * The frame pointer with some of the header's fields must be 1923 * filled before calling this routine, those fields are: 1924 * 1925 * - routing control 1926 * - FC port did 1927 * - FC port sid 1928 * - FC header type 1929 * - frame control 1930 * - parameter or relative offset 1931 */ 1932 static struct fc_seq *fc_exch_seq_send(struct fc_lport *lport, 1933 struct fc_frame *fp, 1934 void (*resp)(struct fc_seq *, 1935 struct fc_frame *fp, 1936 void *arg), 1937 void (*destructor)(struct fc_seq *, 1938 void *), 1939 void *arg, u32 timer_msec) 1940 { 1941 struct fc_exch *ep; 1942 struct fc_seq *sp = NULL; 1943 struct fc_frame_header *fh; 1944 int rc = 1; 1945 1946 ep = fc_exch_alloc(lport, fp); 1947 if (!ep) { 1948 fc_frame_free(fp); 1949 return NULL; 1950 } 1951 ep->esb_stat |= ESB_ST_SEQ_INIT; 1952 fh = fc_frame_header_get(fp); 1953 fc_exch_set_addr(ep, ntoh24(fh->fh_s_id), ntoh24(fh->fh_d_id)); 1954 ep->resp = resp; 1955 ep->destructor = destructor; 1956 ep->arg = arg; 1957 ep->r_a_tov = FC_DEF_R_A_TOV; 1958 ep->lp = lport; 1959 sp = &ep->seq; 1960 1961 ep->fh_type = fh->fh_type; /* save for possbile timeout handling */ 1962 ep->f_ctl = ntoh24(fh->fh_f_ctl); 1963 fc_exch_setup_hdr(ep, fp, ep->f_ctl); 1964 sp->cnt++; 1965 1966 if (ep->xid <= lport->lro_xid && fh->fh_r_ctl == FC_RCTL_DD_UNSOL_CMD) 1967 fc_fcp_ddp_setup(fr_fsp(fp), ep->xid); 1968 1969 if (unlikely(lport->tt.frame_send(lport, fp))) 1970 goto err; 1971 1972 if (timer_msec) 1973 fc_exch_timer_set_locked(ep, timer_msec); 1974 ep->f_ctl &= ~FC_FC_FIRST_SEQ; /* not first seq */ 1975 1976 if (ep->f_ctl & FC_FC_SEQ_INIT) 1977 ep->esb_stat &= ~ESB_ST_SEQ_INIT; 1978 spin_unlock_bh(&ep->ex_lock); 1979 return sp; 1980 err: 1981 rc = fc_exch_done_locked(ep); 1982 spin_unlock_bh(&ep->ex_lock); 1983 if (!rc) 1984 fc_exch_delete(ep); 1985 return NULL; 1986 } 1987 1988 /** 1989 * fc_exch_rrq() - Send an ELS RRQ (Reinstate Recovery Qualifier) command 1990 * @ep: The exchange to send the RRQ on 1991 * 1992 * This tells the remote port to stop blocking the use of 1993 * the exchange and the seq_cnt range. 1994 */ 1995 static void fc_exch_rrq(struct fc_exch *ep) 1996 { 1997 struct fc_lport *lport; 1998 struct fc_els_rrq *rrq; 1999 struct fc_frame *fp; 2000 u32 did; 2001 2002 lport = ep->lp; 2003 2004 fp = fc_frame_alloc(lport, sizeof(*rrq)); 2005 if (!fp) 2006 goto retry; 2007 2008 rrq = fc_frame_payload_get(fp, sizeof(*rrq)); 2009 memset(rrq, 0, sizeof(*rrq)); 2010 rrq->rrq_cmd = ELS_RRQ; 2011 hton24(rrq->rrq_s_id, ep->sid); 2012 rrq->rrq_ox_id = htons(ep->oxid); 2013 rrq->rrq_rx_id = htons(ep->rxid); 2014 2015 did = ep->did; 2016 if (ep->esb_stat & ESB_ST_RESP) 2017 did = ep->sid; 2018 2019 fc_fill_fc_hdr(fp, FC_RCTL_ELS_REQ, did, 2020 lport->port_id, FC_TYPE_ELS, 2021 FC_FC_FIRST_SEQ | FC_FC_END_SEQ | FC_FC_SEQ_INIT, 0); 2022 2023 if (fc_exch_seq_send(lport, fp, fc_exch_rrq_resp, NULL, ep, 2024 lport->e_d_tov)) 2025 return; 2026 2027 retry: 2028 spin_lock_bh(&ep->ex_lock); 2029 if (ep->state & (FC_EX_RST_CLEANUP | FC_EX_DONE)) { 2030 spin_unlock_bh(&ep->ex_lock); 2031 /* drop hold for rec qual */ 2032 fc_exch_release(ep); 2033 return; 2034 } 2035 ep->esb_stat |= ESB_ST_REC_QUAL; 2036 fc_exch_timer_set_locked(ep, ep->r_a_tov); 2037 spin_unlock_bh(&ep->ex_lock); 2038 } 2039 2040 /** 2041 * fc_exch_els_rrq() - Handler for ELS RRQ (Reset Recovery Qualifier) requests 2042 * @fp: The RRQ frame, not freed here. 2043 */ 2044 static void fc_exch_els_rrq(struct fc_frame *fp) 2045 { 2046 struct fc_lport *lport; 2047 struct fc_exch *ep = NULL; /* request or subject exchange */ 2048 struct fc_els_rrq *rp; 2049 u32 sid; 2050 u16 xid; 2051 enum fc_els_rjt_explan explan; 2052 2053 lport = fr_dev(fp); 2054 rp = fc_frame_payload_get(fp, sizeof(*rp)); 2055 explan = ELS_EXPL_INV_LEN; 2056 if (!rp) 2057 goto reject; 2058 2059 /* 2060 * lookup subject exchange. 2061 */ 2062 sid = ntoh24(rp->rrq_s_id); /* subject source */ 2063 xid = fc_host_port_id(lport->host) == sid ? 2064 ntohs(rp->rrq_ox_id) : ntohs(rp->rrq_rx_id); 2065 ep = fc_exch_lookup(lport, xid); 2066 explan = ELS_EXPL_OXID_RXID; 2067 if (!ep) 2068 goto reject; 2069 spin_lock_bh(&ep->ex_lock); 2070 if (ep->oxid != ntohs(rp->rrq_ox_id)) 2071 goto unlock_reject; 2072 if (ep->rxid != ntohs(rp->rrq_rx_id) && 2073 ep->rxid != FC_XID_UNKNOWN) 2074 goto unlock_reject; 2075 explan = ELS_EXPL_SID; 2076 if (ep->sid != sid) 2077 goto unlock_reject; 2078 2079 /* 2080 * Clear Recovery Qualifier state, and cancel timer if complete. 2081 */ 2082 if (ep->esb_stat & ESB_ST_REC_QUAL) { 2083 ep->esb_stat &= ~ESB_ST_REC_QUAL; 2084 atomic_dec(&ep->ex_refcnt); /* drop hold for rec qual */ 2085 } 2086 if (ep->esb_stat & ESB_ST_COMPLETE) { 2087 if (cancel_delayed_work(&ep->timeout_work)) 2088 atomic_dec(&ep->ex_refcnt); /* drop timer hold */ 2089 } 2090 2091 spin_unlock_bh(&ep->ex_lock); 2092 2093 /* 2094 * Send LS_ACC. 2095 */ 2096 fc_seq_ls_acc(fp); 2097 goto out; 2098 2099 unlock_reject: 2100 spin_unlock_bh(&ep->ex_lock); 2101 reject: 2102 fc_seq_ls_rjt(fp, ELS_RJT_LOGIC, explan); 2103 out: 2104 if (ep) 2105 fc_exch_release(ep); /* drop hold from fc_exch_find */ 2106 } 2107 2108 /** 2109 * fc_exch_mgr_add() - Add an exchange manager to a local port's list of EMs 2110 * @lport: The local port to add the exchange manager to 2111 * @mp: The exchange manager to be added to the local port 2112 * @match: The match routine that indicates when this EM should be used 2113 */ 2114 struct fc_exch_mgr_anchor *fc_exch_mgr_add(struct fc_lport *lport, 2115 struct fc_exch_mgr *mp, 2116 bool (*match)(struct fc_frame *)) 2117 { 2118 struct fc_exch_mgr_anchor *ema; 2119 2120 ema = kmalloc(sizeof(*ema), GFP_ATOMIC); 2121 if (!ema) 2122 return ema; 2123 2124 ema->mp = mp; 2125 ema->match = match; 2126 /* add EM anchor to EM anchors list */ 2127 list_add_tail(&ema->ema_list, &lport->ema_list); 2128 kref_get(&mp->kref); 2129 return ema; 2130 } 2131 EXPORT_SYMBOL(fc_exch_mgr_add); 2132 2133 /** 2134 * fc_exch_mgr_destroy() - Destroy an exchange manager 2135 * @kref: The reference to the EM to be destroyed 2136 */ 2137 static void fc_exch_mgr_destroy(struct kref *kref) 2138 { 2139 struct fc_exch_mgr *mp = container_of(kref, struct fc_exch_mgr, kref); 2140 2141 mempool_destroy(mp->ep_pool); 2142 free_percpu(mp->pool); 2143 kfree(mp); 2144 } 2145 2146 /** 2147 * fc_exch_mgr_del() - Delete an EM from a local port's list 2148 * @ema: The exchange manager anchor identifying the EM to be deleted 2149 */ 2150 void fc_exch_mgr_del(struct fc_exch_mgr_anchor *ema) 2151 { 2152 /* remove EM anchor from EM anchors list */ 2153 list_del(&ema->ema_list); 2154 kref_put(&ema->mp->kref, fc_exch_mgr_destroy); 2155 kfree(ema); 2156 } 2157 EXPORT_SYMBOL(fc_exch_mgr_del); 2158 2159 /** 2160 * fc_exch_mgr_list_clone() - Share all exchange manager objects 2161 * @src: Source lport to clone exchange managers from 2162 * @dst: New lport that takes references to all the exchange managers 2163 */ 2164 int fc_exch_mgr_list_clone(struct fc_lport *src, struct fc_lport *dst) 2165 { 2166 struct fc_exch_mgr_anchor *ema, *tmp; 2167 2168 list_for_each_entry(ema, &src->ema_list, ema_list) { 2169 if (!fc_exch_mgr_add(dst, ema->mp, ema->match)) 2170 goto err; 2171 } 2172 return 0; 2173 err: 2174 list_for_each_entry_safe(ema, tmp, &dst->ema_list, ema_list) 2175 fc_exch_mgr_del(ema); 2176 return -ENOMEM; 2177 } 2178 EXPORT_SYMBOL(fc_exch_mgr_list_clone); 2179 2180 /** 2181 * fc_exch_mgr_alloc() - Allocate an exchange manager 2182 * @lport: The local port that the new EM will be associated with 2183 * @class: The default FC class for new exchanges 2184 * @min_xid: The minimum XID for exchanges from the new EM 2185 * @max_xid: The maximum XID for exchanges from the new EM 2186 * @match: The match routine for the new EM 2187 */ 2188 struct fc_exch_mgr *fc_exch_mgr_alloc(struct fc_lport *lport, 2189 enum fc_class class, 2190 u16 min_xid, u16 max_xid, 2191 bool (*match)(struct fc_frame *)) 2192 { 2193 struct fc_exch_mgr *mp; 2194 u16 pool_exch_range; 2195 size_t pool_size; 2196 unsigned int cpu; 2197 struct fc_exch_pool *pool; 2198 2199 if (max_xid <= min_xid || max_xid == FC_XID_UNKNOWN || 2200 (min_xid & fc_cpu_mask) != 0) { 2201 FC_LPORT_DBG(lport, "Invalid min_xid 0x:%x and max_xid 0x:%x\n", 2202 min_xid, max_xid); 2203 return NULL; 2204 } 2205 2206 /* 2207 * allocate memory for EM 2208 */ 2209 mp = kzalloc(sizeof(struct fc_exch_mgr), GFP_ATOMIC); 2210 if (!mp) 2211 return NULL; 2212 2213 mp->class = class; 2214 /* adjust em exch xid range for offload */ 2215 mp->min_xid = min_xid; 2216 mp->max_xid = max_xid; 2217 2218 mp->ep_pool = mempool_create_slab_pool(2, fc_em_cachep); 2219 if (!mp->ep_pool) 2220 goto free_mp; 2221 2222 /* 2223 * Setup per cpu exch pool with entire exchange id range equally 2224 * divided across all cpus. The exch pointers array memory is 2225 * allocated for exch range per pool. 2226 */ 2227 pool_exch_range = (mp->max_xid - mp->min_xid + 1) / (fc_cpu_mask + 1); 2228 mp->pool_max_index = pool_exch_range - 1; 2229 2230 /* 2231 * Allocate and initialize per cpu exch pool 2232 */ 2233 pool_size = sizeof(*pool) + pool_exch_range * sizeof(struct fc_exch *); 2234 mp->pool = __alloc_percpu(pool_size, __alignof__(struct fc_exch_pool)); 2235 if (!mp->pool) 2236 goto free_mempool; 2237 for_each_possible_cpu(cpu) { 2238 pool = per_cpu_ptr(mp->pool, cpu); 2239 pool->left = FC_XID_UNKNOWN; 2240 pool->right = FC_XID_UNKNOWN; 2241 spin_lock_init(&pool->lock); 2242 INIT_LIST_HEAD(&pool->ex_list); 2243 } 2244 2245 kref_init(&mp->kref); 2246 if (!fc_exch_mgr_add(lport, mp, match)) { 2247 free_percpu(mp->pool); 2248 goto free_mempool; 2249 } 2250 2251 /* 2252 * Above kref_init() sets mp->kref to 1 and then 2253 * call to fc_exch_mgr_add incremented mp->kref again, 2254 * so adjust that extra increment. 2255 */ 2256 kref_put(&mp->kref, fc_exch_mgr_destroy); 2257 return mp; 2258 2259 free_mempool: 2260 mempool_destroy(mp->ep_pool); 2261 free_mp: 2262 kfree(mp); 2263 return NULL; 2264 } 2265 EXPORT_SYMBOL(fc_exch_mgr_alloc); 2266 2267 /** 2268 * fc_exch_mgr_free() - Free all exchange managers on a local port 2269 * @lport: The local port whose EMs are to be freed 2270 */ 2271 void fc_exch_mgr_free(struct fc_lport *lport) 2272 { 2273 struct fc_exch_mgr_anchor *ema, *next; 2274 2275 flush_workqueue(fc_exch_workqueue); 2276 list_for_each_entry_safe(ema, next, &lport->ema_list, ema_list) 2277 fc_exch_mgr_del(ema); 2278 } 2279 EXPORT_SYMBOL(fc_exch_mgr_free); 2280 2281 /** 2282 * fc_find_ema() - Lookup and return appropriate Exchange Manager Anchor depending 2283 * upon 'xid'. 2284 * @f_ctl: f_ctl 2285 * @lport: The local port the frame was received on 2286 * @fh: The received frame header 2287 */ 2288 static struct fc_exch_mgr_anchor *fc_find_ema(u32 f_ctl, 2289 struct fc_lport *lport, 2290 struct fc_frame_header *fh) 2291 { 2292 struct fc_exch_mgr_anchor *ema; 2293 u16 xid; 2294 2295 if (f_ctl & FC_FC_EX_CTX) 2296 xid = ntohs(fh->fh_ox_id); 2297 else { 2298 xid = ntohs(fh->fh_rx_id); 2299 if (xid == FC_XID_UNKNOWN) 2300 return list_entry(lport->ema_list.prev, 2301 typeof(*ema), ema_list); 2302 } 2303 2304 list_for_each_entry(ema, &lport->ema_list, ema_list) { 2305 if ((xid >= ema->mp->min_xid) && 2306 (xid <= ema->mp->max_xid)) 2307 return ema; 2308 } 2309 return NULL; 2310 } 2311 /** 2312 * fc_exch_recv() - Handler for received frames 2313 * @lport: The local port the frame was received on 2314 * @fp: The received frame 2315 */ 2316 void fc_exch_recv(struct fc_lport *lport, struct fc_frame *fp) 2317 { 2318 struct fc_frame_header *fh = fc_frame_header_get(fp); 2319 struct fc_exch_mgr_anchor *ema; 2320 u32 f_ctl; 2321 2322 /* lport lock ? */ 2323 if (!lport || lport->state == LPORT_ST_DISABLED) { 2324 FC_LPORT_DBG(lport, "Receiving frames for an lport that " 2325 "has not been initialized correctly\n"); 2326 fc_frame_free(fp); 2327 return; 2328 } 2329 2330 f_ctl = ntoh24(fh->fh_f_ctl); 2331 ema = fc_find_ema(f_ctl, lport, fh); 2332 if (!ema) { 2333 FC_LPORT_DBG(lport, "Unable to find Exchange Manager Anchor," 2334 "fc_ctl <0x%x>, xid <0x%x>\n", 2335 f_ctl, 2336 (f_ctl & FC_FC_EX_CTX) ? 2337 ntohs(fh->fh_ox_id) : 2338 ntohs(fh->fh_rx_id)); 2339 fc_frame_free(fp); 2340 return; 2341 } 2342 2343 /* 2344 * If frame is marked invalid, just drop it. 2345 */ 2346 switch (fr_eof(fp)) { 2347 case FC_EOF_T: 2348 if (f_ctl & FC_FC_END_SEQ) 2349 skb_trim(fp_skb(fp), fr_len(fp) - FC_FC_FILL(f_ctl)); 2350 /* fall through */ 2351 case FC_EOF_N: 2352 if (fh->fh_type == FC_TYPE_BLS) 2353 fc_exch_recv_bls(ema->mp, fp); 2354 else if ((f_ctl & (FC_FC_EX_CTX | FC_FC_SEQ_CTX)) == 2355 FC_FC_EX_CTX) 2356 fc_exch_recv_seq_resp(ema->mp, fp); 2357 else if (f_ctl & FC_FC_SEQ_CTX) 2358 fc_exch_recv_resp(ema->mp, fp); 2359 else /* no EX_CTX and no SEQ_CTX */ 2360 fc_exch_recv_req(lport, ema->mp, fp); 2361 break; 2362 default: 2363 FC_LPORT_DBG(lport, "dropping invalid frame (eof %x)", 2364 fr_eof(fp)); 2365 fc_frame_free(fp); 2366 } 2367 } 2368 EXPORT_SYMBOL(fc_exch_recv); 2369 2370 /** 2371 * fc_exch_init() - Initialize the exchange layer for a local port 2372 * @lport: The local port to initialize the exchange layer for 2373 */ 2374 int fc_exch_init(struct fc_lport *lport) 2375 { 2376 if (!lport->tt.seq_start_next) 2377 lport->tt.seq_start_next = fc_seq_start_next; 2378 2379 if (!lport->tt.seq_set_resp) 2380 lport->tt.seq_set_resp = fc_seq_set_resp; 2381 2382 if (!lport->tt.exch_seq_send) 2383 lport->tt.exch_seq_send = fc_exch_seq_send; 2384 2385 if (!lport->tt.seq_send) 2386 lport->tt.seq_send = fc_seq_send; 2387 2388 if (!lport->tt.seq_els_rsp_send) 2389 lport->tt.seq_els_rsp_send = fc_seq_els_rsp_send; 2390 2391 if (!lport->tt.exch_done) 2392 lport->tt.exch_done = fc_exch_done; 2393 2394 if (!lport->tt.exch_mgr_reset) 2395 lport->tt.exch_mgr_reset = fc_exch_mgr_reset; 2396 2397 if (!lport->tt.seq_exch_abort) 2398 lport->tt.seq_exch_abort = fc_seq_exch_abort; 2399 2400 if (!lport->tt.seq_assign) 2401 lport->tt.seq_assign = fc_seq_assign; 2402 2403 if (!lport->tt.seq_release) 2404 lport->tt.seq_release = fc_seq_release; 2405 2406 return 0; 2407 } 2408 EXPORT_SYMBOL(fc_exch_init); 2409 2410 /** 2411 * fc_setup_exch_mgr() - Setup an exchange manager 2412 */ 2413 int fc_setup_exch_mgr(void) 2414 { 2415 fc_em_cachep = kmem_cache_create("libfc_em", sizeof(struct fc_exch), 2416 0, SLAB_HWCACHE_ALIGN, NULL); 2417 if (!fc_em_cachep) 2418 return -ENOMEM; 2419 2420 /* 2421 * Initialize fc_cpu_mask and fc_cpu_order. The 2422 * fc_cpu_mask is set for nr_cpu_ids rounded up 2423 * to order of 2's * power and order is stored 2424 * in fc_cpu_order as this is later required in 2425 * mapping between an exch id and exch array index 2426 * in per cpu exch pool. 2427 * 2428 * This round up is required to align fc_cpu_mask 2429 * to exchange id's lower bits such that all incoming 2430 * frames of an exchange gets delivered to the same 2431 * cpu on which exchange originated by simple bitwise 2432 * AND operation between fc_cpu_mask and exchange id. 2433 */ 2434 fc_cpu_mask = 1; 2435 fc_cpu_order = 0; 2436 while (fc_cpu_mask < nr_cpu_ids) { 2437 fc_cpu_mask <<= 1; 2438 fc_cpu_order++; 2439 } 2440 fc_cpu_mask--; 2441 2442 fc_exch_workqueue = create_singlethread_workqueue("fc_exch_workqueue"); 2443 if (!fc_exch_workqueue) 2444 return -ENOMEM; 2445 return 0; 2446 } 2447 2448 /** 2449 * fc_destroy_exch_mgr() - Destroy an exchange manager 2450 */ 2451 void fc_destroy_exch_mgr(void) 2452 { 2453 destroy_workqueue(fc_exch_workqueue); 2454 kmem_cache_destroy(fc_em_cachep); 2455 } 2456