aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/bnx2fc
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2012-03-22 15:55:29 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2012-03-22 15:55:29 -0400
commit424a6f6ef990b7e9f56f6627bfc6c46b493faeb4 (patch)
tree0028356ed8003495fbbe1f716f359e3c8ebc35b6 /drivers/scsi/bnx2fc
parent1ab142d499294b844ecc81e8004db4ce029b0b61 (diff)
parentcd8df932d894f3128c884e3ae1b2b484540513db (diff)
Merge tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6
SCSI updates from James Bottomley: "The update includes the usual assortment of driver updates (lpfc, qla2xxx, qla4xxx, bfa, bnx2fc, bnx2i, isci, fcoe, hpsa) plus a huge amount of infrastructure work in the SAS library and transport class as well as an iSCSI update. There's also a new SCSI based virtio driver." * tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6: (177 commits) [SCSI] qla4xxx: Update driver version to 5.02.00-k15 [SCSI] qla4xxx: trivial cleanup [SCSI] qla4xxx: Fix sparse warning [SCSI] qla4xxx: Add support for multiple session per host. [SCSI] qla4xxx: Export CHAP index as sysfs attribute [SCSI] scsi_transport: Export CHAP index as sysfs attribute [SCSI] qla4xxx: Add support to display CHAP list and delete CHAP entry [SCSI] iscsi_transport: Add support to display CHAP list and delete CHAP entry [SCSI] pm8001: fix endian issue with code optimization. [SCSI] pm8001: Fix possible racing condition. [SCSI] pm8001: Fix bogus interrupt state flag issue. [SCSI] ipr: update PCI ID definitions for new adapters [SCSI] qla2xxx: handle default case in qla2x00_request_firmware() [SCSI] isci: improvements in driver unloading routine [SCSI] isci: improve phy event warnings [SCSI] isci: debug, provide state-enum-to-string conversions [SCSI] scsi_transport_sas: 'enable' phys on reset [SCSI] libsas: don't recover end devices attached to disabled phys [SCSI] libsas: fixup target_port_protocols for expanders that don't report sata [SCSI] libsas: set attached device type and target protocols for local phys ...
Diffstat (limited to 'drivers/scsi/bnx2fc')
-rw-r--r--drivers/scsi/bnx2fc/bnx2fc.h8
-rw-r--r--drivers/scsi/bnx2fc/bnx2fc_fcoe.c20
2 files changed, 20 insertions, 8 deletions
diff --git a/drivers/scsi/bnx2fc/bnx2fc.h b/drivers/scsi/bnx2fc/bnx2fc.h
index 049ea907e04a..a4953ef9e53a 100644
--- a/drivers/scsi/bnx2fc/bnx2fc.h
+++ b/drivers/scsi/bnx2fc/bnx2fc.h
@@ -62,7 +62,7 @@
62#include "bnx2fc_constants.h" 62#include "bnx2fc_constants.h"
63 63
64#define BNX2FC_NAME "bnx2fc" 64#define BNX2FC_NAME "bnx2fc"
65#define BNX2FC_VERSION "1.0.9" 65#define BNX2FC_VERSION "1.0.10"
66 66
67#define PFX "bnx2fc: " 67#define PFX "bnx2fc: "
68 68
@@ -114,6 +114,8 @@
114#define BNX2FC_HASH_TBL_CHUNK_SIZE (16 * 1024) 114#define BNX2FC_HASH_TBL_CHUNK_SIZE (16 * 1024)
115 115
116#define BNX2FC_MAX_SEQS 255 116#define BNX2FC_MAX_SEQS 255
117#define BNX2FC_MAX_RETRY_CNT 3
118#define BNX2FC_MAX_RPORT_RETRY_CNT 255
117 119
118#define BNX2FC_READ (1 << 1) 120#define BNX2FC_READ (1 << 1)
119#define BNX2FC_WRITE (1 << 0) 121#define BNX2FC_WRITE (1 << 0)
@@ -121,8 +123,10 @@
121#define BNX2FC_MIN_XID 0 123#define BNX2FC_MIN_XID 0
122#define BNX2FC_MAX_XID \ 124#define BNX2FC_MAX_XID \
123 (BNX2FC_MAX_OUTSTANDING_CMNDS + BNX2FC_ELSTM_XIDS - 1) 125 (BNX2FC_MAX_OUTSTANDING_CMNDS + BNX2FC_ELSTM_XIDS - 1)
126#define FCOE_MAX_NUM_XIDS 0x2000
124#define FCOE_MIN_XID (BNX2FC_MAX_XID + 1) 127#define FCOE_MIN_XID (BNX2FC_MAX_XID + 1)
125#define FCOE_MAX_XID (FCOE_MIN_XID + 4095) 128#define FCOE_MAX_XID (FCOE_MIN_XID + FCOE_MAX_NUM_XIDS - 1)
129#define FCOE_XIDS_PER_CPU (FCOE_MIN_XID + (512 * nr_cpu_ids) - 1)
126#define BNX2FC_MAX_LUN 0xFFFF 130#define BNX2FC_MAX_LUN 0xFFFF
127#define BNX2FC_MAX_FCP_TGT 256 131#define BNX2FC_MAX_FCP_TGT 256
128#define BNX2FC_MAX_CMD_LEN 16 132#define BNX2FC_MAX_CMD_LEN 16
diff --git a/drivers/scsi/bnx2fc/bnx2fc_fcoe.c b/drivers/scsi/bnx2fc/bnx2fc_fcoe.c
index a9af42e83632..abd72a01856d 100644
--- a/drivers/scsi/bnx2fc/bnx2fc_fcoe.c
+++ b/drivers/scsi/bnx2fc/bnx2fc_fcoe.c
@@ -22,7 +22,7 @@ DEFINE_PER_CPU(struct bnx2fc_percpu_s, bnx2fc_percpu);
22 22
23#define DRV_MODULE_NAME "bnx2fc" 23#define DRV_MODULE_NAME "bnx2fc"
24#define DRV_MODULE_VERSION BNX2FC_VERSION 24#define DRV_MODULE_VERSION BNX2FC_VERSION
25#define DRV_MODULE_RELDATE "Oct 21, 2011" 25#define DRV_MODULE_RELDATE "Jan 22, 2011"
26 26
27 27
28static char version[] __devinitdata = 28static char version[] __devinitdata =
@@ -939,8 +939,14 @@ static int bnx2fc_libfc_config(struct fc_lport *lport)
939 939
940static int bnx2fc_em_config(struct fc_lport *lport) 940static int bnx2fc_em_config(struct fc_lport *lport)
941{ 941{
942 int max_xid;
943
944 if (nr_cpu_ids <= 2)
945 max_xid = FCOE_XIDS_PER_CPU;
946 else
947 max_xid = FCOE_MAX_XID;
942 if (!fc_exch_mgr_alloc(lport, FC_CLASS_3, FCOE_MIN_XID, 948 if (!fc_exch_mgr_alloc(lport, FC_CLASS_3, FCOE_MIN_XID,
943 FCOE_MAX_XID, NULL)) { 949 max_xid, NULL)) {
944 printk(KERN_ERR PFX "em_config:fc_exch_mgr_alloc failed\n"); 950 printk(KERN_ERR PFX "em_config:fc_exch_mgr_alloc failed\n");
945 return -ENOMEM; 951 return -ENOMEM;
946 } 952 }
@@ -952,8 +958,8 @@ static int bnx2fc_lport_config(struct fc_lport *lport)
952{ 958{
953 lport->link_up = 0; 959 lport->link_up = 0;
954 lport->qfull = 0; 960 lport->qfull = 0;
955 lport->max_retry_count = 3; 961 lport->max_retry_count = BNX2FC_MAX_RETRY_CNT;
956 lport->max_rport_retry_count = 3; 962 lport->max_rport_retry_count = BNX2FC_MAX_RPORT_RETRY_CNT;
957 lport->e_d_tov = 2 * 1000; 963 lport->e_d_tov = 2 * 1000;
958 lport->r_a_tov = 10 * 1000; 964 lport->r_a_tov = 10 * 1000;
959 965
@@ -1536,6 +1542,7 @@ static void __bnx2fc_destroy(struct bnx2fc_interface *interface)
1536static int bnx2fc_destroy(struct net_device *netdev) 1542static int bnx2fc_destroy(struct net_device *netdev)
1537{ 1543{
1538 struct bnx2fc_interface *interface = NULL; 1544 struct bnx2fc_interface *interface = NULL;
1545 struct workqueue_struct *timer_work_queue;
1539 int rc = 0; 1546 int rc = 0;
1540 1547
1541 rtnl_lock(); 1548 rtnl_lock();
@@ -1548,9 +1555,9 @@ static int bnx2fc_destroy(struct net_device *netdev)
1548 goto netdev_err; 1555 goto netdev_err;
1549 } 1556 }
1550 1557
1551 1558 timer_work_queue = interface->timer_work_queue;
1552 destroy_workqueue(interface->timer_work_queue);
1553 __bnx2fc_destroy(interface); 1559 __bnx2fc_destroy(interface);
1560 destroy_workqueue(timer_work_queue);
1554 1561
1555netdev_err: 1562netdev_err:
1556 mutex_unlock(&bnx2fc_dev_lock); 1563 mutex_unlock(&bnx2fc_dev_lock);
@@ -2054,6 +2061,7 @@ if_create_err:
2054ifput_err: 2061ifput_err:
2055 bnx2fc_net_cleanup(interface); 2062 bnx2fc_net_cleanup(interface);
2056 bnx2fc_interface_put(interface); 2063 bnx2fc_interface_put(interface);
2064 goto mod_err;
2057netdev_err: 2065netdev_err:
2058 module_put(THIS_MODULE); 2066 module_put(THIS_MODULE);
2059mod_err: 2067mod_err: