Update for 2.6.25

git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@338 d57e44dd-8a1f-0410-8b47-8ef2f437770f
This commit is contained in:
Vladislav Bolkhovitin
2008-04-18 16:38:39 +00:00
parent fa84d540ef
commit 25b29b701a
9 changed files with 96 additions and 53 deletions

View File

@@ -1999,9 +1999,9 @@ qla2x00_print_scsi_cmd(struct scsi_cmnd * cmd)
printk("0x%02x ", cmd->cmnd[i]);
}
printk("\n seg_cnt=%d, allowed=%d, retries=%d\n",
cmd->use_sg, cmd->allowed, cmd->retries);
scsi_sg_count(cmd), cmd->allowed, cmd->retries);
printk(" request buffer=0x%p, request buffer len=0x%x\n",
cmd->request_buffer, cmd->request_bufflen);
scsi_sglist(cmd), scsi_bufflen(cmd));
printk(" tag=%d, transfersize=0x%x\n",
cmd->tag, cmd->transfersize);
printk(" serial_number=%lx, SP=%p\n", cmd->serial_number, sp);

View File

@@ -319,4 +319,27 @@ extern void qla2x00_free_sysfs_attr(scsi_qla_host_t *);
extern void qla2x00_init_host_attr(scsi_qla_host_t *);
extern void qla2x00_alloc_sysfs_attr(scsi_qla_host_t *);
extern void qla2x00_free_sysfs_attr(scsi_qla_host_t *);
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23)
static inline void scsi_set_resid(struct scsi_cmnd *cmd, int resid)
{
cmd->resid = resid;
}
static inline struct scatterlist *scsi_sglist(struct scsi_cmnd *cmd)
{
return (struct scatterlist *)cmd->request_buffer;
}
static inline unsigned scsi_bufflen(struct scsi_cmnd *cmd)
{
return cmd->request_bufflen;
}
static inline unsigned scsi_sg_count(struct scsi_cmnd *cmd)
{
return cmd->use_sg;
}
#endif
#endif /* _QLA_GBL_H */

View File

