aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/bnx2i
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/scsi/bnx2i')
-rw-r--r--drivers/scsi/bnx2i/bnx2i.h4
-rw-r--r--drivers/scsi/bnx2i/bnx2i_hwi.c52
-rw-r--r--drivers/scsi/bnx2i/bnx2i_init.c29
-rw-r--r--drivers/scsi/bnx2i/bnx2i_iscsi.c35
4 files changed, 85 insertions, 35 deletions
diff --git a/drivers/scsi/bnx2i/bnx2i.h b/drivers/scsi/bnx2i/bnx2i.h
index 5edde1a8c04d..6b624e767d3b 100644
--- a/drivers/scsi/bnx2i/bnx2i.h
+++ b/drivers/scsi/bnx2i/bnx2i.h
@@ -232,7 +232,6 @@ struct bnx2i_conn {
232 struct iscsi_cls_conn *cls_conn; 232 struct iscsi_cls_conn *cls_conn;
233 struct bnx2i_hba *hba; 233 struct bnx2i_hba *hba;
234 struct completion cmd_cleanup_cmpl; 234 struct completion cmd_cleanup_cmpl;
235 int is_bound;
236 235
237 u32 iscsi_conn_cid; 236 u32 iscsi_conn_cid;
238#define BNX2I_CID_RESERVED 0x5AFF 237#define BNX2I_CID_RESERVED 0x5AFF
@@ -363,6 +362,7 @@ struct bnx2i_hba {
363 u32 num_ccell; 362 u32 num_ccell;
364 363
365 int ofld_conns_active; 364 int ofld_conns_active;
365 wait_queue_head_t eh_wait;
366 366
367 int max_active_conns; 367 int max_active_conns;
368 struct iscsi_cid_queue cid_que; 368 struct iscsi_cid_queue cid_que;
@@ -382,6 +382,7 @@ struct bnx2i_hba {
382 spinlock_t lock; /* protects hba structure access */ 382 spinlock_t lock; /* protects hba structure access */
383 struct mutex net_dev_lock;/* sync net device access */ 383 struct mutex net_dev_lock;/* sync net device access */
384 384
385 int hba_shutdown_tmo;
385 /* 386 /*
386 * PCI related info. 387 * PCI related info.
387 */ 388 */
@@ -685,6 +686,7 @@ extern unsigned int error_mask1, error_mask2;
685extern u64 iscsi_error_mask; 686extern u64 iscsi_error_mask;
686extern unsigned int en_tcp_dack; 687extern unsigned int en_tcp_dack;
687extern unsigned int event_coal_div; 688extern unsigned int event_coal_div;
689extern unsigned int event_coal_min;
688 690
689extern struct scsi_transport_template *bnx2i_scsi_xport_template; 691extern struct scsi_transport_template *bnx2i_scsi_xport_template;
690extern struct iscsi_transport bnx2i_iscsi_transport; 692extern struct iscsi_transport bnx2i_iscsi_transport;
diff --git a/drivers/scsi/bnx2i/bnx2i_hwi.c b/drivers/scsi/bnx2i/bnx2i_hwi.c
index 5c8d7630c13e..18352ff82101 100644
--- a/drivers/scsi/bnx2i/bnx2i_hwi.c
+++ b/drivers/scsi/bnx2i/bnx2i_hwi.c
@@ -11,6 +11,7 @@
11 * Written by: Anil Veerabhadrappa (anilgv@broadcom.com) 11 * Written by: Anil Veerabhadrappa (anilgv@broadcom.com)
12 */ 12 */
13 13
14#include <linux/gfp.h>
14#include <scsi/scsi_tcq.h> 15#include <scsi/scsi_tcq.h>
15#include <scsi/libiscsi.h> 16#include <scsi/libiscsi.h>
16#include "bnx2i.h" 17#include "bnx2i.h"
@@ -133,20 +134,38 @@ void bnx2i_arm_cq_event_coalescing(struct bnx2i_endpoint *ep, u8 action)
133{ 134{
134 struct bnx2i_5771x_cq_db *cq_db; 135 struct bnx2i_5771x_cq_db *cq_db;
135 u16 cq_index; 136 u16 cq_index;
137 u16 next_index;
138 u32 num_active_cmds;
136 139
140
141 /* Coalesce CQ entries only on 10G devices */
137 if (!test_bit(BNX2I_NX2_DEV_57710, &ep->hba->cnic_dev_type)) 142 if (!test_bit(BNX2I_NX2_DEV_57710, &ep->hba->cnic_dev_type))
138 return; 143 return;
139 144
145 /* Do not update CQ DB multiple times before firmware writes
146 * '0xFFFF' to CQDB->SQN field. Deviation may cause spurious
147 * interrupts and other unwanted results
148 */
149 cq_db = (struct bnx2i_5771x_cq_db *) ep->qp.cq_pgtbl_virt;
150 if (cq_db->sqn[0] && cq_db->sqn[0] != 0xFFFF)
151 return;
152
140 if (action == CNIC_ARM_CQE) { 153 if (action == CNIC_ARM_CQE) {
141 cq_index = ep->qp.cqe_exp_seq_sn + 154 num_active_cmds = ep->num_active_cmds;
142 ep->num_active_cmds / event_coal_div; 155 if (num_active_cmds <= event_coal_min)
143 cq_index %= (ep->qp.cqe_size * 2 + 1); 156 next_index = 1;
144 if (!cq_index) { 157 else
158 next_index = event_coal_min +
159 (num_active_cmds - event_coal_min) / event_coal_div;
160 if (!next_index)
161 next_index = 1;
162 cq_index = ep->qp.cqe_exp_seq_sn + next_index - 1;
163 if (cq_index > ep->qp.cqe_size * 2)
164 cq_index -= ep->qp.cqe_size * 2;
165 if (!cq_index)
145 cq_index = 1; 166 cq_index = 1;
146 cq_db = (struct bnx2i_5771x_cq_db *) 167
147 ep->qp.cq_pgtbl_virt; 168 cq_db->sqn[0] = cq_index;
148 cq_db->sqn[0] = cq_index;
149 }
150 } 169 }
151} 170}
152 171
@@ -366,6 +385,7 @@ int bnx2i_send_iscsi_tmf(struct bnx2i_conn *bnx2i_conn,
366 struct bnx2i_cmd *bnx2i_cmd; 385 struct bnx2i_cmd *bnx2i_cmd;
367 struct bnx2i_tmf_request *tmfabort_wqe; 386 struct bnx2i_tmf_request *tmfabort_wqe;
368 u32 dword; 387 u32 dword;
388 u32 scsi_lun[2];
369 389
370 bnx2i_cmd = (struct bnx2i_cmd *)mtask->dd_data; 390 bnx2i_cmd = (struct bnx2i_cmd *)mtask->dd_data;
371 tmfabort_hdr = (struct iscsi_tm *)mtask->hdr; 391 tmfabort_hdr = (struct iscsi_tm *)mtask->hdr;
@@ -376,27 +396,35 @@ int bnx2i_send_iscsi_tmf(struct bnx2i_conn *bnx2i_conn,
376 tmfabort_wqe->op_attr = 0; 396 tmfabort_wqe->op_attr = 0;
377 tmfabort_wqe->op_attr = 397 tmfabort_wqe->op_attr =
378 ISCSI_TMF_REQUEST_ALWAYS_ONE | ISCSI_TM_FUNC_ABORT_TASK; 398 ISCSI_TMF_REQUEST_ALWAYS_ONE | ISCSI_TM_FUNC_ABORT_TASK;
379 tmfabort_wqe->lun[0] = be32_to_cpu(tmfabort_hdr->lun[0]);
380 tmfabort_wqe->lun[1] = be32_to_cpu(tmfabort_hdr->lun[1]);
381 399
382 tmfabort_wqe->itt = (mtask->itt | (ISCSI_TASK_TYPE_MPATH << 14)); 400 tmfabort_wqe->itt = (mtask->itt | (ISCSI_TASK_TYPE_MPATH << 14));
383 tmfabort_wqe->reserved2 = 0; 401 tmfabort_wqe->reserved2 = 0;
384 tmfabort_wqe->cmd_sn = be32_to_cpu(tmfabort_hdr->cmdsn); 402 tmfabort_wqe->cmd_sn = be32_to_cpu(tmfabort_hdr->cmdsn);
385 403
386 ctask = iscsi_itt_to_task(conn, tmfabort_hdr->rtt); 404 ctask = iscsi_itt_to_task(conn, tmfabort_hdr->rtt);
387 if (!ctask || ctask->sc) 405 if (!ctask || !ctask->sc)
388 /* 406 /*
389 * the iscsi layer must have completed the cmd while this 407 * the iscsi layer must have completed the cmd while this
390 * was starting up. 408 * was starting up.
409 *
410 * Note: In the case of a SCSI cmd timeout, the task's sc
411 * is still active; hence ctask->sc != 0
412 * In this case, the task must be aborted
391 */ 413 */
392 return 0; 414 return 0;
415
393 ref_sc = ctask->sc; 416 ref_sc = ctask->sc;
394 417
418 /* Retrieve LUN directly from the ref_sc */
419 int_to_scsilun(ref_sc->device->lun, (struct scsi_lun *) scsi_lun);
420 tmfabort_wqe->lun[0] = be32_to_cpu(scsi_lun[0]);
421 tmfabort_wqe->lun[1] = be32_to_cpu(scsi_lun[1]);
422
395 if (ref_sc->sc_data_direction == DMA_TO_DEVICE) 423 if (ref_sc->sc_data_direction == DMA_TO_DEVICE)
396 dword = (ISCSI_TASK_TYPE_WRITE << ISCSI_CMD_REQUEST_TYPE_SHIFT); 424 dword = (ISCSI_TASK_TYPE_WRITE << ISCSI_CMD_REQUEST_TYPE_SHIFT);
397 else 425 else
398 dword = (ISCSI_TASK_TYPE_READ << ISCSI_CMD_REQUEST_TYPE_SHIFT); 426 dword = (ISCSI_TASK_TYPE_READ << ISCSI_CMD_REQUEST_TYPE_SHIFT);
399 tmfabort_wqe->ref_itt = (dword | tmfabort_hdr->rtt); 427 tmfabort_wqe->ref_itt = (dword | (tmfabort_hdr->rtt & ISCSI_ITT_MASK));
400 tmfabort_wqe->ref_cmd_sn = be32_to_cpu(tmfabort_hdr->refcmdsn); 428 tmfabort_wqe->ref_cmd_sn = be32_to_cpu(tmfabort_hdr->refcmdsn);
401 429
402 tmfabort_wqe->bd_list_addr_lo = (u32) bnx2i_conn->hba->mp_bd_dma; 430 tmfabort_wqe->bd_list_addr_lo = (u32) bnx2i_conn->hba->mp_bd_dma;
diff --git a/drivers/scsi/bnx2i/bnx2i_init.c b/drivers/scsi/bnx2i/bnx2i_init.c
index 0c4210d48ee8..5d9296c599f6 100644
--- a/drivers/scsi/bnx2i/bnx2i_init.c
+++ b/drivers/scsi/bnx2i/bnx2i_init.c
@@ -17,8 +17,8 @@ static struct list_head adapter_list = LIST_HEAD_INIT(adapter_list);
17static u32 adapter_count; 17static u32 adapter_count;
18 18
19#define DRV_MODULE_NAME "bnx2i" 19#define DRV_MODULE_NAME "bnx2i"
20#define DRV_MODULE_VERSION "2.0.1e" 20#define DRV_MODULE_VERSION "2.1.0"
21#define DRV_MODULE_RELDATE "June 22, 2009" 21#define DRV_MODULE_RELDATE "Dec 06, 2009"
22 22
23static char version[] __devinitdata = 23static char version[] __devinitdata =
24 "Broadcom NetXtreme II iSCSI Driver " DRV_MODULE_NAME \ 24 "Broadcom NetXtreme II iSCSI Driver " DRV_MODULE_NAME \
@@ -32,6 +32,10 @@ MODULE_VERSION(DRV_MODULE_VERSION);
32 32
33static DEFINE_MUTEX(bnx2i_dev_lock); 33static DEFINE_MUTEX(bnx2i_dev_lock);
34 34
35unsigned int event_coal_min = 24;
36module_param(event_coal_min, int, 0664);
37MODULE_PARM_DESC(event_coal_min, "Event Coalescing Minimum Commands");
38
35unsigned int event_coal_div = 1; 39unsigned int event_coal_div = 1;
36module_param(event_coal_div, int, 0664); 40module_param(event_coal_div, int, 0664);
37MODULE_PARM_DESC(event_coal_div, "Event Coalescing Divide Factor"); 41MODULE_PARM_DESC(event_coal_div, "Event Coalescing Divide Factor");
@@ -83,8 +87,12 @@ void bnx2i_identify_device(struct bnx2i_hba *hba)
83 set_bit(BNX2I_NX2_DEV_5709, &hba->cnic_dev_type); 87 set_bit(BNX2I_NX2_DEV_5709, &hba->cnic_dev_type);
84 hba->mail_queue_access = BNX2I_MQ_BIN_MODE; 88 hba->mail_queue_access = BNX2I_MQ_BIN_MODE;
85 } else if (hba->pci_did == PCI_DEVICE_ID_NX2_57710 || 89 } else if (hba->pci_did == PCI_DEVICE_ID_NX2_57710 ||
86 hba->pci_did == PCI_DEVICE_ID_NX2_57711) 90 hba->pci_did == PCI_DEVICE_ID_NX2_57711 ||
91 hba->pci_did == PCI_DEVICE_ID_NX2_57711E)
87 set_bit(BNX2I_NX2_DEV_57710, &hba->cnic_dev_type); 92 set_bit(BNX2I_NX2_DEV_57710, &hba->cnic_dev_type);
93 else
94 printk(KERN_ALERT "bnx2i: unknown device, 0x%x\n",
95 hba->pci_did);
88} 96}
89 97
90 98
@@ -169,11 +177,22 @@ void bnx2i_stop(void *handle)
169 struct bnx2i_hba *hba = handle; 177 struct bnx2i_hba *hba = handle;
170 178
171 /* check if cleanup happened in GOING_DOWN context */ 179 /* check if cleanup happened in GOING_DOWN context */
172 clear_bit(ADAPTER_STATE_UP, &hba->adapter_state);
173 if (!test_and_clear_bit(ADAPTER_STATE_GOING_DOWN, 180 if (!test_and_clear_bit(ADAPTER_STATE_GOING_DOWN,
174 &hba->adapter_state)) 181 &hba->adapter_state))
175 iscsi_host_for_each_session(hba->shost, 182 iscsi_host_for_each_session(hba->shost,
176 bnx2i_drop_session); 183 bnx2i_drop_session);
184
185 /* Wait for all endpoints to be torn down, Chip will be reset once
186 * control returns to network driver. So it is required to cleanup and
187 * release all connection resources before returning from this routine.
188 */
189 wait_event_interruptible_timeout(hba->eh_wait,
190 (hba->ofld_conns_active == 0),
191 hba->hba_shutdown_tmo);
192 /* This flag should be cleared last so that ep_disconnect() gracefully
193 * cleans up connection context
194 */
195 clear_bit(ADAPTER_STATE_UP, &hba->adapter_state);
177} 196}
178 197
179/** 198/**
@@ -363,7 +382,7 @@ static int __init bnx2i_mod_init(void)
363 382
364 printk(KERN_INFO "%s", version); 383 printk(KERN_INFO "%s", version);
365 384
366 if (!is_power_of_2(sq_size)) 385 if (sq_size && !is_power_of_2(sq_size))
367 sq_size = roundup_pow_of_two(sq_size); 386 sq_size = roundup_pow_of_two(sq_size);
368 387
369 mutex_init(&bnx2i_dev_lock); 388 mutex_init(&bnx2i_dev_lock);
diff --git a/drivers/scsi/bnx2i/bnx2i_iscsi.c b/drivers/scsi/bnx2i/bnx2i_iscsi.c
index cafb888c2376..fa68ab34b998 100644
--- a/drivers/scsi/bnx2i/bnx2i_iscsi.c
+++ b/drivers/scsi/bnx2i/bnx2i_iscsi.c
@@ -12,6 +12,7 @@
12 * Written by: Anil Veerabhadrappa (anilgv@broadcom.com) 12 * Written by: Anil Veerabhadrappa (anilgv@broadcom.com)
13 */ 13 */
14 14
15#include <linux/slab.h>
15#include <scsi/scsi_tcq.h> 16#include <scsi/scsi_tcq.h>
16#include <scsi/libiscsi.h> 17#include <scsi/libiscsi.h>
17#include "bnx2i.h" 18#include "bnx2i.h"
@@ -485,7 +486,6 @@ static int bnx2i_setup_cmd_pool(struct bnx2i_hba *hba,
485 struct iscsi_task *task = session->cmds[i]; 486 struct iscsi_task *task = session->cmds[i];
486 struct bnx2i_cmd *cmd = task->dd_data; 487 struct bnx2i_cmd *cmd = task->dd_data;
487 488
488 /* Anil */
489 task->hdr = &cmd->hdr; 489 task->hdr = &cmd->hdr;
490 task->hdr_max = sizeof(struct iscsi_hdr); 490 task->hdr_max = sizeof(struct iscsi_hdr);
491 491
@@ -765,7 +765,6 @@ struct bnx2i_hba *bnx2i_alloc_hba(struct cnic_dev *cnic)
765 hba->pci_svid = hba->pcidev->subsystem_vendor; 765 hba->pci_svid = hba->pcidev->subsystem_vendor;
766 hba->pci_func = PCI_FUNC(hba->pcidev->devfn); 766 hba->pci_func = PCI_FUNC(hba->pcidev->devfn);
767 hba->pci_devno = PCI_SLOT(hba->pcidev->devfn); 767 hba->pci_devno = PCI_SLOT(hba->pcidev->devfn);
768 bnx2i_identify_device(hba);
769 768
770 bnx2i_identify_device(hba); 769 bnx2i_identify_device(hba);
771 bnx2i_setup_host_queue_size(hba, shost); 770 bnx2i_setup_host_queue_size(hba, shost);
@@ -821,6 +820,11 @@ struct bnx2i_hba *bnx2i_alloc_hba(struct cnic_dev *cnic)
821 820
822 spin_lock_init(&hba->lock); 821 spin_lock_init(&hba->lock);
823 mutex_init(&hba->net_dev_lock); 822 mutex_init(&hba->net_dev_lock);
823 init_waitqueue_head(&hba->eh_wait);
824 if (test_bit(BNX2I_NX2_DEV_57710, &hba->cnic_dev_type))
825 hba->hba_shutdown_tmo = 240 * HZ;
826 else /* 5706/5708/5709 */
827 hba->hba_shutdown_tmo = 30 * HZ;
824 828
825 if (iscsi_host_add(shost, &hba->pcidev->dev)) 829 if (iscsi_host_add(shost, &hba->pcidev->dev))
826 goto free_dump_mem; 830 goto free_dump_mem;
@@ -1161,9 +1165,6 @@ static int bnx2i_task_xmit(struct iscsi_task *task)
1161 struct bnx2i_cmd *cmd = task->dd_data; 1165 struct bnx2i_cmd *cmd = task->dd_data;
1162 struct iscsi_cmd *hdr = (struct iscsi_cmd *) task->hdr; 1166 struct iscsi_cmd *hdr = (struct iscsi_cmd *) task->hdr;
1163 1167
1164 if (!bnx2i_conn->is_bound)
1165 return -ENOTCONN;
1166
1167 /* 1168 /*
1168 * If there is no scsi_cmnd this must be a mgmt task 1169 * If there is no scsi_cmnd this must be a mgmt task
1169 */ 1170 */
@@ -1371,7 +1372,6 @@ static int bnx2i_conn_bind(struct iscsi_cls_session *cls_session,
1371 bnx2i_conn->ep = bnx2i_ep; 1372 bnx2i_conn->ep = bnx2i_ep;
1372 bnx2i_conn->iscsi_conn_cid = bnx2i_ep->ep_iscsi_cid; 1373 bnx2i_conn->iscsi_conn_cid = bnx2i_ep->ep_iscsi_cid;
1373 bnx2i_conn->fw_cid = bnx2i_ep->ep_cid; 1374 bnx2i_conn->fw_cid = bnx2i_ep->ep_cid;
1374 bnx2i_conn->is_bound = 1;
1375 1375
1376 ret_code = bnx2i_bind_conn_to_iscsi_cid(hba, bnx2i_conn, 1376 ret_code = bnx2i_bind_conn_to_iscsi_cid(hba, bnx2i_conn,
1377 bnx2i_ep->ep_iscsi_cid); 1377 bnx2i_ep->ep_iscsi_cid);
@@ -1432,8 +1432,8 @@ static int bnx2i_conn_get_param(struct iscsi_cls_conn *cls_conn,
1432 break; 1432 break;
1433 case ISCSI_PARAM_CONN_ADDRESS: 1433 case ISCSI_PARAM_CONN_ADDRESS:
1434 if (bnx2i_conn->ep) 1434 if (bnx2i_conn->ep)
1435 len = sprintf(buf, NIPQUAD_FMT "\n", 1435 len = sprintf(buf, "%pI4\n",
1436 NIPQUAD(bnx2i_conn->ep->cm_sk->dst_ip)); 1436 &bnx2i_conn->ep->cm_sk->dst_ip);
1437 break; 1437 break;
1438 default: 1438 default:
1439 return iscsi_conn_get_param(cls_conn, param, buf); 1439 return iscsi_conn_get_param(cls_conn, param, buf);
@@ -1663,8 +1663,8 @@ static struct iscsi_endpoint *bnx2i_ep_connect(struct Scsi_Host *shost,
1663 */ 1663 */
1664 hba = bnx2i_check_route(dst_addr); 1664 hba = bnx2i_check_route(dst_addr);
1665 1665
1666 if (!hba) { 1666 if (!hba || test_bit(ADAPTER_STATE_GOING_DOWN, &hba->adapter_state)) {
1667 rc = -ENOMEM; 1667 rc = -EINVAL;
1668 goto check_busy; 1668 goto check_busy;
1669 } 1669 }
1670 1670
@@ -1809,7 +1809,7 @@ static int bnx2i_ep_poll(struct iscsi_endpoint *ep, int timeout_ms)
1809 (bnx2i_ep->state == 1809 (bnx2i_ep->state ==
1810 EP_STATE_CONNECT_COMPL)), 1810 EP_STATE_CONNECT_COMPL)),
1811 msecs_to_jiffies(timeout_ms)); 1811 msecs_to_jiffies(timeout_ms));
1812 if (!rc || (bnx2i_ep->state == EP_STATE_OFLD_FAILED)) 1812 if (bnx2i_ep->state == EP_STATE_OFLD_FAILED)
1813 rc = -1; 1813 rc = -1;
1814 1814
1815 if (rc > 0) 1815 if (rc > 0)
@@ -1883,7 +1883,7 @@ static void bnx2i_ep_disconnect(struct iscsi_endpoint *ep)
1883 1883
1884 bnx2i_ep = ep->dd_data; 1884 bnx2i_ep = ep->dd_data;
1885 1885
1886 /* driver should not attempt connection cleanup untill TCP_CONNECT 1886 /* driver should not attempt connection cleanup until TCP_CONNECT
1887 * completes either successfully or fails. Timeout is 9-secs, so 1887 * completes either successfully or fails. Timeout is 9-secs, so
1888 * wait for it to complete 1888 * wait for it to complete
1889 */ 1889 */
@@ -1896,9 +1896,7 @@ static void bnx2i_ep_disconnect(struct iscsi_endpoint *ep)
1896 conn = bnx2i_conn->cls_conn->dd_data; 1896 conn = bnx2i_conn->cls_conn->dd_data;
1897 session = conn->session; 1897 session = conn->session;
1898 1898
1899 spin_lock_bh(&session->lock); 1899 iscsi_suspend_queue(conn);
1900 bnx2i_conn->is_bound = 0;
1901 spin_unlock_bh(&session->lock);
1902 } 1900 }
1903 1901
1904 hba = bnx2i_ep->hba; 1902 hba = bnx2i_ep->hba;
@@ -1964,6 +1962,8 @@ return_bnx2i_ep:
1964 1962
1965 if (!hba->ofld_conns_active) 1963 if (!hba->ofld_conns_active)
1966 bnx2i_unreg_dev_all(); 1964 bnx2i_unreg_dev_all();
1965
1966 wake_up_interruptible(&hba->eh_wait);
1967} 1967}
1968 1968
1969 1969
@@ -1997,7 +1997,8 @@ static struct scsi_host_template bnx2i_host_template = {
1997 .queuecommand = iscsi_queuecommand, 1997 .queuecommand = iscsi_queuecommand,
1998 .eh_abort_handler = iscsi_eh_abort, 1998 .eh_abort_handler = iscsi_eh_abort,
1999 .eh_device_reset_handler = iscsi_eh_device_reset, 1999 .eh_device_reset_handler = iscsi_eh_device_reset,
2000 .eh_target_reset_handler = iscsi_eh_target_reset, 2000 .eh_target_reset_handler = iscsi_eh_recover_target,
2001 .change_queue_depth = iscsi_change_queue_depth,
2001 .can_queue = 1024, 2002 .can_queue = 1024,
2002 .max_sectors = 127, 2003 .max_sectors = 127,
2003 .cmd_per_lun = 32, 2004 .cmd_per_lun = 32,
@@ -2034,7 +2035,7 @@ struct iscsi_transport bnx2i_iscsi_transport = {
2034 ISCSI_USERNAME | ISCSI_PASSWORD | 2035 ISCSI_USERNAME | ISCSI_PASSWORD |
2035 ISCSI_USERNAME_IN | ISCSI_PASSWORD_IN | 2036 ISCSI_USERNAME_IN | ISCSI_PASSWORD_IN |
2036 ISCSI_FAST_ABORT | ISCSI_ABORT_TMO | 2037 ISCSI_FAST_ABORT | ISCSI_ABORT_TMO |
2037 ISCSI_LU_RESET_TMO | 2038 ISCSI_LU_RESET_TMO | ISCSI_TGT_RESET_TMO |
2038 ISCSI_PING_TMO | ISCSI_RECV_TMO | 2039 ISCSI_PING_TMO | ISCSI_RECV_TMO |
2039 ISCSI_IFACE_NAME | ISCSI_INITIATOR_NAME, 2040 ISCSI_IFACE_NAME | ISCSI_INITIATOR_NAME,
2040 .host_param_mask = ISCSI_HOST_HWADDRESS | ISCSI_HOST_NETDEV_NAME, 2041 .host_param_mask = ISCSI_HOST_HWADDRESS | ISCSI_HOST_NETDEV_NAME,