mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-15 16:24:13 +08:00
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
This commit is contained in:
commit
b5482d475c
@ -1573,9 +1573,6 @@ static int ibmvfc_queuecommand(struct scsi_cmnd *cmnd,
|
||||
vfc_cmd->resp_len = sizeof(vfc_cmd->rsp);
|
||||
vfc_cmd->cancel_key = (unsigned long)cmnd->device->hostdata;
|
||||
vfc_cmd->tgt_scsi_id = rport->port_id;
|
||||
if ((rport->supported_classes & FC_COS_CLASS3) &&
|
||||
(fc_host_supported_classes(vhost->host) & FC_COS_CLASS3))
|
||||
vfc_cmd->flags = IBMVFC_CLASS_3_ERR;
|
||||
vfc_cmd->iu.xfer_len = scsi_bufflen(cmnd);
|
||||
int_to_scsilun(cmnd->device->lun, &vfc_cmd->iu.lun);
|
||||
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)
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
memset(tgt, 0, sizeof(*tgt));
|
||||
tgt->scsi_id = scsi_id;
|
||||
tgt->new_scsi_id = scsi_id;
|
||||
tgt->vhost = vhost;
|
||||
@ -3576,9 +3574,18 @@ static void ibmvfc_log_ae(struct ibmvfc_host *vhost, int events)
|
||||
static void ibmvfc_tgt_add_rport(struct ibmvfc_target *tgt)
|
||||
{
|
||||
struct ibmvfc_host *vhost = tgt->vhost;
|
||||
struct fc_rport *rport;
|
||||
struct fc_rport *rport = tgt->rport;
|
||||
unsigned long flags;
|
||||
|
||||
if (rport) {
|
||||
tgt_dbg(tgt, "Setting rport roles\n");
|
||||
fc_remote_port_rolechg(rport, tgt->ids.roles);
|
||||
spin_lock_irqsave(vhost->host->host_lock, flags);
|
||||
ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_NONE);
|
||||
spin_unlock_irqrestore(vhost->host->host_lock, flags);
|
||||
return;
|
||||
}
|
||||
|
||||
tgt_dbg(tgt, "Adding rport\n");
|
||||
rport = fc_remote_port_add(vhost->host, 0, &tgt->ids);
|
||||
spin_lock_irqsave(vhost->host->host_lock, flags);
|
||||
|
@ -32,7 +32,7 @@
|
||||
#define IBMVFC_DRIVER_VERSION "1.0.4"
|
||||
#define IBMVFC_DRIVER_DATE "(November 14, 2008)"
|
||||
|
||||
#define IBMVFC_DEFAULT_TIMEOUT 15
|
||||
#define IBMVFC_DEFAULT_TIMEOUT 60
|
||||
#define IBMVFC_INIT_TIMEOUT 120
|
||||
#define IBMVFC_MAX_REQUESTS_DEFAULT 100
|
||||
|
||||
|
@ -432,6 +432,7 @@ static int map_sg_data(struct scsi_cmnd *cmd,
|
||||
sdev_printk(KERN_ERR, cmd->device,
|
||||
"Can't allocate memory "
|
||||
"for indirect table\n");
|
||||
scsi_dma_unmap(cmd);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
@ -1998,6 +1998,8 @@ int iscsi_host_add(struct Scsi_Host *shost, struct device *pdev)
|
||||
if (!shost->can_queue)
|
||||
shost->can_queue = ISCSI_DEF_XMIT_CMDS_MAX;
|
||||
|
||||
if (!shost->transportt->eh_timed_out)
|
||||
shost->transportt->eh_timed_out = iscsi_eh_cmd_timed_out;
|
||||
return scsi_add_host(shost, pdev);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(iscsi_host_add);
|
||||
@ -2020,7 +2022,6 @@ struct Scsi_Host *iscsi_host_alloc(struct scsi_host_template *sht,
|
||||
shost = scsi_host_alloc(sht, sizeof(struct iscsi_host) + dd_data_size);
|
||||
if (!shost)
|
||||
return NULL;
|
||||
shost->transportt->eh_timed_out = iscsi_eh_cmd_timed_out;
|
||||
|
||||
if (qdepth > ISCSI_MAX_CMD_PER_LUN || qdepth < 1) {
|
||||
if (qdepth != 0)
|
||||
|
@ -5258,6 +5258,7 @@ lpfc_send_els_event(struct lpfc_vport *vport,
|
||||
sizeof(struct lpfc_name));
|
||||
break;
|
||||
default:
|
||||
kfree(els_data);
|
||||
return;
|
||||
}
|
||||
memcpy(els_data->wwpn, &ndlp->nlp_portname, sizeof(struct lpfc_name));
|
||||
|
@ -1265,13 +1265,6 @@ qla24xx_vport_delete(struct fc_vport *fc_vport)
|
||||
test_bit(FCPORT_UPDATE_NEEDED, &vha->dpc_flags))
|
||||
msleep(1000);
|
||||
|
||||
if (ha->mqenable) {
|
||||
if (qla25xx_delete_queues(vha, 0) != QLA_SUCCESS)
|
||||
qla_printk(KERN_WARNING, ha,
|
||||
"Queue delete failed.\n");
|
||||
vha->req_ques[0] = ha->req_q_map[0]->id;
|
||||
}
|
||||
|
||||
qla24xx_disable_vp(vha);
|
||||
|
||||
fc_remove_host(vha->host);
|
||||
@ -1293,6 +1286,12 @@ qla24xx_vport_delete(struct fc_vport *fc_vport)
|
||||
vha->host_no, vha->vp_idx, vha));
|
||||
}
|
||||
|
||||
if (ha->mqenable) {
|
||||
if (qla25xx_delete_queues(vha, 0) != QLA_SUCCESS)
|
||||
qla_printk(KERN_WARNING, ha,
|
||||
"Queue delete failed.\n");
|
||||
}
|
||||
|
||||
scsi_host_put(vha->host);
|
||||
qla_printk(KERN_INFO, ha, "vport %d deleted\n", id);
|
||||
return 0;
|
||||
|
@ -2135,6 +2135,7 @@ struct qla_msix_entry {
|
||||
/* Work events. */
|
||||
enum qla_work_type {
|
||||
QLA_EVT_AEN,
|
||||
QLA_EVT_IDC_ACK,
|
||||
};
|
||||
|
||||
|
||||
@ -2149,6 +2150,10 @@ struct qla_work_evt {
|
||||
enum fc_host_event_code code;
|
||||
u32 data;
|
||||
} aen;
|
||||
struct {
|
||||
#define QLA_IDC_ACK_REGS 7
|
||||
uint16_t mb[QLA_IDC_ACK_REGS];
|
||||
} idc_ack;
|
||||
} u;
|
||||
};
|
||||
|
||||
|
@ -72,7 +72,7 @@ static char *qla2x00_model_name[QLA_MODEL_NAMES*2] = {
|
||||
"QLA2462", "Sun PCI-X 2.0 to 4Gb FC, Dual Channel", /* 0x141 */
|
||||
"QLE2460", "Sun PCI-Express to 2Gb FC, Single Channel", /* 0x142 */
|
||||
"QLE2462", "Sun PCI-Express to 4Gb FC, Single Channel", /* 0x143 */
|
||||
"QEM2462" "Server I/O Module 4Gb FC, Dual Channel", /* 0x144 */
|
||||
"QEM2462", "Server I/O Module 4Gb FC, Dual Channel", /* 0x144 */
|
||||
"QLE2440", "PCI-Express to 4Gb FC, Single Channel", /* 0x145 */
|
||||
"QLE2464", "PCI-Express to 4Gb FC, Quad Channel", /* 0x146 */
|
||||
"QLA2440", "PCI-X 2.0 to 4Gb FC, Single Channel", /* 0x147 */
|
||||
|
@ -1402,6 +1402,8 @@ struct access_chip_rsp_84xx {
|
||||
#define MBA_IDC_NOTIFY 0x8101
|
||||
#define MBA_IDC_TIME_EXT 0x8102
|
||||
|
||||
#define MBC_IDC_ACK 0x101
|
||||
|
||||
struct nvram_81xx {
|
||||
/* NVRAM header. */
|
||||
uint8_t id[4];
|
||||
|
@ -72,6 +72,7 @@ extern int qla2x00_loop_reset(scsi_qla_host_t *);
|
||||
extern void qla2x00_abort_all_cmds(scsi_qla_host_t *, int);
|
||||
extern int qla2x00_post_aen_work(struct scsi_qla_host *, enum
|
||||
fc_host_event_code, u32);
|
||||
extern int qla2x00_post_idc_ack_work(struct scsi_qla_host *, uint16_t *);
|
||||
|
||||
extern void qla2x00_abort_fcport_cmds(fc_port_t *);
|
||||
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 *);
|
||||
|
||||
extern int qla84xx_verify_chip(struct scsi_qla_host *, uint16_t *);
|
||||
|
||||
extern int qla81xx_idc_ack(scsi_qla_host_t *, uint16_t *);
|
||||
|
||||
/*
|
||||
* Global Function Prototypes in qla_isr.c source file.
|
||||
*/
|
||||
@ -376,10 +379,8 @@ extern int qla2x00_dfs_remove(scsi_qla_host_t *);
|
||||
|
||||
/* Globa function prototypes for multi-q */
|
||||
extern int qla25xx_request_irq(struct rsp_que *);
|
||||
extern int qla25xx_init_req_que(struct scsi_qla_host *, struct req_que *,
|
||||
uint8_t);
|
||||
extern int qla25xx_init_rsp_que(struct scsi_qla_host *, struct rsp_que *,
|
||||
uint8_t);
|
||||
extern int qla25xx_init_req_que(struct scsi_qla_host *, struct req_que *);
|
||||
extern int qla25xx_init_rsp_que(struct scsi_qla_host *, struct rsp_que *);
|
||||
extern int qla25xx_create_req_que(struct qla_hw_data *, uint16_t, uint8_t,
|
||||
uint16_t, uint8_t, uint8_t);
|
||||
extern int qla25xx_create_rsp_que(struct qla_hw_data *, uint16_t, uint8_t,
|
||||
|
@ -1226,9 +1226,8 @@ qla24xx_config_rings(struct scsi_qla_host *vha)
|
||||
icb->firmware_options_2 |=
|
||||
__constant_cpu_to_le32(BIT_18);
|
||||
|
||||
icb->firmware_options_2 |= __constant_cpu_to_le32(BIT_22);
|
||||
icb->firmware_options_2 &= __constant_cpu_to_le32(~BIT_22);
|
||||
icb->firmware_options_2 |= __constant_cpu_to_le32(BIT_23);
|
||||
ha->rsp_q_map[0]->options = icb->firmware_options_2;
|
||||
|
||||
WRT_REG_DWORD(®->isp25mq.req_q_in, 0);
|
||||
WRT_REG_DWORD(®->isp25mq.req_q_out, 0);
|
||||
@ -3493,7 +3492,7 @@ qla25xx_init_queues(struct qla_hw_data *ha)
|
||||
rsp = ha->rsp_q_map[i];
|
||||
if (rsp) {
|
||||
rsp->options &= ~BIT_0;
|
||||
ret = qla25xx_init_rsp_que(base_vha, rsp, rsp->options);
|
||||
ret = qla25xx_init_rsp_que(base_vha, rsp);
|
||||
if (ret != QLA_SUCCESS)
|
||||
DEBUG2_17(printk(KERN_WARNING
|
||||
"%s Rsp que:%d init failed\n", __func__,
|
||||
@ -3507,7 +3506,7 @@ qla25xx_init_queues(struct qla_hw_data *ha)
|
||||
if (req) {
|
||||
/* Clear outstanding commands array. */
|
||||
req->options &= ~BIT_0;
|
||||
ret = qla25xx_init_req_que(base_vha, req, req->options);
|
||||
ret = qla25xx_init_req_que(base_vha, req);
|
||||
if (ret != QLA_SUCCESS)
|
||||
DEBUG2_17(printk(KERN_WARNING
|
||||
"%s Req que:%d init failed\n", __func__,
|
||||
|
@ -266,6 +266,40 @@ qla2x00_mbx_completion(scsi_qla_host_t *vha, uint16_t mb0)
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
qla81xx_idc_event(scsi_qla_host_t *vha, uint16_t aen, uint16_t descr)
|
||||
{
|
||||
static char *event[] =
|
||||
{ "Complete", "Request Notification", "Time Extension" };
|
||||
int rval;
|
||||
struct device_reg_24xx __iomem *reg24 = &vha->hw->iobase->isp24;
|
||||
uint16_t __iomem *wptr;
|
||||
uint16_t cnt, timeout, mb[QLA_IDC_ACK_REGS];
|
||||
|
||||
/* Seed data -- mailbox1 -> mailbox7. */
|
||||
wptr = (uint16_t __iomem *)®24->mailbox1;
|
||||
for (cnt = 0; cnt < QLA_IDC_ACK_REGS; cnt++, wptr++)
|
||||
mb[cnt] = RD_REG_WORD(wptr);
|
||||
|
||||
DEBUG2(printk("scsi(%ld): Inter-Driver Commucation %s -- "
|
||||
"%04x %04x %04x %04x %04x %04x %04x.\n", vha->host_no,
|
||||
event[aen & 0xff],
|
||||
mb[0], mb[1], mb[2], mb[3], mb[4], mb[5], mb[6]));
|
||||
|
||||
/* Acknowledgement needed? [Notify && non-zero timeout]. */
|
||||
timeout = (descr >> 8) & 0xf;
|
||||
if (aen != MBA_IDC_NOTIFY || !timeout)
|
||||
return;
|
||||
|
||||
DEBUG2(printk("scsi(%ld): Inter-Driver Commucation %s -- "
|
||||
"ACK timeout=%d.\n", vha->host_no, event[aen & 0xff], timeout));
|
||||
|
||||
rval = qla2x00_post_idc_ack_work(vha, mb);
|
||||
if (rval != QLA_SUCCESS)
|
||||
qla_printk(KERN_WARNING, vha->hw,
|
||||
"IDC failed to post ACK.\n");
|
||||
}
|
||||
|
||||
/**
|
||||
* qla2x00_async_event() - Process aynchronous events.
|
||||
* @ha: SCSI driver HA context
|
||||
@ -714,21 +748,9 @@ skip_rio:
|
||||
"%04x %04x %04x\n", vha->host_no, mb[1], mb[2], mb[3]));
|
||||
break;
|
||||
case MBA_IDC_COMPLETE:
|
||||
DEBUG2(printk("scsi(%ld): Inter-Driver Commucation "
|
||||
"Complete -- %04x %04x %04x\n", vha->host_no, mb[1], mb[2],
|
||||
mb[3]));
|
||||
break;
|
||||
case MBA_IDC_NOTIFY:
|
||||
DEBUG2(printk("scsi(%ld): Inter-Driver Commucation "
|
||||
"Request Notification -- %04x %04x %04x\n", vha->host_no,
|
||||
mb[1], mb[2], mb[3]));
|
||||
/**** Mailbox registers 4 - 7 valid!!! */
|
||||
break;
|
||||
case MBA_IDC_TIME_EXT:
|
||||
DEBUG2(printk("scsi(%ld): Inter-Driver Commucation "
|
||||
"Time Extension -- %04x %04x %04x\n", vha->host_no, mb[1],
|
||||
mb[2], mb[3]));
|
||||
/**** Mailbox registers 4 - 7 valid!!! */
|
||||
qla81xx_idc_event(vha, mb[0], mb[1]);
|
||||
break;
|
||||
}
|
||||
|
||||
@ -1707,7 +1729,6 @@ qla25xx_msix_rsp_q(int irq, void *dev_id)
|
||||
struct qla_hw_data *ha;
|
||||
struct rsp_que *rsp;
|
||||
struct device_reg_24xx __iomem *reg;
|
||||
uint16_t msix_disabled_hccr = 0;
|
||||
|
||||
rsp = (struct rsp_que *) dev_id;
|
||||
if (!rsp) {
|
||||
@ -1720,17 +1741,8 @@ qla25xx_msix_rsp_q(int irq, void *dev_id)
|
||||
|
||||
spin_lock_irq(&ha->hardware_lock);
|
||||
|
||||
msix_disabled_hccr = rsp->options;
|
||||
if (!rsp->id)
|
||||
msix_disabled_hccr &= __constant_cpu_to_le32(BIT_22);
|
||||
else
|
||||
msix_disabled_hccr &= __constant_cpu_to_le32(BIT_6);
|
||||
|
||||
qla24xx_process_response_queue(rsp);
|
||||
|
||||
if (!msix_disabled_hccr)
|
||||
WRT_REG_DWORD(®->hccr, HCCRX_CLR_RISC_INT);
|
||||
|
||||
spin_unlock_irq(&ha->hardware_lock);
|
||||
|
||||
return IRQ_HANDLED;
|
||||
|
@ -3090,8 +3090,7 @@ verify_done:
|
||||
}
|
||||
|
||||
int
|
||||
qla25xx_init_req_que(struct scsi_qla_host *vha, struct req_que *req,
|
||||
uint8_t options)
|
||||
qla25xx_init_req_que(struct scsi_qla_host *vha, struct req_que *req)
|
||||
{
|
||||
int rval;
|
||||
unsigned long flags;
|
||||
@ -3101,7 +3100,7 @@ qla25xx_init_req_que(struct scsi_qla_host *vha, struct req_que *req,
|
||||
struct qla_hw_data *ha = vha->hw;
|
||||
|
||||
mcp->mb[0] = MBC_INITIALIZE_MULTIQ;
|
||||
mcp->mb[1] = options;
|
||||
mcp->mb[1] = req->options;
|
||||
mcp->mb[2] = MSW(LSD(req->dma));
|
||||
mcp->mb[3] = LSW(LSD(req->dma));
|
||||
mcp->mb[6] = MSW(MSD(req->dma));
|
||||
@ -3128,7 +3127,7 @@ qla25xx_init_req_que(struct scsi_qla_host *vha, struct req_que *req,
|
||||
mcp->tov = 60;
|
||||
|
||||
spin_lock_irqsave(&ha->hardware_lock, flags);
|
||||
if (!(options & BIT_0)) {
|
||||
if (!(req->options & BIT_0)) {
|
||||
WRT_REG_DWORD(®->req_q_in, 0);
|
||||
WRT_REG_DWORD(®->req_q_out, 0);
|
||||
}
|
||||
@ -3142,8 +3141,7 @@ qla25xx_init_req_que(struct scsi_qla_host *vha, struct req_que *req,
|
||||
}
|
||||
|
||||
int
|
||||
qla25xx_init_rsp_que(struct scsi_qla_host *vha, struct rsp_que *rsp,
|
||||
uint8_t options)
|
||||
qla25xx_init_rsp_que(struct scsi_qla_host *vha, struct rsp_que *rsp)
|
||||
{
|
||||
int rval;
|
||||
unsigned long flags;
|
||||
@ -3153,7 +3151,7 @@ qla25xx_init_rsp_que(struct scsi_qla_host *vha, struct rsp_que *rsp,
|
||||
struct qla_hw_data *ha = vha->hw;
|
||||
|
||||
mcp->mb[0] = MBC_INITIALIZE_MULTIQ;
|
||||
mcp->mb[1] = options;
|
||||
mcp->mb[1] = rsp->options;
|
||||
mcp->mb[2] = MSW(LSD(rsp->dma));
|
||||
mcp->mb[3] = LSW(LSD(rsp->dma));
|
||||
mcp->mb[6] = MSW(MSD(rsp->dma));
|
||||
@ -3178,7 +3176,7 @@ qla25xx_init_rsp_que(struct scsi_qla_host *vha, struct rsp_que *rsp,
|
||||
mcp->tov = 60;
|
||||
|
||||
spin_lock_irqsave(&ha->hardware_lock, flags);
|
||||
if (!(options & BIT_0)) {
|
||||
if (!(rsp->options & BIT_0)) {
|
||||
WRT_REG_DWORD(®->rsp_q_out, 0);
|
||||
WRT_REG_DWORD(®->rsp_q_in, 0);
|
||||
}
|
||||
@ -3193,3 +3191,29 @@ qla25xx_init_rsp_que(struct scsi_qla_host *vha, struct rsp_que *rsp,
|
||||
return rval;
|
||||
}
|
||||
|
||||
int
|
||||
qla81xx_idc_ack(scsi_qla_host_t *vha, uint16_t *mb)
|
||||
{
|
||||
int rval;
|
||||
mbx_cmd_t mc;
|
||||
mbx_cmd_t *mcp = &mc;
|
||||
|
||||
DEBUG11(printk("%s(%ld): entered.\n", __func__, vha->host_no));
|
||||
|
||||
mcp->mb[0] = MBC_IDC_ACK;
|
||||
memcpy(&mcp->mb[1], mb, QLA_IDC_ACK_REGS * sizeof(uint16_t));
|
||||
mcp->out_mb = MBX_7|MBX_6|MBX_5|MBX_4|MBX_3|MBX_2|MBX_1|MBX_0;
|
||||
mcp->in_mb = MBX_0;
|
||||
mcp->tov = MBX_TOV_SECONDS;
|
||||
mcp->flags = 0;
|
||||
rval = qla2x00_mailbox_command(vha, mcp);
|
||||
|
||||
if (rval != QLA_SUCCESS) {
|
||||
DEBUG2_3_11(printk("%s(%ld): failed=%x (%x).\n", __func__,
|
||||
vha->host_no, rval, mcp->mb[0]));
|
||||
} else {
|
||||
DEBUG11(printk("%s(%ld): done.\n", __func__, vha->host_no));
|
||||
}
|
||||
|
||||
return rval;
|
||||
}
|
||||
|
@ -396,7 +396,7 @@ qla24xx_create_vhost(struct fc_vport *fc_vport)
|
||||
|
||||
qla2x00_start_timer(vha, qla2x00_timer, WATCH_INTERVAL);
|
||||
|
||||
memset(vha->req_ques, 0, sizeof(vha->req_ques) * QLA_MAX_HOST_QUES);
|
||||
memset(vha->req_ques, 0, sizeof(vha->req_ques));
|
||||
vha->req_ques[0] = ha->req_q_map[0]->id;
|
||||
host->can_queue = ha->req_q_map[0]->length + 128;
|
||||
host->this_id = 255;
|
||||
@ -471,7 +471,7 @@ qla25xx_delete_req_que(struct scsi_qla_host *vha, struct req_que *req)
|
||||
|
||||
if (req) {
|
||||
req->options |= BIT_0;
|
||||
ret = qla25xx_init_req_que(vha, req, req->options);
|
||||
ret = qla25xx_init_req_que(vha, req);
|
||||
}
|
||||
if (ret == QLA_SUCCESS)
|
||||
qla25xx_free_req_que(vha, req);
|
||||
@ -486,7 +486,7 @@ qla25xx_delete_rsp_que(struct scsi_qla_host *vha, struct rsp_que *rsp)
|
||||
|
||||
if (rsp) {
|
||||
rsp->options |= BIT_0;
|
||||
ret = qla25xx_init_rsp_que(vha, rsp, rsp->options);
|
||||
ret = qla25xx_init_rsp_que(vha, rsp);
|
||||
}
|
||||
if (ret == QLA_SUCCESS)
|
||||
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)
|
||||
|
||||
req->options |= BIT_3;
|
||||
req->qos = qos;
|
||||
ret = qla25xx_init_req_que(vha, req, req->options);
|
||||
ret = qla25xx_init_req_que(vha, req);
|
||||
if (ret != QLA_SUCCESS)
|
||||
DEBUG2_17(printk(KERN_WARNING "%s failed\n", __func__));
|
||||
/* restore options bit */
|
||||
@ -632,7 +632,7 @@ qla25xx_create_req_que(struct qla_hw_data *ha, uint16_t options,
|
||||
req->max_q_depth = ha->req_q_map[0]->max_q_depth;
|
||||
mutex_unlock(&ha->vport_lock);
|
||||
|
||||
ret = qla25xx_init_req_que(base_vha, req, options);
|
||||
ret = qla25xx_init_req_que(base_vha, req);
|
||||
if (ret != QLA_SUCCESS) {
|
||||
qla_printk(KERN_WARNING, ha, "%s failed\n", __func__);
|
||||
mutex_lock(&ha->vport_lock);
|
||||
@ -710,7 +710,7 @@ qla25xx_create_rsp_que(struct qla_hw_data *ha, uint16_t options,
|
||||
if (ret)
|
||||
goto que_failed;
|
||||
|
||||
ret = qla25xx_init_rsp_que(base_vha, rsp, options);
|
||||
ret = qla25xx_init_rsp_que(base_vha, rsp);
|
||||
if (ret != QLA_SUCCESS) {
|
||||
qla_printk(KERN_WARNING, ha, "%s failed\n", __func__);
|
||||
mutex_lock(&ha->vport_lock);
|
||||
|
@ -2522,6 +2522,19 @@ qla2x00_post_aen_work(struct scsi_qla_host *vha, enum fc_host_event_code code,
|
||||
return qla2x00_post_work(vha, e, 1);
|
||||
}
|
||||
|
||||
int
|
||||
qla2x00_post_idc_ack_work(struct scsi_qla_host *vha, uint16_t *mb)
|
||||
{
|
||||
struct qla_work_evt *e;
|
||||
|
||||
e = qla2x00_alloc_work(vha, QLA_EVT_IDC_ACK, 1);
|
||||
if (!e)
|
||||
return QLA_FUNCTION_FAILED;
|
||||
|
||||
memcpy(e->u.idc_ack.mb, mb, QLA_IDC_ACK_REGS * sizeof(uint16_t));
|
||||
return qla2x00_post_work(vha, e, 1);
|
||||
}
|
||||
|
||||
static void
|
||||
qla2x00_do_work(struct scsi_qla_host *vha)
|
||||
{
|
||||
@ -2539,6 +2552,9 @@ qla2x00_do_work(struct scsi_qla_host *vha)
|
||||
fc_host_post_event(vha->host, fc_get_event_number(),
|
||||
e->u.aen.code, e->u.aen.data);
|
||||
break;
|
||||
case QLA_EVT_IDC_ACK:
|
||||
qla81xx_idc_ack(vha, e->u.idc_ack.mb);
|
||||
break;
|
||||
}
|
||||
if (e->flags & QLA_EVT_FLAG_FREE)
|
||||
kfree(e);
|
||||
|
@ -684,7 +684,7 @@ qla2xxx_get_flt_info(scsi_qla_host_t *vha, uint32_t flt_addr)
|
||||
"end=0x%x size=0x%x.\n", le32_to_cpu(region->code), start,
|
||||
le32_to_cpu(region->end) >> 2, le32_to_cpu(region->size)));
|
||||
|
||||
switch (le32_to_cpu(region->code)) {
|
||||
switch (le32_to_cpu(region->code) & 0xff) {
|
||||
case FLT_REG_FW:
|
||||
ha->flt_region_fw = start;
|
||||
break;
|
||||
|
@ -7,7 +7,7 @@
|
||||
/*
|
||||
* Driver version
|
||||
*/
|
||||
#define QLA2XXX_VERSION "8.03.00-k2"
|
||||
#define QLA2XXX_VERSION "8.03.00-k3"
|
||||
|
||||
#define QLA_DRIVER_MAJOR_VER 8
|
||||
#define QLA_DRIVER_MINOR_VER 3
|
||||
|
@ -317,6 +317,7 @@ static struct scsi_device *scsi_alloc_sdev(struct scsi_target *starget,
|
||||
return sdev;
|
||||
|
||||
out_device_destroy:
|
||||
scsi_device_set_state(sdev, SDEV_DEL);
|
||||
transport_destroy_device(&sdev->sdev_gendev);
|
||||
put_device(&sdev->sdev_gendev);
|
||||
out:
|
||||
|
@ -1078,7 +1078,7 @@ sg_ioctl(struct inode *inode, struct file *filp,
|
||||
case BLKTRACESETUP:
|
||||
return blk_trace_setup(sdp->device->request_queue,
|
||||
sdp->disk->disk_name,
|
||||
sdp->device->sdev_gendev.devt,
|
||||
MKDEV(SCSI_GENERIC_MAJOR, sdp->index),
|
||||
(char *)arg);
|
||||
case BLKTRACESTART:
|
||||
return blk_trace_startstop(sdp->device->request_queue, 1);
|
||||
|
Loading…
Reference in New Issue
Block a user