diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-02-20 21:02:38 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-02-20 21:02:38 -0500 |
| commit | b5482d475c6eff1ebc0b1cee73421ef26f1d046c (patch) | |
| tree | 0c41cd3a6dbb2925711901ba5ae9a43c5d2d57ff | |
| parent | 264b29900657f53fb4ddc8bf08f447c4c227b2cf (diff) | |
| parent | 822c05b6335534f74f90bd0edc12aeb5a591117a (diff) | |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-rc-fixes-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-rc-fixes-2.6:
[SCSI] qla2xxx: Update version number to 8.03.00-k3.
[SCSI] qla2xxx: Mask out 'reserved' bits while processing FLT regions.
[SCSI] qla2xxx: Correct slab-error overwrite during vport creation and deletion.
[SCSI] qla2xxx: Properly acknowledge IDC notification messages.
[SCSI] qla2xxx: Remove interrupt request bit check in the response processing path in multiq mode.
[SCSI] lpfc: introduce missing kfree
[SCSI] libiscsi: Fix scsi command timeout oops in iscsi_eh_timed_out
[SCSI] qla2xxx: fix Kernel Panic with Qlogic 2472 Card.
[SCSI] ibmvfc: Increase cancel timeout
[SCSI] ibmvfc: Fix rport relogin
[SCSI] ibmvfc: Fix command timeout errors
[SCSI] sg: fix device number in blktrace data
[SCSI] scsi_scan: add missing interim SDEV_DEL state if slave_alloc fails
[SCSI] ibmvscsi: Correct DMA mapping leak
| -rw-r--r-- | drivers/scsi/ibmvscsi/ibmvfc.c | 15 | ||||
| -rw-r--r-- | drivers/scsi/ibmvscsi/ibmvfc.h | 2 | ||||
| -rw-r--r-- | drivers/scsi/ibmvscsi/ibmvscsi.c | 1 | ||||
| -rw-r--r-- | drivers/scsi/libiscsi.c | 3 | ||||
| -rw-r--r-- | drivers/scsi/lpfc/lpfc_els.c | 1 | ||||
| -rw-r--r-- | drivers/scsi/qla2xxx/qla_attr.c | 13 | ||||
| -rw-r--r-- | drivers/scsi/qla2xxx/qla_def.h | 5 | ||||
| -rw-r--r-- | drivers/scsi/qla2xxx/qla_devtbl.h | 2 | ||||
| -rw-r--r-- | drivers/scsi/qla2xxx/qla_fw.h | 2 | ||||
| -rw-r--r-- | drivers/scsi/qla2xxx/qla_gbl.h | 9 | ||||
| -rw-r--r-- | drivers/scsi/qla2xxx/qla_init.c | 7 | ||||
| -rw-r--r-- | drivers/scsi/qla2xxx/qla_isr.c | 58 | ||||
| -rw-r--r-- | drivers/scsi/qla2xxx/qla_mbx.c | 40 | ||||
| -rw-r--r-- | drivers/scsi/qla2xxx/qla_mid.c | 12 | ||||
| -rw-r--r-- | drivers/scsi/qla2xxx/qla_os.c | 16 | ||||
| -rw-r--r-- | drivers/scsi/qla2xxx/qla_sup.c | 2 | ||||
| -rw-r--r-- | drivers/scsi/qla2xxx/qla_version.h | 2 | ||||
| -rw-r--r-- | drivers/scsi/scsi_scan.c | 1 | ||||
| -rw-r--r-- | drivers/scsi/sg.c | 2 |
19 files changed, 131 insertions, 62 deletions
diff --git a/drivers/scsi/ibmvscsi/ibmvfc.c b/drivers/scsi/ibmvscsi/ibmvfc.c index a1a511bdec8c..ed1e728763a2 100644 --- a/drivers/scsi/ibmvscsi/ibmvfc.c +++ b/drivers/scsi/ibmvscsi/ibmvfc.c | |||
| @@ -1573,9 +1573,6 @@ static int ibmvfc_queuecommand(struct scsi_cmnd *cmnd, | |||
| 1573 | vfc_cmd->resp_len = sizeof(vfc_cmd->rsp); | 1573 | vfc_cmd->resp_len = sizeof(vfc_cmd->rsp); |
| 1574 | vfc_cmd->cancel_key = (unsigned long)cmnd->device->hostdata; | 1574 | vfc_cmd->cancel_key = (unsigned long)cmnd->device->hostdata; |
| 1575 | vfc_cmd->tgt_scsi_id = rport->port_id; | 1575 | vfc_cmd->tgt_scsi_id = rport->port_id; |
| 1576 | if ((rport->supported_classes & FC_COS_CLASS3) && | ||
| 1577 | (fc_host_supported_classes(vhost->host) & FC_COS_CLASS3)) | ||
| 1578 | vfc_cmd->flags = IBMVFC_CLASS_3_ERR; | ||
| 1579 | vfc_cmd->iu.xfer_len = scsi_bufflen(cmnd); | 1576 | vfc_cmd->iu.xfer_len = scsi_bufflen(cmnd); |
| 1580 | int_to_scsilun(cmnd->device->lun, &vfc_cmd->iu.lun); | 1577 | int_to_scsilun(cmnd->device->lun, &vfc_cmd->iu.lun); |
| 1581 | memcpy(vfc_cmd->iu.cdb, cmnd->cmnd, cmnd->cmd_len); | 1578 | memcpy(vfc_cmd->iu.cdb, cmnd->cmnd, cmnd->cmd_len); |
| @@ -3266,6 +3263,7 @@ static int ibmvfc_alloc_target(struct ibmvfc_host *vhost, u64 scsi_id) | |||
| 3266 | return -ENOMEM; | 3263 | return -ENOMEM; |
| 3267 | } | 3264 | } |
| 3268 | 3265 | ||
| 3266 | memset(tgt, 0, sizeof(*tgt)); | ||
| 3269 | tgt->scsi_id = scsi_id; | 3267 | tgt->scsi_id = scsi_id; |
| 3270 | tgt->new_scsi_id = scsi_id; | 3268 | tgt->new_scsi_id = scsi_id; |
| 3271 | tgt->vhost = vhost; | 3269 | tgt->vhost = vhost; |
| @@ -3576,9 +3574,18 @@ static void ibmvfc_log_ae(struct ibmvfc_host *vhost, int events) | |||
| 3576 | static void ibmvfc_tgt_add_rport(struct ibmvfc_target *tgt) | 3574 | static void ibmvfc_tgt_add_rport(struct ibmvfc_target *tgt) |
| 3577 | { | 3575 | { |
| 3578 | struct ibmvfc_host *vhost = tgt->vhost; | 3576 | struct ibmvfc_host *vhost = tgt->vhost; |
| 3579 | struct fc_rport *rport; | 3577 | struct fc_rport *rport = tgt->rport; |
| 3580 | unsigned long flags; | 3578 | unsigned long flags; |
| 3581 | 3579 | ||
| 3580 | if (rport) { | ||
| 3581 | tgt_dbg(tgt, "Setting rport roles\n"); | ||
| 3582 | fc_remote_port_rolechg(rport, tgt->ids.roles); | ||
| 3583 | spin_lock_irqsave(vhost->host->host_lock, flags); | ||
| 3584 | ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_NONE); | ||
| 3585 | spin_unlock_irqrestore(vhost->host->host_lock, flags); | ||
| 3586 | return; | ||
| 3587 | } | ||
| 3588 | |||
| 3582 | tgt_dbg(tgt, "Adding rport\n"); | 3589 | tgt_dbg(tgt, "Adding rport\n"); |
| 3583 | rport = fc_remote_port_add(vhost->host, 0, &tgt->ids); | 3590 | rport = fc_remote_port_add(vhost->host, 0, &tgt->ids); |
| 3584 | spin_lock_irqsave(vhost->host->host_lock, flags); | 3591 | spin_lock_irqsave(vhost->host->host_lock, flags); |
diff --git a/drivers/scsi/ibmvscsi/ibmvfc.h b/drivers/scsi/ibmvscsi/ibmvfc.h index 87dafd0f8d44..b21e071b9862 100644 --- a/drivers/scsi/ibmvscsi/ibmvfc.h +++ b/drivers/scsi/ibmvscsi/ibmvfc.h | |||
| @@ -32,7 +32,7 @@ | |||
| 32 | #define IBMVFC_DRIVER_VERSION "1.0.4" | 32 | #define IBMVFC_DRIVER_VERSION "1.0.4" |
| 33 | #define IBMVFC_DRIVER_DATE "(November 14, 2008)" | 33 | #define IBMVFC_DRIVER_DATE "(November 14, 2008)" |
| 34 | 34 | ||
| 35 | #define IBMVFC_DEFAULT_TIMEOUT 15 | 35 | #define IBMVFC_DEFAULT_TIMEOUT 60 |
| 36 | #define IBMVFC_INIT_TIMEOUT 120 | 36 | #define IBMVFC_INIT_TIMEOUT 120 |
| 37 | #define IBMVFC_MAX_REQUESTS_DEFAULT 100 | 37 | #define IBMVFC_MAX_REQUESTS_DEFAULT 100 |
| 38 | 38 | ||
diff --git a/drivers/scsi/ibmvscsi/ibmvscsi.c b/drivers/scsi/ibmvscsi/ibmvscsi.c index 74d07d137dae..c9aa7611e408 100644 --- a/drivers/scsi/ibmvscsi/ibmvscsi.c +++ b/drivers/scsi/ibmvscsi/ibmvscsi.c | |||
| @@ -432,6 +432,7 @@ static int map_sg_data(struct scsi_cmnd *cmd, | |||
| 432 | sdev_printk(KERN_ERR, cmd->device, | 432 | sdev_printk(KERN_ERR, cmd->device, |
| 433 | "Can't allocate memory " | 433 | "Can't allocate memory " |
| 434 | "for indirect table\n"); | 434 | "for indirect table\n"); |
| 435 | scsi_dma_unmap(cmd); | ||
| 435 | return 0; | 436 | return 0; |
| 436 | } | 437 | } |
| 437 | } | 438 | } |
diff --git a/drivers/scsi/libiscsi.c b/drivers/scsi/libiscsi.c index 257c24115de9..809d32d95c76 100644 --- a/drivers/scsi/libiscsi.c +++ b/drivers/scsi/libiscsi.c | |||
| @@ -1998,6 +1998,8 @@ int iscsi_host_add(struct Scsi_Host *shost, struct device *pdev) | |||
| 1998 | if (!shost->can_queue) | 1998 | if (!shost->can_queue) |
| 1999 | shost->can_queue = ISCSI_DEF_XMIT_CMDS_MAX; | 1999 | shost->can_queue = ISCSI_DEF_XMIT_CMDS_MAX; |
| 2000 | 2000 | ||
| 2001 | if (!shost->transportt->eh_timed_out) | ||
| 2002 | shost->transportt->eh_timed_out = iscsi_eh_cmd_timed_out; | ||
| 2001 | return scsi_add_host(shost, pdev); | 2003 | return scsi_add_host(shost, pdev); |
| 2002 | } | 2004 | } |
| 2003 | EXPORT_SYMBOL_GPL(iscsi_host_add); | 2005 | EXPORT_SYMBOL_GPL(iscsi_host_add); |
| @@ -2020,7 +2022,6 @@ struct Scsi_Host *iscsi_host_alloc(struct scsi_host_template *sht, | |||
| 2020 | shost = scsi_host_alloc(sht, sizeof(struct iscsi_host) + dd_data_size); | 2022 | shost = scsi_host_alloc(sht, sizeof(struct iscsi_host) + dd_data_size); |
| 2021 | if (!shost) | 2023 | if (!shost) |
| 2022 | return NULL; | 2024 | return NULL; |
| 2023 | shost->transportt->eh_timed_out = iscsi_eh_cmd_timed_out; | ||
| 2024 | 2025 | ||
| 2025 | if (qdepth > ISCSI_MAX_CMD_PER_LUN || qdepth < 1) { | 2026 | if (qdepth > ISCSI_MAX_CMD_PER_LUN || qdepth < 1) { |
| 2026 | if (qdepth != 0) | 2027 | if (qdepth != 0) |
diff --git a/drivers/scsi/lpfc/lpfc_els.c b/drivers/scsi/lpfc/lpfc_els.c index a8f30bdaff69..a7302480bc4a 100644 --- a/drivers/scsi/lpfc/lpfc_els.c +++ b/drivers/scsi/lpfc/lpfc_els.c | |||
| @@ -5258,6 +5258,7 @@ lpfc_send_els_event(struct lpfc_vport *vport, | |||
| 5258 | sizeof(struct lpfc_name)); | 5258 | sizeof(struct lpfc_name)); |
| 5259 | break; | 5259 | break; |
| 5260 | default: | 5260 | default: |
| 5261 | kfree(els_data); | ||
| 5261 | return; | 5262 | return; |
| 5262 | } | 5263 | } |
| 5263 | memcpy(els_data->wwpn, &ndlp->nlp_portname, sizeof(struct lpfc_name)); | 5264 | memcpy(els_data->wwpn, &ndlp->nlp_portname, sizeof(struct lpfc_name)); |
diff --git a/drivers/scsi/qla2xxx/qla_attr.c b/drivers/scsi/qla2xxx/qla_attr.c index 33a3c13fd893..f4c57227ec18 100644 --- a/drivers/scsi/qla2xxx/qla_attr.c +++ b/drivers/scsi/qla2xxx/qla_attr.c | |||
| @@ -1265,13 +1265,6 @@ qla24xx_vport_delete(struct fc_vport *fc_vport) | |||
| 1265 | test_bit(FCPORT_UPDATE_NEEDED, &vha->dpc_flags)) | 1265 | test_bit(FCPORT_UPDATE_NEEDED, &vha->dpc_flags)) |
| 1266 | msleep(1000); | 1266 | msleep(1000); |
| 1267 | 1267 | ||
| 1268 | if (ha->mqenable) { | ||
| 1269 | if (qla25xx_delete_queues(vha, 0) != QLA_SUCCESS) | ||
| 1270 | qla_printk(KERN_WARNING, ha, | ||
| 1271 | "Queue delete failed.\n"); | ||
| 1272 | vha->req_ques[0] = ha->req_q_map[0]->id; | ||
| 1273 | } | ||
| 1274 | |||
| 1275 | qla24xx_disable_vp(vha); | 1268 | qla24xx_disable_vp(vha); |
| 1276 | 1269 | ||
| 1277 | fc_remove_host(vha->host); | 1270 | fc_remove_host(vha->host); |
| @@ -1293,6 +1286,12 @@ qla24xx_vport_delete(struct fc_vport *fc_vport) | |||
| 1293 | vha->host_no, vha->vp_idx, vha)); | 1286 | vha->host_no, vha->vp_idx, vha)); |
| 1294 | } | 1287 | } |
| 1295 | 1288 | ||
| 1289 | if (ha->mqenable) { | ||
| 1290 | if (qla25xx_delete_queues(vha, 0) != QLA_SUCCESS) | ||
| 1291 | qla_printk(KERN_WARNING, ha, | ||
| 1292 | "Queue delete failed.\n"); | ||
| 1293 | } | ||
| 1294 | |||
| 1296 | scsi_host_put(vha->host); | 1295 | scsi_host_put(vha->host); |
| 1297 | qla_printk(KERN_INFO, ha, "vport %d deleted\n", id); | 1296 | qla_printk(KERN_INFO, ha, "vport %d deleted\n", id); |
| 1298 | return 0; | 1297 | return 0; |
diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h index 023ee77fb027..e0c5bb54b258 100644 --- a/drivers/scsi/qla2xxx/qla_def.h +++ b/drivers/scsi/qla2xxx/qla_def.h | |||
| @@ -2135,6 +2135,7 @@ struct qla_msix_entry { | |||
| 2135 | /* Work events. */ | 2135 | /* Work events. */ |
| 2136 | enum qla_work_type { | 2136 | enum qla_work_type { |
| 2137 | QLA_EVT_AEN, | 2137 | QLA_EVT_AEN, |
| 2138 | QLA_EVT_IDC_ACK, | ||
| 2138 | }; | 2139 | }; |
| 2139 | 2140 | ||
| 2140 | 2141 | ||
| @@ -2149,6 +2150,10 @@ struct qla_work_evt { | |||
| 2149 | enum fc_host_event_code code; | 2150 | enum fc_host_event_code code; |
| 2150 | u32 data; | 2151 | u32 data; |
| 2151 | } aen; | 2152 | } aen; |
| 2153 | struct { | ||
| 2154 | #define QLA_IDC_ACK_REGS 7 | ||
| 2155 | uint16_t mb[QLA_IDC_ACK_REGS]; | ||
| 2156 | } idc_ack; | ||
| 2152 | } u; | 2157 | } u; |
| 2153 | }; | 2158 | }; |
| 2154 | 2159 | ||
diff --git a/drivers/scsi/qla2xxx/qla_devtbl.h b/drivers/scsi/qla2xxx/qla_devtbl.h index d78d35e681ab..d6ea69df7c5c 100644 --- a/drivers/scsi/qla2xxx/qla_devtbl.h +++ b/drivers/scsi/qla2xxx/qla_devtbl.h | |||
| @@ -72,7 +72,7 @@ static char *qla2x00_model_name[QLA_MODEL_NAMES*2] = { | |||
| 72 | "QLA2462", "Sun PCI-X 2.0 to 4Gb FC, Dual Channel", /* 0x141 */ | 72 | "QLA2462", "Sun PCI-X 2.0 to 4Gb FC, Dual Channel", /* 0x141 */ |
| 73 | "QLE2460", "Sun PCI-Express to 2Gb FC, Single Channel", /* 0x142 */ | 73 | "QLE2460", "Sun PCI-Express to 2Gb FC, Single Channel", /* 0x142 */ |
| 74 | "QLE2462", "Sun PCI-Express to 4Gb FC, Single Channel", /* 0x143 */ | 74 | "QLE2462", "Sun PCI-Express to 4Gb FC, Single Channel", /* 0x143 */ |
| 75 | "QEM2462" "Server I/O Module 4Gb FC, Dual Channel", /* 0x144 */ | 75 | "QEM2462", "Server I/O Module 4Gb FC, Dual Channel", /* 0x144 */ |
| 76 | "QLE2440", "PCI-Express to 4Gb FC, Single Channel", /* 0x145 */ | 76 | "QLE2440", "PCI-Express to 4Gb FC, Single Channel", /* 0x145 */ |
| 77 | "QLE2464", "PCI-Express to 4Gb FC, Quad Channel", /* 0x146 */ | 77 | "QLE2464", "PCI-Express to 4Gb FC, Quad Channel", /* 0x146 */ |
| 78 | "QLA2440", "PCI-X 2.0 to 4Gb FC, Single Channel", /* 0x147 */ | 78 | "QLA2440", "PCI-X 2.0 to 4Gb FC, Single Channel", /* 0x147 */ |
diff --git a/drivers/scsi/qla2xxx/qla_fw.h b/drivers/scsi/qla2xxx/qla_fw.h index 7abb045a0410..ffff42554087 100644 --- a/drivers/scsi/qla2xxx/qla_fw.h +++ b/drivers/scsi/qla2xxx/qla_fw.h | |||
| @@ -1402,6 +1402,8 @@ struct access_chip_rsp_84xx { | |||
| 1402 | #define MBA_IDC_NOTIFY 0x8101 | 1402 | #define MBA_IDC_NOTIFY 0x8101 |
| 1403 | #define MBA_IDC_TIME_EXT 0x8102 | 1403 | #define MBA_IDC_TIME_EXT 0x8102 |
| 1404 | 1404 | ||
| 1405 | #define MBC_IDC_ACK 0x101 | ||
| 1406 | |||
| 1405 | struct nvram_81xx { | 1407 | struct nvram_81xx { |
| 1406 | /* NVRAM header. */ | 1408 | /* NVRAM header. */ |
| 1407 | uint8_t id[4]; | 1409 | uint8_t id[4]; |
diff --git a/drivers/scsi/qla2xxx/qla_gbl.h b/drivers/scsi/qla2xxx/qla_gbl.h index a336b4bc81a7..6de283f8f111 100644 --- a/drivers/scsi/qla2xxx/qla_gbl.h +++ b/drivers/scsi/qla2xxx/qla_gbl.h | |||
| @@ -72,6 +72,7 @@ extern int qla2x00_loop_reset(scsi_qla_host_t *); | |||
| 72 | extern void qla2x00_abort_all_cmds(scsi_qla_host_t *, int); | 72 | extern void qla2x00_abort_all_cmds(scsi_qla_host_t *, int); |
| 73 | extern int qla2x00_post_aen_work(struct scsi_qla_host *, enum | 73 | extern int qla2x00_post_aen_work(struct scsi_qla_host *, enum |
| 74 | fc_host_event_code, u32); | 74 | fc_host_event_code, u32); |
| 75 | extern int qla2x00_post_idc_ack_work(struct scsi_qla_host *, uint16_t *); | ||
| 75 | 76 | ||
| 76 | extern void qla2x00_abort_fcport_cmds(fc_port_t *); | 77 | extern void qla2x00_abort_fcport_cmds(fc_port_t *); |
| 77 | extern struct scsi_qla_host *qla2x00_create_host(struct scsi_host_template *, | 78 | extern struct scsi_qla_host *qla2x00_create_host(struct scsi_host_template *, |
| @@ -266,6 +267,8 @@ qla2x00_set_idma_speed(scsi_qla_host_t *, uint16_t, uint16_t, uint16_t *); | |||
| 266 | 267 | ||
| 267 | extern int qla84xx_verify_chip(struct scsi_qla_host *, uint16_t *); | 268 | extern int qla84xx_verify_chip(struct scsi_qla_host *, uint16_t *); |
| 268 | 269 | ||
| 270 | extern int qla81xx_idc_ack(scsi_qla_host_t *, uint16_t *); | ||
| 271 | |||
| 269 | /* | 272 | /* |
| 270 | * Global Function Prototypes in qla_isr.c source file. | 273 | * Global Function Prototypes in qla_isr.c source file. |
| 271 | */ | 274 | */ |
| @@ -376,10 +379,8 @@ extern int qla2x00_dfs_remove(scsi_qla_host_t *); | |||
| 376 | 379 | ||
| 377 | /* Globa function prototypes for multi-q */ | 380 | /* Globa function prototypes for multi-q */ |
| 378 | extern int qla25xx_request_irq(struct rsp_que *); | 381 | extern int qla25xx_request_irq(struct rsp_que *); |
| 379 | extern int qla25xx_init_req_que(struct scsi_qla_host *, struct req_que *, | 382 | extern int qla25xx_init_req_que(struct scsi_qla_host *, struct req_que *); |
| 380 | uint8_t); | 383 | extern int qla25xx_init_rsp_que(struct scsi_qla_host *, struct rsp_que *); |
| 381 | extern int qla25xx_init_rsp_que(struct scsi_qla_host *, struct rsp_que *, | ||
| 382 | uint8_t); | ||
| 383 | extern int qla25xx_create_req_que(struct qla_hw_data *, uint16_t, uint8_t, | 384 | extern int qla25xx_create_req_que(struct qla_hw_data *, uint16_t, uint8_t, |
| 384 | uint16_t, uint8_t, uint8_t); | 385 | uint16_t, uint8_t, uint8_t); |
| 385 | extern int qla25xx_create_rsp_que(struct qla_hw_data *, uint16_t, uint8_t, | 386 | extern int qla25xx_create_rsp_que(struct qla_hw_data *, uint16_t, uint8_t, |
diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c index f6368a1d3021..986501759ad4 100644 --- a/drivers/scsi/qla2xxx/qla_init.c +++ b/drivers/scsi/qla2xxx/qla_init.c | |||
| @@ -1226,9 +1226,8 @@ qla24xx_config_rings(struct scsi_qla_host *vha) | |||
| 1226 | icb->firmware_options_2 |= | 1226 | icb->firmware_options_2 |= |
| 1227 | __constant_cpu_to_le32(BIT_18); | 1227 | __constant_cpu_to_le32(BIT_18); |
| 1228 | 1228 | ||
| 1229 | icb->firmware_options_2 |= __constant_cpu_to_le32(BIT_22); | 1229 | icb->firmware_options_2 &= __constant_cpu_to_le32(~BIT_22); |
| 1230 | icb->firmware_options_2 |= __constant_cpu_to_le32(BIT_23); | 1230 | icb->firmware_options_2 |= __constant_cpu_to_le32(BIT_23); |
| 1231 | ha->rsp_q_map[0]->options = icb->firmware_options_2; | ||
| 1232 | 1231 | ||
| 1233 | WRT_REG_DWORD(®->isp25mq.req_q_in, 0); | 1232 | WRT_REG_DWORD(®->isp25mq.req_q_in, 0); |
| 1234 | WRT_REG_DWORD(®->isp25mq.req_q_out, 0); | 1233 | WRT_REG_DWORD(®->isp25mq.req_q_out, 0); |
| @@ -3493,7 +3492,7 @@ qla25xx_init_queues(struct qla_hw_data *ha) | |||
| 3493 | rsp = ha->rsp_q_map[i]; | 3492 | rsp = ha->rsp_q_map[i]; |
| 3494 | if (rsp) { | 3493 | if (rsp) { |
| 3495 | rsp->options &= ~BIT_0; | 3494 | rsp->options &= ~BIT_0; |
| 3496 | ret = qla25xx_init_rsp_que(base_vha, rsp, rsp->options); | 3495 | ret = qla25xx_init_rsp_que(base_vha, rsp); |
| 3497 | if (ret != QLA_SUCCESS) | 3496 | if (ret != QLA_SUCCESS) |
| 3498 | DEBUG2_17(printk(KERN_WARNING | 3497 | DEBUG2_17(printk(KERN_WARNING |
| 3499 | "%s Rsp que:%d init failed\n", __func__, | 3498 | "%s Rsp que:%d init failed\n", __func__, |
| @@ -3507,7 +3506,7 @@ qla25xx_init_queues(struct qla_hw_data *ha) | |||
| 3507 | if (req) { | 3506 | if (req) { |
| 3508 | /* Clear outstanding commands array. */ | 3507 | /* Clear outstanding commands array. */ |
| 3509 | req->options &= ~BIT_0; | 3508 | req->options &= ~BIT_0; |
| 3510 | ret = qla25xx_init_req_que(base_vha, req, req->options); | 3509 | ret = qla25xx_init_req_que(base_vha, req); |
| 3511 | if (ret != QLA_SUCCESS) | 3510 | if (ret != QLA_SUCCESS) |
| 3512 | DEBUG2_17(printk(KERN_WARNING | 3511 | DEBUG2_17(printk(KERN_WARNING |
| 3513 | "%s Req que:%d init failed\n", __func__, | 3512 | "%s Req que:%d init failed\n", __func__, |
diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c index e28ad81baf1e..f250e5b7897c 100644 --- a/drivers/scsi/qla2xxx/qla_isr.c +++ b/drivers/scsi/qla2xxx/qla_isr.c | |||
| @@ -266,6 +266,40 @@ qla2x00_mbx_completion(scsi_qla_host_t *vha, uint16_t mb0) | |||
| 266 | } | 266 | } |
| 267 | } | 267 | } |
| 268 | 268 | ||
| 269 | static void | ||
| 270 | qla81xx_idc_event(scsi_qla_host_t *vha, uint16_t aen, uint16_t descr) | ||
| 271 | { | ||
| 272 | static char *event[] = | ||
| 273 | { "Complete", "Request Notification", "Time Extension" }; | ||
| 274 | int rval; | ||
| 275 | struct device_reg_24xx __iomem *reg24 = &vha->hw->iobase->isp24; | ||
| 276 | uint16_t __iomem *wptr; | ||
| 277 | uint16_t cnt, timeout, mb[QLA_IDC_ACK_REGS]; | ||
| 278 | |||
| 279 | /* Seed data -- mailbox1 -> mailbox7. */ | ||
| 280 | wptr = (uint16_t __iomem *)®24->mailbox1; | ||
| 281 | for (cnt = 0; cnt < QLA_IDC_ACK_REGS; cnt++, wptr++) | ||
| 282 | mb[cnt] = RD_REG_WORD(wptr); | ||
| 283 | |||
| 284 | DEBUG2(printk("scsi(%ld): Inter-Driver Commucation %s -- " | ||
| 285 | "%04x %04x %04x %04x %04x %04x %04x.\n", vha->host_no, | ||
| 286 | event[aen & 0xff], | ||
| 287 | mb[0], mb[1], mb[2], mb[3], mb[4], mb[5], mb[6])); | ||
| 288 | |||
| 289 | /* Acknowledgement needed? [Notify && non-zero timeout]. */ | ||
| 290 | timeout = (descr >> 8) & 0xf; | ||
| 291 | if (aen != MBA_IDC_NOTIFY || !timeout) | ||
| 292 | return; | ||
| 293 | |||
| 294 | DEBUG2(printk("scsi(%ld): Inter-Driver Commucation %s -- " | ||
| 295 | "ACK timeout=%d.\n", vha->host_no, event[aen & 0xff], timeout)); | ||
| 296 | |||
| 297 | rval = qla2x00_post_idc_ack_work(vha, mb); | ||
| 298 | if (rval != QLA_SUCCESS) | ||
| 299 | qla_printk(KERN_WARNING, vha->hw, | ||
| 300 | "IDC failed to post ACK.\n"); | ||
| 301 | } | ||
| 302 | |||
| 269 | /** | 303 | /** |
| 270 | * qla2x00_async_event() - Process aynchronous events. | 304 | * qla2x00_async_event() - Process aynchronous events. |
| 271 | * @ha: SCSI driver HA context | 305 | * @ha: SCSI driver HA context |
| @@ -714,21 +748,9 @@ skip_rio: | |||
| 714 | "%04x %04x %04x\n", vha->host_no, mb[1], mb[2], mb[3])); | 748 | "%04x %04x %04x\n", vha->host_no, mb[1], mb[2], mb[3])); |
| 715 | break; | 749 | break; |
| 716 | case MBA_IDC_COMPLETE: | 750 | case MBA_IDC_COMPLETE: |
| 717 | DEBUG2(printk("scsi(%ld): Inter-Driver Commucation " | ||
| 718 | "Complete -- %04x %04x %04x\n", vha->host_no, mb[1], mb[2], | ||
| 719 | mb[3])); | ||
| 720 | break; | ||
| 721 | case MBA_IDC_NOTIFY: | 751 | case MBA_IDC_NOTIFY: |
| 722 | DEBUG2(printk("scsi(%ld): Inter-Driver Commucation " | ||
| 723 | "Request Notification -- %04x %04x %04x\n", vha->host_no, | ||
| 724 | mb[1], mb[2], mb[3])); | ||
| 725 | /**** Mailbox registers 4 - 7 valid!!! */ | ||
| 726 | break; | ||
| 727 | case MBA_IDC_TIME_EXT: | 752 | case MBA_IDC_TIME_EXT: |
| 728 | DEBUG2(printk("scsi(%ld): Inter-Driver Commucation " | 753 | qla81xx_idc_event(vha, mb[0], mb[1]); |
| 729 | "Time Extension -- %04x %04x %04x\n", vha->host_no, mb[1], | ||
| 730 | mb[2], mb[3])); | ||
| 731 | /**** Mailbox registers 4 - 7 valid!!! */ | ||
| 732 | break; | 754 | break; |
| 733 | } | 755 | } |
| 734 | 756 | ||
| @@ -1707,7 +1729,6 @@ qla25xx_msix_rsp_q(int irq, void *dev_id) | |||
| 1707 | struct qla_hw_data *ha; | 1729 | struct qla_hw_data *ha; |
| 1708 | struct rsp_que *rsp; | 1730 | struct rsp_que *rsp; |
| 1709 | struct device_reg_24xx __iomem *reg; | 1731 | struct device_reg_24xx __iomem *reg; |
| 1710 | uint16_t msix_disabled_hccr = 0; | ||
| 1711 | 1732 | ||
| 1712 | rsp = (struct rsp_que *) dev_id; | 1733 | rsp = (struct rsp_que *) dev_id; |
| 1713 | if (!rsp) { | 1734 | if (!rsp) { |
| @@ -1720,17 +1741,8 @@ qla25xx_msix_rsp_q(int irq, void *dev_id) | |||
| 1720 | 1741 | ||
| 1721 | spin_lock_irq(&ha->hardware_lock); | 1742 | spin_lock_irq(&ha->hardware_lock); |
| 1722 | 1743 | ||
| 1723 | msix_disabled_hccr = rsp->options; | ||
| 1724 | if (!rsp->id) | ||
| 1725 | msix_disabled_hccr &= __constant_cpu_to_le32(BIT_22); | ||
| 1726 | else | ||
| 1727 | msix_disabled_hccr &= __constant_cpu_to_le32(BIT_6); | ||
| 1728 | |||
| 1729 | qla24xx_process_response_queue(rsp); | 1744 | qla24xx_process_response_queue(rsp); |
| 1730 | 1745 | ||
| 1731 | if (!msix_disabled_hccr) | ||
| 1732 | WRT_REG_DWORD(®->hccr, HCCRX_CLR_RISC_INT); | ||
| 1733 | |||
| 1734 | spin_unlock_irq(&ha->hardware_lock); | 1746 | spin_unlock_irq(&ha->hardware_lock); |
| 1735 | 1747 | ||
| 1736 | return IRQ_HANDLED; | 1748 | return IRQ_HANDLED; |
diff --git a/drivers/scsi/qla2xxx/qla_mbx.c b/drivers/scsi/qla2xxx/qla_mbx.c index f94ffbb98e95..4c7504cb3990 100644 --- a/drivers/scsi/qla2xxx/qla_mbx.c +++ b/drivers/scsi/qla2xxx/qla_mbx.c | |||
| @@ -3090,8 +3090,7 @@ verify_done: | |||
| 3090 | } | 3090 | } |
| 3091 | 3091 | ||
| 3092 | int | 3092 | int |
| 3093 | qla25xx_init_req_que(struct scsi_qla_host *vha, struct req_que *req, | 3093 | qla25xx_init_req_que(struct scsi_qla_host *vha, struct req_que *req) |
| 3094 | uint8_t options) | ||
| 3095 | { | 3094 | { |
| 3096 | int rval; | 3095 | int rval; |
| 3097 | unsigned long flags; | 3096 | unsigned long flags; |
| @@ -3101,7 +3100,7 @@ qla25xx_init_req_que(struct scsi_qla_host *vha, struct req_que *req, | |||
| 3101 | struct qla_hw_data *ha = vha->hw; | 3100 | struct qla_hw_data *ha = vha->hw; |
| 3102 | 3101 | ||
| 3103 | mcp->mb[0] = MBC_INITIALIZE_MULTIQ; | 3102 | mcp->mb[0] = MBC_INITIALIZE_MULTIQ; |
| 3104 | mcp->mb[1] = options; | 3103 | mcp->mb[1] = req->options; |
| 3105 | mcp->mb[2] = MSW(LSD(req->dma)); | 3104 | mcp->mb[2] = MSW(LSD(req->dma)); |
| 3106 | mcp->mb[3] = LSW(LSD(req->dma)); | 3105 | mcp->mb[3] = LSW(LSD(req->dma)); |
| 3107 | mcp->mb[6] = MSW(MSD(req->dma)); | 3106 | mcp->mb[6] = MSW(MSD(req->dma)); |
| @@ -3128,7 +3127,7 @@ qla25xx_init_req_que(struct scsi_qla_host *vha, struct req_que *req, | |||
| 3128 | mcp->tov = 60; | 3127 | mcp->tov = 60; |
| 3129 | 3128 | ||
| 3130 | spin_lock_irqsave(&ha->hardware_lock, flags); | 3129 | spin_lock_irqsave(&ha->hardware_lock, flags); |
| 3131 | if (!(options & BIT_0)) { | 3130 | if (!(req->options & BIT_0)) { |
| 3132 | WRT_REG_DWORD(®->req_q_in, 0); | 3131 | WRT_REG_DWORD(®->req_q_in, 0); |
| 3133 | WRT_REG_DWORD(®->req_q_out, 0); | 3132 | WRT_REG_DWORD(®->req_q_out, 0); |
| 3134 | } | 3133 | } |
| @@ -3142,8 +3141,7 @@ qla25xx_init_req_que(struct scsi_qla_host *vha, struct req_que *req, | |||
| 3142 | } | 3141 | } |
| 3143 | 3142 | ||
| 3144 | int | 3143 | int |
| 3145 | qla25xx_init_rsp_que(struct scsi_qla_host *vha, struct rsp_que *rsp, | 3144 | qla25xx_init_rsp_que(struct scsi_qla_host *vha, struct rsp_que *rsp) |
| 3146 | uint8_t options) | ||
| 3147 | { | 3145 | { |
| 3148 | int rval; | 3146 | int rval; |
| 3149 | unsigned long flags; | 3147 | unsigned long flags; |
| @@ -3153,7 +3151,7 @@ qla25xx_init_rsp_que(struct scsi_qla_host *vha, struct rsp_que *rsp, | |||
| 3153 | struct qla_hw_data *ha = vha->hw; | 3151 | struct qla_hw_data *ha = vha->hw; |
| 3154 | 3152 | ||
| 3155 | mcp->mb[0] = MBC_INITIALIZE_MULTIQ; | 3153 | mcp->mb[0] = MBC_INITIALIZE_MULTIQ; |
| 3156 | mcp->mb[1] = options; | 3154 | mcp->mb[1] = rsp->options; |
| 3157 | mcp->mb[2] = MSW(LSD(rsp->dma)); | 3155 | mcp->mb[2] = MSW(LSD(rsp->dma)); |
| 3158 | mcp->mb[3] = LSW(LSD(rsp->dma)); | 3156 | mcp->mb[3] = LSW(LSD(rsp->dma)); |
| 3159 | mcp->mb[6] = MSW(MSD(rsp->dma)); | 3157 | mcp->mb[6] = MSW(MSD(rsp->dma)); |
| @@ -3178,7 +3176,7 @@ qla25xx_init_rsp_que(struct scsi_qla_host *vha, struct rsp_que *rsp, | |||
| 3178 | mcp->tov = 60; | 3176 | mcp->tov = 60; |
| 3179 | 3177 | ||
| 3180 | spin_lock_irqsave(&ha->hardware_lock, flags); | 3178 | spin_lock_irqsave(&ha->hardware_lock, flags); |
| 3181 | if (!(options & BIT_0)) { | 3179 | if (!(rsp->options & BIT_0)) { |
| 3182 | WRT_REG_DWORD(®->rsp_q_out, 0); | 3180 | WRT_REG_DWORD(®->rsp_q_out, 0); |
| 3183 | WRT_REG_DWORD(®->rsp_q_in, 0); | 3181 | WRT_REG_DWORD(®->rsp_q_in, 0); |
| 3184 | } | 3182 | } |
| @@ -3193,3 +3191,29 @@ qla25xx_init_rsp_que(struct scsi_qla_host *vha, struct rsp_que *rsp, | |||
| 3193 | return rval; | 3191 | return rval; |
| 3194 | } | 3192 | } |
| 3195 | 3193 | ||
| 3194 | int | ||
| 3195 | qla81xx_idc_ack(scsi_qla_host_t *vha, uint16_t *mb) | ||
| 3196 | { | ||
| 3197 | int rval; | ||
| 3198 | mbx_cmd_t mc; | ||
| 3199 | mbx_cmd_t *mcp = &mc; | ||
| 3200 | |||
| 3201 | DEBUG11(printk("%s(%ld): entered.\n", __func__, vha->host_no)); | ||
| 3202 | |||
| 3203 | mcp->mb[0] = MBC_IDC_ACK; | ||
| 3204 | memcpy(&mcp->mb[1], mb, QLA_IDC_ACK_REGS * sizeof(uint16_t)); | ||
| 3205 | mcp->out_mb = MBX_7|MBX_6|MBX_5|MBX_4|MBX_3|MBX_2|MBX_1|MBX_0; | ||
| 3206 | mcp->in_mb = MBX_0; | ||
| 3207 | mcp->tov = MBX_TOV_SECONDS; | ||
| 3208 | mcp->flags = 0; | ||
| 3209 | rval = qla2x00_mailbox_command(vha, mcp); | ||
| 3210 | |||
| 3211 | if (rval != QLA_SUCCESS) { | ||
| 3212 | DEBUG2_3_11(printk("%s(%ld): failed=%x (%x).\n", __func__, | ||
| 3213 | vha->host_no, rval, mcp->mb[0])); | ||
| 3214 | } else { | ||
| 3215 | DEBUG11(printk("%s(%ld): done.\n", __func__, vha->host_no)); | ||
| 3216 | } | ||
| 3217 | |||
| 3218 | return rval; | ||
| 3219 | } | ||
diff --git a/drivers/scsi/qla2xxx/qla_mid.c b/drivers/scsi/qla2xxx/qla_mid.c index f53179c46423..3f23932210c4 100644 --- a/drivers/scsi/qla2xxx/qla_mid.c +++ b/drivers/scsi/qla2xxx/qla_mid.c | |||
| @@ -396,7 +396,7 @@ qla24xx_create_vhost(struct fc_vport *fc_vport) | |||
| 396 | 396 | ||
| 397 | qla2x00_start_timer(vha, qla2x00_timer, WATCH_INTERVAL); | 397 | qla2x00_start_timer(vha, qla2x00_timer, WATCH_INTERVAL); |
| 398 | 398 | ||
| 399 | memset(vha->req_ques, 0, sizeof(vha->req_ques) * QLA_MAX_HOST_QUES); | 399 | memset(vha->req_ques, 0, sizeof(vha->req_ques)); |
| 400 | vha->req_ques[0] = ha->req_q_map[0]->id; | 400 | vha->req_ques[0] = ha->req_q_map[0]->id; |
| 401 | host->can_queue = ha->req_q_map[0]->length + 128; | 401 | host->can_queue = ha->req_q_map[0]->length + 128; |
| 402 | host->this_id = 255; | 402 | host->this_id = 255; |
| @@ -471,7 +471,7 @@ qla25xx_delete_req_que(struct scsi_qla_host *vha, struct req_que *req) | |||
| 471 | 471 | ||
| 472 | if (req) { | 472 | if (req) { |
| 473 | req->options |= BIT_0; | 473 | req->options |= BIT_0; |
| 474 | ret = qla25xx_init_req_que(vha, req, req->options); | 474 | ret = qla25xx_init_req_que(vha, req); |
| 475 | } | 475 | } |
| 476 | if (ret == QLA_SUCCESS) | 476 | if (ret == QLA_SUCCESS) |
| 477 | qla25xx_free_req_que(vha, req); | 477 | qla25xx_free_req_que(vha, req); |
| @@ -486,7 +486,7 @@ qla25xx_delete_rsp_que(struct scsi_qla_host *vha, struct rsp_que *rsp) | |||
| 486 | 486 | ||
| 487 | if (rsp) { | 487 | if (rsp) { |
| 488 | rsp->options |= BIT_0; | 488 | rsp->options |= BIT_0; |
| 489 | ret = qla25xx_init_rsp_que(vha, rsp, rsp->options); | 489 | ret = qla25xx_init_rsp_que(vha, rsp); |
| 490 | } | 490 | } |
| 491 | if (ret == QLA_SUCCESS) | 491 | if (ret == QLA_SUCCESS) |
| 492 | qla25xx_free_rsp_que(vha, rsp); | 492 | qla25xx_free_rsp_que(vha, rsp); |
| @@ -502,7 +502,7 @@ int qla25xx_update_req_que(struct scsi_qla_host *vha, uint8_t que, uint8_t qos) | |||
| 502 | 502 | ||
| 503 | req->options |= BIT_3; | 503 | req->options |= BIT_3; |
| 504 | req->qos = qos; | 504 | req->qos = qos; |
| 505 | ret = qla25xx_init_req_que(vha, req, req->options); | 505 | ret = qla25xx_init_req_que(vha, req); |
| 506 | if (ret != QLA_SUCCESS) | 506 | if (ret != QLA_SUCCESS) |
| 507 | DEBUG2_17(printk(KERN_WARNING "%s failed\n", __func__)); | 507 | DEBUG2_17(printk(KERN_WARNING "%s failed\n", __func__)); |
| 508 | /* restore options bit */ | 508 | /* restore options bit */ |
| @@ -632,7 +632,7 @@ qla25xx_create_req_que(struct qla_hw_data *ha, uint16_t options, | |||
| 632 | req->max_q_depth = ha->req_q_map[0]->max_q_depth; | 632 | req->max_q_depth = ha->req_q_map[0]->max_q_depth; |
| 633 | mutex_unlock(&ha->vport_lock); | 633 | mutex_unlock(&ha->vport_lock); |
| 634 | 634 | ||
| 635 | ret = qla25xx_init_req_que(base_vha, req, options); | 635 | ret = qla25xx_init_req_que(base_vha, req); |
| 636 | if (ret != QLA_SUCCESS) { | 636 | if (ret != QLA_SUCCESS) { |
| 637 | qla_printk(KERN_WARNING, ha, "%s failed\n", __func__); | 637 | qla_printk(KERN_WARNING, ha, "%s failed\n", __func__); |
| 638 | mutex_lock(&ha->vport_lock); | 638 | mutex_lock(&ha->vport_lock); |
| @@ -710,7 +710,7 @@ qla25xx_create_rsp_que(struct qla_hw_data *ha, uint16_t options, | |||
| 710 | if (ret) | 710 | if (ret) |
| 711 | goto que_failed; | 711 | goto que_failed; |
| 712 | 712 | ||
| 713 | ret = qla25xx_init_rsp_que(base_vha, rsp, options); | 713 | ret = qla25xx_init_rsp_que(base_vha, rsp); |
| 714 | if (ret != QLA_SUCCESS) { | 714 | if (ret != QLA_SUCCESS) { |
| 715 | qla_printk(KERN_WARNING, ha, "%s failed\n", __func__); | 715 | qla_printk(KERN_WARNING, ha, "%s failed\n", __func__); |
| 716 | mutex_lock(&ha->vport_lock); | 716 | mutex_lock(&ha->vport_lock); |
diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c index c11f872d3e10..2f5f72531e23 100644 --- a/drivers/scsi/qla2xxx/qla_os.c +++ b/drivers/scsi/qla2xxx/qla_os.c | |||
| @@ -2522,6 +2522,19 @@ qla2x00_post_aen_work(struct scsi_qla_host *vha, enum fc_host_event_code code, | |||
| 2522 | return qla2x00_post_work(vha, e, 1); | 2522 | return qla2x00_post_work(vha, e, 1); |
| 2523 | } | 2523 | } |
| 2524 | 2524 | ||
| 2525 | int | ||
| 2526 | qla2x00_post_idc_ack_work(struct scsi_qla_host *vha, uint16_t *mb) | ||
| 2527 | { | ||
| 2528 | struct qla_work_evt *e; | ||
| 2529 | |||
| 2530 | e = qla2x00_alloc_work(vha, QLA_EVT_IDC_ACK, 1); | ||
| 2531 | if (!e) | ||
| 2532 | return QLA_FUNCTION_FAILED; | ||
| 2533 | |||
| 2534 | memcpy(e->u.idc_ack.mb, mb, QLA_IDC_ACK_REGS * sizeof(uint16_t)); | ||
| 2535 | return qla2x00_post_work(vha, e, 1); | ||
| 2536 | } | ||
| 2537 | |||
| 2525 | static void | 2538 | static void |
| 2526 | qla2x00_do_work(struct scsi_qla_host *vha) | 2539 | qla2x00_do_work(struct scsi_qla_host *vha) |
| 2527 | { | 2540 | { |
| @@ -2539,6 +2552,9 @@ qla2x00_do_work(struct scsi_qla_host *vha) | |||
| 2539 | fc_host_post_event(vha->host, fc_get_event_number(), | 2552 | fc_host_post_event(vha->host, fc_get_event_number(), |
| 2540 | e->u.aen.code, e->u.aen.data); | 2553 | e->u.aen.code, e->u.aen.data); |
| 2541 | break; | 2554 | break; |
| 2555 | case QLA_EVT_IDC_ACK: | ||
| 2556 | qla81xx_idc_ack(vha, e->u.idc_ack.mb); | ||
| 2557 | break; | ||
| 2542 | } | 2558 | } |
| 2543 | if (e->flags & QLA_EVT_FLAG_FREE) | 2559 | if (e->flags & QLA_EVT_FLAG_FREE) |
| 2544 | kfree(e); | 2560 | kfree(e); |
diff --git a/drivers/scsi/qla2xxx/qla_sup.c b/drivers/scsi/qla2xxx/qla_sup.c index 9c3b694c049d..284827926eff 100644 --- a/drivers/scsi/qla2xxx/qla_sup.c +++ b/drivers/scsi/qla2xxx/qla_sup.c | |||
| @@ -684,7 +684,7 @@ qla2xxx_get_flt_info(scsi_qla_host_t *vha, uint32_t flt_addr) | |||
| 684 | "end=0x%x size=0x%x.\n", le32_to_cpu(region->code), start, | 684 | "end=0x%x size=0x%x.\n", le32_to_cpu(region->code), start, |
| 685 | le32_to_cpu(region->end) >> 2, le32_to_cpu(region->size))); | 685 | le32_to_cpu(region->end) >> 2, le32_to_cpu(region->size))); |
| 686 | 686 | ||
| 687 | switch (le32_to_cpu(region->code)) { | 687 | switch (le32_to_cpu(region->code) & 0xff) { |
| 688 | case FLT_REG_FW: | 688 | case FLT_REG_FW: |
| 689 | ha->flt_region_fw = start; | 689 | ha->flt_region_fw = start; |
| 690 | break; | 690 | break; |
diff --git a/drivers/scsi/qla2xxx/qla_version.h b/drivers/scsi/qla2xxx/qla_version.h index cfa4c11a4797..79f7053da99b 100644 --- a/drivers/scsi/qla2xxx/qla_version.h +++ b/drivers/scsi/qla2xxx/qla_version.h | |||
| @@ -7,7 +7,7 @@ | |||
| 7 | /* | 7 | /* |
| 8 | * Driver version | 8 | * Driver version |
| 9 | */ | 9 | */ |
| 10 | #define QLA2XXX_VERSION "8.03.00-k2" | 10 | #define QLA2XXX_VERSION "8.03.00-k3" |
| 11 | 11 | ||
| 12 | #define QLA_DRIVER_MAJOR_VER 8 | 12 | #define QLA_DRIVER_MAJOR_VER 8 |
| 13 | #define QLA_DRIVER_MINOR_VER 3 | 13 | #define QLA_DRIVER_MINOR_VER 3 |
diff --git a/drivers/scsi/scsi_scan.c b/drivers/scsi/scsi_scan.c index 66505bb79410..8f4de20c9deb 100644 --- a/drivers/scsi/scsi_scan.c +++ b/drivers/scsi/scsi_scan.c | |||
| @@ -317,6 +317,7 @@ static struct scsi_device *scsi_alloc_sdev(struct scsi_target *starget, | |||
| 317 | return sdev; | 317 | return sdev; |
| 318 | 318 | ||
| 319 | out_device_destroy: | 319 | out_device_destroy: |
| 320 | scsi_device_set_state(sdev, SDEV_DEL); | ||
| 320 | transport_destroy_device(&sdev->sdev_gendev); | 321 | transport_destroy_device(&sdev->sdev_gendev); |
| 321 | put_device(&sdev->sdev_gendev); | 322 | put_device(&sdev->sdev_gendev); |
| 322 | out: | 323 | out: |
diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c index 8f0bd3f7a59f..516925d8b570 100644 --- a/drivers/scsi/sg.c +++ b/drivers/scsi/sg.c | |||
| @@ -1078,7 +1078,7 @@ sg_ioctl(struct inode *inode, struct file *filp, | |||
| 1078 | case BLKTRACESETUP: | 1078 | case BLKTRACESETUP: |
| 1079 | return blk_trace_setup(sdp->device->request_queue, | 1079 | return blk_trace_setup(sdp->device->request_queue, |
| 1080 | sdp->disk->disk_name, | 1080 | sdp->disk->disk_name, |
| 1081 | sdp->device->sdev_gendev.devt, | 1081 | MKDEV(SCSI_GENERIC_MAJOR, sdp->index), |
| 1082 | (char *)arg); | 1082 | (char *)arg); |
| 1083 | case BLKTRACESTART: | 1083 | case BLKTRACESTART: |
| 1084 | return blk_trace_startstop(sdp->device->request_queue, 1); | 1084 | return blk_trace_startstop(sdp->device->request_queue, 1); |