@@ -162,7 +162,7 @@ void qla2x00_build_scsi_iocbs_32(srb_t *sp, cmd_entry_t *cmd_pkt,
__constant_cpu_to_le32(COMMAND_TYPE);
/* No data transfer */
if (cmd->request_bufflen == 0 || cmd->sc_data_direction == DMA_NONE) {
if (scsi_bufflen(cmd) == 0 || cmd->sc_data_direction == DMA_NONE) {
cmd_pkt->byte_count = __constant_cpu_to_le32(0);
return;
}
@@ -176,11 +176,11 @@ void qla2x00_build_scsi_iocbs_32(srb_t *sp, cmd_entry_t *cmd_pkt,
cur_dsd = (uint32_t *)&cmd_pkt->dseg_0_address;
/* Load data segments */
if (cmd->use_sg != 0) {
if (scsi_sg_count(cmd) != 0) {
struct scatterlist *cur_seg;
struct scatterlist *end_seg;
cur_seg = (struct scatterlist *)cmd->request_buffer;
cur_seg = scsi_sglist(cmd);
end_seg = cur_seg + tot_dsds;
while (cur_seg < end_seg) {
cont_entry_t *cont_pkt;
@@ -204,7 +204,7 @@ void qla2x00_build_scsi_iocbs_32(srb_t *sp, cmd_entry_t *cmd_pkt,
}
} else {
*cur_dsd++ = cpu_to_le32(sp->dma_handle);
*cur_dsd++ = cpu_to_le32(cmd->request_bufflen);
*cur_dsd++ = cpu_to_le32(scsi_bufflen(cmd));
}
}
@@ -231,7 +231,7 @@ void qla2x00_build_scsi_iocbs_64(srb_t *sp, cmd_entry_t *cmd_pkt,
__constant_cpu_to_le32(COMMAND_A64_TYPE);
/* No data transfer */
if (cmd->request_bufflen == 0 || cmd->sc_data_direction == DMA_NONE) {
if (scsi_bufflen(cmd) == 0 || cmd->sc_data_direction == DMA_NONE) {
cmd_pkt->byte_count = __constant_cpu_to_le32(0);
return;
}
@@ -245,11 +245,11 @@ void qla2x00_build_scsi_iocbs_64(srb_t *sp, cmd_entry_t *cmd_pkt,
cur_dsd = (uint32_t *)&cmd_pkt->dseg_0_address;
/* Load data segments */
if (cmd->use_sg != 0) {
if (scsi_sg_count(cmd) != 0) {
struct scatterlist *cur_seg;
struct scatterlist *end_seg;
cur_seg = (struct scatterlist *)cmd->request_buffer;
cur_seg = scsi_sglist(cmd);
end_seg = cur_seg + tot_dsds;
while (cur_seg < end_seg) {
dma_addr_t sle_dma;
@@ -277,7 +277,7 @@ void qla2x00_build_scsi_iocbs_64(srb_t *sp, cmd_entry_t *cmd_pkt,
} else {
*cur_dsd++ = cpu_to_le32(LSD(sp->dma_handle));
*cur_dsd++ = cpu_to_le32(MSD(sp->dma_handle));
*cur_dsd++ = cpu_to_le32(cmd->request_bufflen);
*cur_dsd++ = cpu_to_le32(scsi_bufflen(cmd));
}
}
@@ -336,17 +336,17 @@ qla2x00_start_scsi(srb_t *sp)
goto queuing_error;
/* Map the sg table so we have an accurate count of sg entries needed */
if (cmd->use_sg) {
sg = (struct scatterlist *) cmd->request_buffer;
tot_dsds = pci_map_sg(ha->pdev, sg, cmd->use_sg,
if (scsi_sg_count(cmd)) {
sg = scsi_sglist(cmd);
tot_dsds = pci_map_sg(ha->pdev, sg, scsi_sg_count(cmd),
cmd->sc_data_direction);
if (tot_dsds == 0)
goto queuing_error;
} else if (cmd->request_bufflen) {
} else if (scsi_bufflen(cmd)) {
dma_addr_t req_dma;
req_dma = pci_map_single(ha->pdev, cmd->request_buffer,
cmd->request_bufflen, cmd->sc_data_direction);
req_dma = pci_map_single(ha->pdev, scsi_sglist(cmd),
scsi_bufflen(cmd), cmd->sc_data_direction);
if (dma_mapping_error(req_dma))
goto queuing_error;
@@ -390,7 +390,7 @@ qla2x00_start_scsi(srb_t *sp)
/* Load SCSI command packet. */
memcpy(cmd_pkt->scsi_cdb, cmd->cmnd, cmd->cmd_len);
cmd_pkt->byte_count = cpu_to_le32((uint32_t)cmd->request_bufflen);
cmd_pkt->byte_count = cpu_to_le32((uint32_t)scsi_bufflen(cmd));
/* Build IOCB segments */
ha->isp_ops.build_iocbs(sp, cmd_pkt, tot_dsds);
@@ -427,13 +427,13 @@ qla2x00_start_scsi(srb_t *sp)
return (QLA_SUCCESS);
queuing_error:
if (cmd->use_sg && tot_dsds) {
sg = (struct scatterlist *) cmd->request_buffer;
pci_unmap_sg(ha->pdev, sg, cmd->use_sg,
if (scsi_sg_count(cmd) && tot_dsds) {
sg = scsi_sglist(cmd);
pci_unmap_sg(ha->pdev, sg, scsi_sg_count(cmd),
cmd->sc_data_direction);
} else if (tot_dsds) {
pci_unmap_single(ha->pdev, sp->dma_handle,
cmd->request_bufflen, cmd->sc_data_direction);
scsi_bufflen(cmd), cmd->sc_data_direction);
}
spin_unlock_irqrestore(&ha->hardware_lock, flags);
@@ -653,7 +653,7 @@ qla24xx_build_scsi_iocbs(srb_t *sp, struct cmd_type_7 *cmd_pkt,
__constant_cpu_to_le32(COMMAND_TYPE_7);
/* No data transfer */
if (cmd->request_bufflen == 0 || cmd->sc_data_direction == DMA_NONE) {
if (scsi_bufflen(cmd) == 0 || cmd->sc_data_direction == DMA_NONE) {
cmd_pkt->byte_count = __constant_cpu_to_le32(0);
return;
}
@@ -673,11 +673,11 @@ qla24xx_build_scsi_iocbs(srb_t *sp, struct cmd_type_7 *cmd_pkt,
cur_dsd = (uint32_t *)&cmd_pkt->dseg_0_address;
/* Load data segments */
if (cmd->use_sg != 0) {
if (scsi_sg_count(cmd) != 0) {
struct scatterlist *cur_seg;
struct scatterlist *end_seg;
cur_seg = (struct scatterlist *)cmd->request_buffer;
cur_seg = scsi_sglist(cmd);
end_seg = cur_seg + tot_dsds;
while (cur_seg < end_seg) {
dma_addr_t sle_dma;
@@ -705,7 +705,7 @@ qla24xx_build_scsi_iocbs(srb_t *sp, struct cmd_type_7 *cmd_pkt,
} else {
*cur_dsd++ = cpu_to_le32(LSD(sp->dma_handle));
*cur_dsd++ = cpu_to_le32(MSD(sp->dma_handle));
*cur_dsd++ = cpu_to_le32(cmd->request_bufflen);
*cur_dsd++ = cpu_to_le32(scsi_bufflen(cmd));
}
}
@@ -765,17 +765,17 @@ qla24xx_start_scsi(srb_t *sp)
goto queuing_error;
/* Map the sg table so we have an accurate count of sg entries needed */
if (cmd->use_sg) {
sg = (struct scatterlist *) cmd->request_buffer;
tot_dsds = pci_map_sg(ha->pdev, sg, cmd->use_sg,
if (scsi_sg_count(cmd)) {
sg = scsi_sglist(cmd);
tot_dsds = pci_map_sg(ha->pdev, sg, scsi_sg_count(cmd),
cmd->sc_data_direction);
if (tot_dsds == 0)
goto queuing_error;
} else if (cmd->request_bufflen) {
} else if (scsi_bufflen(cmd)) {
dma_addr_t req_dma;
req_dma = pci_map_single(ha->pdev, cmd->request_buffer,
cmd->request_bufflen, cmd->sc_data_direction);
req_dma = pci_map_single(ha->pdev, scsi_sglist(cmd),
scsi_bufflen(cmd), cmd->sc_data_direction);
if (dma_mapping_error(req_dma))
goto queuing_error;
@@ -824,7 +824,7 @@ qla24xx_start_scsi(srb_t *sp)
memcpy(cmd_pkt->fcp_cdb, cmd->cmnd, cmd->cmd_len);
host_to_fcp_swap(cmd_pkt->fcp_cdb, sizeof(cmd_pkt->fcp_cdb));
cmd_pkt->byte_count = cpu_to_le32((uint32_t)cmd->request_bufflen);
cmd_pkt->byte_count = cpu_to_le32((uint32_t)scsi_bufflen(cmd));
/* Build IOCB segments */
qla24xx_build_scsi_iocbs(sp, cmd_pkt, tot_dsds);
@@ -861,13 +861,13 @@ qla24xx_start_scsi(srb_t *sp)
return QLA_SUCCESS;
queuing_error:
if (cmd->use_sg && tot_dsds) {
sg = (struct scatterlist *) cmd->request_buffer;
pci_unmap_sg(ha->pdev, sg, cmd->use_sg,
if (scsi_sg_count(cmd) && tot_dsds) {
sg = scsi_sglist(cmd);
pci_unmap_sg(ha->pdev, sg, scsi_sg_count(cmd),
cmd->sc_data_direction);
} else if (tot_dsds) {
pci_unmap_single(ha->pdev, sp->dma_handle,
cmd->request_bufflen, cmd->sc_data_direction);
scsi_bufflen(cmd), cmd->sc_data_direction);
}
spin_unlock_irqrestore(&ha->hardware_lock, flags);

View File

@@ -1053,11 +1053,11 @@ qla2x00_status_entry(scsi_qla_host_t *ha, void *pkt)
}
if (scsi_status & (SS_RESIDUAL_UNDER | SS_RESIDUAL_OVER)) {
resid = resid_len;
cp->resid = resid;
scsi_set_resid(cp, resid);
CMD_RESID_LEN(cp) = resid;
if (!lscsi_status &&
((unsigned)(cp->request_bufflen - resid) <
((unsigned)(scsi_bufflen(cp) - resid) <
cp->underflow)) {
qla_printk(KERN_INFO, ha,
"scsi(%ld:%d:%d:%d): Mid-layer underflow "
@@ -1065,7 +1065,7 @@ qla2x00_status_entry(scsi_qla_host_t *ha, void *pkt)
"error status.\n", ha->host_no,
cp->device->channel, cp->device->id,
cp->device->lun, resid,
cp->request_bufflen);
scsi_bufflen(cp));
cp->result = DID_ERROR << 16;
break;
@@ -1111,7 +1111,7 @@ qla2x00_status_entry(scsi_qla_host_t *ha, void *pkt)
case CS_DATA_UNDERRUN:
resid = resid_len;
if (scsi_status & SS_RESIDUAL_UNDER) {
cp->resid = resid;
scsi_set_resid(cp, resid);
CMD_RESID_LEN(cp) = resid;
} else {
DEBUG2(printk(KERN_INFO
@@ -1175,14 +1175,14 @@ qla2x00_status_entry(scsi_qla_host_t *ha, void *pkt)
"retrying command.\n", ha->host_no,
cp->device->channel, cp->device->id,
cp->device->lun, resid,
cp->request_bufflen));
scsi_bufflen(cp)));
cp->result = DID_BUS_BUSY << 16;
break;
}
/* Handle mid-layer underflow */
if ((unsigned)(cp->request_bufflen - resid) <
if ((unsigned)(scsi_bufflen(cp) - resid) <
cp->underflow) {
qla_printk(KERN_INFO, ha,
"scsi(%ld:%d:%d:%d): Mid-layer underflow "
@@ -1190,7 +1190,7 @@ qla2x00_status_entry(scsi_qla_host_t *ha, void *pkt)
"error status.\n", ha->host_no,
cp->device->channel, cp->device->id,
cp->device->lun, resid,
cp->request_bufflen);
scsi_bufflen(cp));
cp->result = DID_ERROR << 16;
break;
@@ -1213,7 +1213,7 @@ qla2x00_status_entry(scsi_qla_host_t *ha, void *pkt)
DEBUG2(printk(KERN_INFO
"PID=0x%lx req=0x%x xtra=0x%x -- returning DID_ERROR "
"status!\n",
cp->serial_number, cp->request_bufflen, resid_len));
cp->serial_number, scsi_bufflen(cp), resid_len));
cp->result = DID_ERROR << 16;
break;

View File

@@ -2453,12 +2453,12 @@ qla2x00_sp_free_dma(scsi_qla_host_t *ha, srb_t *sp)
struct scsi_cmnd *cmd = sp->cmd;
if (sp->flags & SRB_DMA_VALID) {
if (cmd->use_sg) {
dma_unmap_sg(&ha->pdev->dev, cmd->request_buffer,
cmd->use_sg, cmd->sc_data_direction);
} else if (cmd->request_bufflen) {
if (scsi_sg_count(cmd)) {
dma_unmap_sg(&ha->pdev->dev, scsi_sglist(cmd),
scsi_sg_count(cmd), cmd->sc_data_direction);
} else if (scsi_bufflen(cmd)) {
dma_unmap_single(&ha->pdev->dev, sp->dma_handle,
cmd->request_bufflen, cmd->sc_data_direction);
scsi_bufflen(cmd), cmd->sc_data_direction);
}
sp->flags &= ~SRB_DMA_VALID;
}

View File

@@ -87,7 +87,12 @@ int changer_attach(struct scst_device *dev)
do {
TRACE_DBG("%s", "Doing TEST_UNIT_READY");
res = scsi_test_unit_ready(dev->scsi_dev, CHANGER_TIMEOUT,
CHANGER_RETRIES);
CHANGER_RETRIES
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,25)
);
#else
, NULL);
#endif
TRACE_DBG("TEST_UNIT_READY done: %x", res);
} while ((--retries > 0) && res);
if (res) {

View File

@@ -87,7 +87,12 @@ int processor_attach(struct scst_device *dev)
do {
TRACE_DBG("%s", "Doing TEST_UNIT_READY");
res = scsi_test_unit_ready(dev->scsi_dev, PROCESSOR_TIMEOUT,
PROCESSOR_RETRIES);
PROCESSOR_RETRIES
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,25)
);
#else
, NULL);
#endif
TRACE_DBG("TEST_UNIT_READY done: %x", res);
} while ((--retries > 0) && res);
if (res) {

View File

@@ -87,7 +87,12 @@ int raid_attach(struct scst_device *dev)
do {
TRACE_DBG("%s", "Doing TEST_UNIT_READY");
res = scsi_test_unit_ready(dev->scsi_dev, RAID_TIMEOUT,
RAID_RETRIES);
RAID_RETRIES
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,25)
);
#else
, NULL);
#endif
TRACE_DBG("TEST_UNIT_READY done: %x", res);
} while ((--retries > 0) && res);
if (res) {

View File

@@ -183,7 +183,12 @@ int tape_attach(struct scst_device *dev)
do {
TRACE_DBG("%s", "Doing TEST_UNIT_READY");
res = scsi_test_unit_ready(dev->scsi_dev, TAPE_SMALL_TIMEOUT,
TAPE_RETRIES);
TAPE_RETRIES
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,25)
);
#else
, NULL);
#endif
TRACE_DBG("TEST_UNIT_READY done: %x", res);
} while ((--retries > 0) && res);
if (res) {