mirror of
https://github.com/FEX-Emu/linux.git
synced 2024-12-18 15:09:53 +00:00
[SCSI] qla2xxx: Removed dependency for SRB structure for Marker processing
Signed-off-by: Giridhar Malavali <giridhar.malavali@qlogic.com> Signed-off-by: James Bottomley <James.Bottomley@suse.de>
This commit is contained in:
parent
17cf2c5d76
commit
d94d10e727
@ -250,16 +250,6 @@ struct srb_iocb {
|
|||||||
uint32_t lun;
|
uint32_t lun;
|
||||||
uint32_t data;
|
uint32_t data;
|
||||||
} tmf;
|
} tmf;
|
||||||
struct {
|
|
||||||
/*
|
|
||||||
* values for modif field below are as
|
|
||||||
* defined in mrk_entry_24xx struct
|
|
||||||
* for the modifier field in qla_fw.h.
|
|
||||||
*/
|
|
||||||
uint8_t modif;
|
|
||||||
uint16_t lun;
|
|
||||||
uint32_t data;
|
|
||||||
} marker;
|
|
||||||
} u;
|
} u;
|
||||||
|
|
||||||
struct timer_list timer;
|
struct timer_list timer;
|
||||||
@ -277,7 +267,6 @@ struct srb_iocb {
|
|||||||
#define SRB_CT_CMD 5
|
#define SRB_CT_CMD 5
|
||||||
#define SRB_ADISC_CMD 6
|
#define SRB_ADISC_CMD 6
|
||||||
#define SRB_TM_CMD 7
|
#define SRB_TM_CMD 7
|
||||||
#define SRB_MARKER_CMD 8
|
|
||||||
|
|
||||||
struct srb_ctx {
|
struct srb_ctx {
|
||||||
uint16_t type;
|
uint16_t type;
|
||||||
|
@ -59,7 +59,6 @@ extern int qla2x00_async_logout(struct scsi_qla_host *, fc_port_t *);
|
|||||||
extern int qla2x00_async_adisc(struct scsi_qla_host *, fc_port_t *,
|
extern int qla2x00_async_adisc(struct scsi_qla_host *, fc_port_t *,
|
||||||
uint16_t *);
|
uint16_t *);
|
||||||
extern int qla2x00_async_tm_cmd(fc_port_t *, uint32_t, uint32_t, uint32_t);
|
extern int qla2x00_async_tm_cmd(fc_port_t *, uint32_t, uint32_t, uint32_t);
|
||||||
extern int qla2x00_async_marker(fc_port_t *, uint16_t, uint8_t);
|
|
||||||
extern void qla2x00_async_login_done(struct scsi_qla_host *, fc_port_t *,
|
extern void qla2x00_async_login_done(struct scsi_qla_host *, fc_port_t *,
|
||||||
uint16_t *);
|
uint16_t *);
|
||||||
extern void qla2x00_async_logout_done(struct scsi_qla_host *, fc_port_t *,
|
extern void qla2x00_async_logout_done(struct scsi_qla_host *, fc_port_t *,
|
||||||
@ -68,8 +67,7 @@ extern void qla2x00_async_adisc_done(struct scsi_qla_host *, fc_port_t *,
|
|||||||
uint16_t *);
|
uint16_t *);
|
||||||
extern void qla2x00_async_tm_cmd_done(struct scsi_qla_host *, fc_port_t *,
|
extern void qla2x00_async_tm_cmd_done(struct scsi_qla_host *, fc_port_t *,
|
||||||
struct srb_iocb *);
|
struct srb_iocb *);
|
||||||
extern void qla2x00_async_marker_done(struct scsi_qla_host *, fc_port_t *,
|
extern void *qla2x00_alloc_iocbs(struct scsi_qla_host *, srb_t *);
|
||||||
struct srb_iocb *);
|
|
||||||
|
|
||||||
extern fc_port_t *
|
extern fc_port_t *
|
||||||
qla2x00_alloc_fcport(scsi_qla_host_t *, gfp_t );
|
qla2x00_alloc_fcport(scsi_qla_host_t *, gfp_t );
|
||||||
|
@ -367,58 +367,6 @@ done:
|
|||||||
return rval;
|
return rval;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
qla2x00_async_marker_ctx_done(srb_t *sp)
|
|
||||||
{
|
|
||||||
struct srb_ctx *ctx = sp->ctx;
|
|
||||||
struct srb_iocb *iocb = (struct srb_iocb *)ctx->u.iocb_cmd;
|
|
||||||
|
|
||||||
qla2x00_async_marker_done(sp->fcport->vha, sp->fcport, iocb);
|
|
||||||
iocb->free(sp);
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
qla2x00_async_marker(fc_port_t *fcport, uint16_t lun, uint8_t modif)
|
|
||||||
{
|
|
||||||
struct scsi_qla_host *vha = fcport->vha;
|
|
||||||
srb_t *sp;
|
|
||||||
struct srb_ctx *ctx;
|
|
||||||
struct srb_iocb *mrk;
|
|
||||||
int rval;
|
|
||||||
|
|
||||||
rval = QLA_FUNCTION_FAILED;
|
|
||||||
sp = qla2x00_get_ctx_sp(vha, fcport, sizeof(struct srb_ctx), 0);
|
|
||||||
if (!sp)
|
|
||||||
goto done;
|
|
||||||
|
|
||||||
ctx = sp->ctx;
|
|
||||||
ctx->type = SRB_MARKER_CMD;
|
|
||||||
ctx->name = "marker";
|
|
||||||
mrk = ctx->u.iocb_cmd;
|
|
||||||
mrk->u.marker.lun = lun;
|
|
||||||
mrk->u.marker.modif = modif;
|
|
||||||
mrk->timeout = qla2x00_async_iocb_timeout;
|
|
||||||
mrk->done = qla2x00_async_marker_ctx_done;
|
|
||||||
|
|
||||||
rval = qla2x00_start_sp(sp);
|
|
||||||
if (rval != QLA_SUCCESS)
|
|
||||||
goto done_free_sp;
|
|
||||||
|
|
||||||
DEBUG2(printk(KERN_DEBUG
|
|
||||||
"scsi(%ld:%x): Async-marker - loop-id=%x "
|
|
||||||
"portid=%02x%02x%02x.\n",
|
|
||||||
fcport->vha->host_no, sp->handle, fcport->loop_id,
|
|
||||||
fcport->d_id.b.domain, fcport->d_id.b.area,
|
|
||||||
fcport->d_id.b.al_pa));
|
|
||||||
|
|
||||||
return rval;
|
|
||||||
|
|
||||||
done_free_sp:
|
|
||||||
mrk->free(sp);
|
|
||||||
done:
|
|
||||||
return rval;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
qla2x00_async_login_done(struct scsi_qla_host *vha, fc_port_t *fcport,
|
qla2x00_async_login_done(struct scsi_qla_host *vha, fc_port_t *fcport,
|
||||||
uint16_t *data)
|
uint16_t *data)
|
||||||
@ -500,7 +448,8 @@ qla2x00_async_tm_cmd_done(struct scsi_qla_host *vha, fc_port_t *fcport,
|
|||||||
lun = (uint16_t)iocb->u.tmf.lun;
|
lun = (uint16_t)iocb->u.tmf.lun;
|
||||||
|
|
||||||
/* Issue Marker IOCB */
|
/* Issue Marker IOCB */
|
||||||
rval = qla2x00_async_marker(fcport, lun,
|
rval = qla2x00_marker(vha, vha->hw->req_q_map[0],
|
||||||
|
vha->hw->rsp_q_map[0], fcport->loop_id, lun,
|
||||||
flags == TCF_LUN_RESET ? MK_SYNC_ID_LUN : MK_SYNC_ID);
|
flags == TCF_LUN_RESET ? MK_SYNC_ID_LUN : MK_SYNC_ID);
|
||||||
|
|
||||||
if ((rval != QLA_SUCCESS) || iocb->u.tmf.data) {
|
if ((rval != QLA_SUCCESS) || iocb->u.tmf.data) {
|
||||||
@ -512,24 +461,6 @@ qla2x00_async_tm_cmd_done(struct scsi_qla_host *vha, fc_port_t *fcport,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
qla2x00_async_marker_done(struct scsi_qla_host *vha, fc_port_t *fcport,
|
|
||||||
struct srb_iocb *iocb)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Currently we dont have any specific post response processing
|
|
||||||
* for this IOCB. We'll just return success or failed
|
|
||||||
* depending on whether the IOCB command succeeded or failed.
|
|
||||||
*/
|
|
||||||
if (iocb->u.tmf.data) {
|
|
||||||
DEBUG2_3_11(printk(KERN_WARNING
|
|
||||||
"%s(%ld): Marker IOCB failed (%x).\n",
|
|
||||||
__func__, vha->host_no, iocb->u.tmf.data));
|
|
||||||
}
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
/* QLogic ISP2x00 Hardware Support Functions. */
|
/* QLogic ISP2x00 Hardware Support Functions. */
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
@ -11,8 +11,6 @@
|
|||||||
|
|
||||||
#include <scsi/scsi_tcq.h>
|
#include <scsi/scsi_tcq.h>
|
||||||
|
|
||||||
static request_t *qla2x00_req_pkt(struct scsi_qla_host *, struct req_que *,
|
|
||||||
struct rsp_que *rsp);
|
|
||||||
static void qla2x00_isp_cmd(struct scsi_qla_host *, struct req_que *);
|
static void qla2x00_isp_cmd(struct scsi_qla_host *, struct req_que *);
|
||||||
|
|
||||||
static void qla25xx_set_que(srb_t *, struct rsp_que **);
|
static void qla25xx_set_que(srb_t *, struct rsp_que **);
|
||||||
@ -474,7 +472,7 @@ __qla2x00_marker(struct scsi_qla_host *vha, struct req_que *req,
|
|||||||
scsi_qla_host_t *base_vha = pci_get_drvdata(ha->pdev);
|
scsi_qla_host_t *base_vha = pci_get_drvdata(ha->pdev);
|
||||||
|
|
||||||
mrk24 = NULL;
|
mrk24 = NULL;
|
||||||
mrk = (mrk_entry_t *)qla2x00_req_pkt(vha, req, rsp);
|
mrk = (mrk_entry_t *)qla2x00_alloc_iocbs(vha, 0);
|
||||||
if (mrk == NULL) {
|
if (mrk == NULL) {
|
||||||
DEBUG2_3(printk("%s(%ld): failed to allocate Marker IOCB.\n",
|
DEBUG2_3(printk("%s(%ld): failed to allocate Marker IOCB.\n",
|
||||||
__func__, base_vha->host_no));
|
__func__, base_vha->host_no));
|
||||||
@ -520,84 +518,6 @@ qla2x00_marker(struct scsi_qla_host *vha, struct req_que *req,
|
|||||||
return (ret);
|
return (ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* qla2x00_req_pkt() - Retrieve a request packet from the request ring.
|
|
||||||
* @ha: HA context
|
|
||||||
*
|
|
||||||
* Note: The caller must hold the hardware lock before calling this routine.
|
|
||||||
*
|
|
||||||
* Returns NULL if function failed, else, a pointer to the request packet.
|
|
||||||
*/
|
|
||||||
static request_t *
|
|
||||||
qla2x00_req_pkt(struct scsi_qla_host *vha, struct req_que *req,
|
|
||||||
struct rsp_que *rsp)
|
|
||||||
{
|
|
||||||
struct qla_hw_data *ha = vha->hw;
|
|
||||||
device_reg_t __iomem *reg = ISP_QUE_REG(ha, req->id);
|
|
||||||
request_t *pkt = NULL;
|
|
||||||
uint16_t cnt;
|
|
||||||
uint32_t *dword_ptr;
|
|
||||||
uint32_t timer;
|
|
||||||
uint16_t req_cnt = 1;
|
|
||||||
|
|
||||||
/* Wait 1 second for slot. */
|
|
||||||
for (timer = HZ; timer; timer--) {
|
|
||||||
if ((req_cnt + 2) >= req->cnt) {
|
|
||||||
/* Calculate number of free request entries. */
|
|
||||||
if (ha->mqenable)
|
|
||||||
cnt = (uint16_t)
|
|
||||||
RD_REG_DWORD(®->isp25mq.req_q_out);
|
|
||||||
else {
|
|
||||||
if (IS_QLA82XX(ha))
|
|
||||||
cnt = (uint16_t)RD_REG_DWORD(
|
|
||||||
®->isp82.req_q_out);
|
|
||||||
else if (IS_FWI2_CAPABLE(ha))
|
|
||||||
cnt = (uint16_t)RD_REG_DWORD(
|
|
||||||
®->isp24.req_q_out);
|
|
||||||
else
|
|
||||||
cnt = qla2x00_debounce_register(
|
|
||||||
ISP_REQ_Q_OUT(ha, ®->isp));
|
|
||||||
}
|
|
||||||
if (req->ring_index < cnt)
|
|
||||||
req->cnt = cnt - req->ring_index;
|
|
||||||
else
|
|
||||||
req->cnt = req->length -
|
|
||||||
(req->ring_index - cnt);
|
|
||||||
}
|
|
||||||
/* If room for request in request ring. */
|
|
||||||
if ((req_cnt + 2) < req->cnt) {
|
|
||||||
req->cnt--;
|
|
||||||
pkt = req->ring_ptr;
|
|
||||||
|
|
||||||
/* Zero out packet. */
|
|
||||||
dword_ptr = (uint32_t *)pkt;
|
|
||||||
for (cnt = 0; cnt < REQUEST_ENTRY_SIZE / 4; cnt++)
|
|
||||||
*dword_ptr++ = 0;
|
|
||||||
|
|
||||||
/* Set entry count. */
|
|
||||||
pkt->entry_count = 1;
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Release ring specific lock */
|
|
||||||
spin_unlock_irq(&ha->hardware_lock);
|
|
||||||
|
|
||||||
udelay(2); /* 2 us */
|
|
||||||
|
|
||||||
/* Check for pending interrupts. */
|
|
||||||
/* During init we issue marker directly */
|
|
||||||
if (!vha->marker_needed && !vha->flags.init_done)
|
|
||||||
qla2x00_poll(rsp);
|
|
||||||
spin_lock_irq(&ha->hardware_lock);
|
|
||||||
}
|
|
||||||
if (!pkt) {
|
|
||||||
DEBUG2_3(printk("%s(): **** FAILED ****\n", __func__));
|
|
||||||
}
|
|
||||||
|
|
||||||
return (pkt);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* qla2x00_isp_cmd() - Modify the request ring pointer.
|
* qla2x00_isp_cmd() - Modify the request ring pointer.
|
||||||
* @ha: HA context
|
* @ha: HA context
|
||||||
@ -1559,11 +1479,9 @@ static void qla25xx_set_que(srb_t *sp, struct rsp_que **rsp)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Generic Control-SRB manipulation functions. */
|
/* Generic Control-SRB manipulation functions. */
|
||||||
|
void *
|
||||||
static void *
|
qla2x00_alloc_iocbs(scsi_qla_host_t *vha, srb_t *sp)
|
||||||
qla2x00_alloc_iocbs(srb_t *sp)
|
|
||||||
{
|
{
|
||||||
scsi_qla_host_t *vha = sp->fcport->vha;
|
|
||||||
struct qla_hw_data *ha = vha->hw;
|
struct qla_hw_data *ha = vha->hw;
|
||||||
struct req_que *req = ha->req_q_map[0];
|
struct req_que *req = ha->req_q_map[0];
|
||||||
device_reg_t __iomem *reg = ISP_QUE_REG(ha, req->id);
|
device_reg_t __iomem *reg = ISP_QUE_REG(ha, req->id);
|
||||||
@ -1573,6 +1491,10 @@ qla2x00_alloc_iocbs(srb_t *sp)
|
|||||||
|
|
||||||
pkt = NULL;
|
pkt = NULL;
|
||||||
req_cnt = 1;
|
req_cnt = 1;
|
||||||
|
handle = 0;
|
||||||
|
|
||||||
|
if (!sp)
|
||||||
|
goto skip_cmd_array;
|
||||||
|
|
||||||
/* Check for room in outstanding command list. */
|
/* Check for room in outstanding command list. */
|
||||||
handle = req->current_outstanding_cmd;
|
handle = req->current_outstanding_cmd;
|
||||||
@ -1586,10 +1508,18 @@ qla2x00_alloc_iocbs(srb_t *sp)
|
|||||||
if (index == MAX_OUTSTANDING_COMMANDS)
|
if (index == MAX_OUTSTANDING_COMMANDS)
|
||||||
goto queuing_error;
|
goto queuing_error;
|
||||||
|
|
||||||
|
/* Prep command array. */
|
||||||
|
req->current_outstanding_cmd = handle;
|
||||||
|
req->outstanding_cmds[handle] = sp;
|
||||||
|
sp->handle = handle;
|
||||||
|
|
||||||
|
skip_cmd_array:
|
||||||
/* Check for room on request queue. */
|
/* Check for room on request queue. */
|
||||||
if (req->cnt < req_cnt) {
|
if (req->cnt < req_cnt) {
|
||||||
if (ha->mqenable)
|
if (ha->mqenable)
|
||||||
cnt = RD_REG_DWORD(®->isp25mq.req_q_out);
|
cnt = RD_REG_DWORD(®->isp25mq.req_q_out);
|
||||||
|
else if (IS_QLA82XX(ha))
|
||||||
|
cnt = RD_REG_DWORD(®->isp82.req_q_out);
|
||||||
else if (IS_FWI2_CAPABLE(ha))
|
else if (IS_FWI2_CAPABLE(ha))
|
||||||
cnt = RD_REG_DWORD(®->isp24.req_q_out);
|
cnt = RD_REG_DWORD(®->isp24.req_q_out);
|
||||||
else
|
else
|
||||||
@ -1606,15 +1536,11 @@ qla2x00_alloc_iocbs(srb_t *sp)
|
|||||||
goto queuing_error;
|
goto queuing_error;
|
||||||
|
|
||||||
/* Prep packet */
|
/* Prep packet */
|
||||||
req->current_outstanding_cmd = handle;
|
|
||||||
req->outstanding_cmds[handle] = sp;
|
|
||||||
req->cnt -= req_cnt;
|
req->cnt -= req_cnt;
|
||||||
|
|
||||||
pkt = req->ring_ptr;
|
pkt = req->ring_ptr;
|
||||||
memset(pkt, 0, REQUEST_ENTRY_SIZE);
|
memset(pkt, 0, REQUEST_ENTRY_SIZE);
|
||||||
pkt->entry_count = req_cnt;
|
pkt->entry_count = req_cnt;
|
||||||
pkt->handle = handle;
|
pkt->handle = handle;
|
||||||
sp->handle = handle;
|
|
||||||
|
|
||||||
queuing_error:
|
queuing_error:
|
||||||
return pkt;
|
return pkt;
|
||||||
@ -1794,31 +1720,6 @@ qla24xx_tm_iocb(srb_t *sp, struct tsk_mgmt_entry *tsk)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
qla24xx_marker_iocb(srb_t *sp, struct mrk_entry_24xx *mrk)
|
|
||||||
{
|
|
||||||
uint16_t lun;
|
|
||||||
uint8_t modif;
|
|
||||||
struct fc_port *fcport = sp->fcport;
|
|
||||||
scsi_qla_host_t *vha = fcport->vha;
|
|
||||||
struct srb_ctx *ctx = sp->ctx;
|
|
||||||
struct srb_iocb *iocb = ctx->u.iocb_cmd;
|
|
||||||
struct req_que *req = vha->req;
|
|
||||||
|
|
||||||
lun = iocb->u.marker.lun;
|
|
||||||
modif = iocb->u.marker.modif;
|
|
||||||
mrk->entry_type = MARKER_TYPE;
|
|
||||||
mrk->modifier = modif;
|
|
||||||
if (modif != MK_SYNC_ALL) {
|
|
||||||
mrk->nport_handle = cpu_to_le16(fcport->loop_id);
|
|
||||||
mrk->lun[1] = LSB(lun);
|
|
||||||
mrk->lun[2] = MSB(lun);
|
|
||||||
host_to_fcp_swap(mrk->lun, sizeof(mrk->lun));
|
|
||||||
mrk->vp_index = vha->vp_idx;
|
|
||||||
mrk->handle = MAKE_HANDLE(req->id, mrk->handle);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
qla24xx_els_iocb(srb_t *sp, struct els_entry_24xx *els_iocb)
|
qla24xx_els_iocb(srb_t *sp, struct els_entry_24xx *els_iocb)
|
||||||
{
|
{
|
||||||
@ -1945,7 +1846,7 @@ qla2x00_start_sp(srb_t *sp)
|
|||||||
|
|
||||||
rval = QLA_FUNCTION_FAILED;
|
rval = QLA_FUNCTION_FAILED;
|
||||||
spin_lock_irqsave(&ha->hardware_lock, flags);
|
spin_lock_irqsave(&ha->hardware_lock, flags);
|
||||||
pkt = qla2x00_alloc_iocbs(sp);
|
pkt = qla2x00_alloc_iocbs(sp->fcport->vha, sp);
|
||||||
if (!pkt)
|
if (!pkt)
|
||||||
goto done;
|
goto done;
|
||||||
|
|
||||||
@ -1976,9 +1877,6 @@ qla2x00_start_sp(srb_t *sp)
|
|||||||
case SRB_TM_CMD:
|
case SRB_TM_CMD:
|
||||||
qla24xx_tm_iocb(sp, pkt);
|
qla24xx_tm_iocb(sp, pkt);
|
||||||
break;
|
break;
|
||||||
case SRB_MARKER_CMD:
|
|
||||||
qla24xx_marker_iocb(sp, pkt);
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1238,39 +1238,6 @@ qla24xx_tm_iocb_entry(scsi_qla_host_t *vha, struct req_que *req,
|
|||||||
iocb->done(sp);
|
iocb->done(sp);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
qla24xx_marker_iocb_entry(scsi_qla_host_t *vha, struct req_que *req,
|
|
||||||
struct mrk_entry_24xx *mrk)
|
|
||||||
{
|
|
||||||
const char func[] = "MRK-IOCB";
|
|
||||||
const char *type;
|
|
||||||
fc_port_t *fcport;
|
|
||||||
srb_t *sp;
|
|
||||||
struct srb_iocb *iocb;
|
|
||||||
struct srb_ctx *ctx;
|
|
||||||
struct sts_entry_24xx *sts = (struct sts_entry_24xx *)mrk;
|
|
||||||
|
|
||||||
sp = qla2x00_get_sp_from_handle(vha, func, req, mrk);
|
|
||||||
if (!sp)
|
|
||||||
return;
|
|
||||||
|
|
||||||
ctx = sp->ctx;
|
|
||||||
iocb = ctx->u.iocb_cmd;
|
|
||||||
type = ctx->name;
|
|
||||||
fcport = sp->fcport;
|
|
||||||
|
|
||||||
if (sts->entry_status) {
|
|
||||||
iocb->u.marker.data = 1;
|
|
||||||
DEBUG2(printk(KERN_WARNING
|
|
||||||
"scsi(%ld:%x): Async-%s error entry - entry-status=%x.\n",
|
|
||||||
fcport->vha->host_no, sp->handle, type,
|
|
||||||
sts->entry_status));
|
|
||||||
DEBUG2(qla2x00_dump_buffer((uint8_t *)mrk, sizeof(*sts)));
|
|
||||||
}
|
|
||||||
|
|
||||||
iocb->done(sp);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* qla2x00_process_response_queue() - Process response queue entries.
|
* qla2x00_process_response_queue() - Process response queue entries.
|
||||||
* @ha: SCSI driver HA context
|
* @ha: SCSI driver HA context
|
||||||
@ -1942,10 +1909,6 @@ void qla24xx_process_response_queue(struct scsi_qla_host *vha,
|
|||||||
qla24xx_tm_iocb_entry(vha, rsp->req,
|
qla24xx_tm_iocb_entry(vha, rsp->req,
|
||||||
(struct tsk_mgmt_entry *)pkt);
|
(struct tsk_mgmt_entry *)pkt);
|
||||||
break;
|
break;
|
||||||
case MARKER_TYPE:
|
|
||||||
qla24xx_marker_iocb_entry(vha, rsp->req,
|
|
||||||
(struct mrk_entry_24xx *)pkt);
|
|
||||||
break;
|
|
||||||
case CT_IOCB_TYPE:
|
case CT_IOCB_TYPE:
|
||||||
qla24xx_els_ct_entry(vha, rsp->req, pkt, CT_IOCB_TYPE);
|
qla24xx_els_ct_entry(vha, rsp->req, pkt, CT_IOCB_TYPE);
|
||||||
clear_bit(MBX_INTERRUPT, &vha->hw->mbx_cmd_flags);
|
clear_bit(MBX_INTERRUPT, &vha->hw->mbx_cmd_flags);
|
||||||
|
Loading…
Reference in New Issue
Block a user