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