diff options
Diffstat (limited to 'drivers/scsi/qla2xxx/qla_inline.h')
-rw-r--r-- | drivers/scsi/qla2xxx/qla_inline.h | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/drivers/scsi/qla2xxx/qla_inline.h b/drivers/scsi/qla2xxx/qla_inline.h index 5e0a7095c9f2..84c2fea154d2 100644 --- a/drivers/scsi/qla2xxx/qla_inline.h +++ b/drivers/scsi/qla2xxx/qla_inline.h | |||
@@ -37,7 +37,10 @@ qla2x00_poll(struct rsp_que *rsp) | |||
37 | unsigned long flags; | 37 | unsigned long flags; |
38 | struct qla_hw_data *ha = rsp->hw; | 38 | struct qla_hw_data *ha = rsp->hw; |
39 | local_irq_save(flags); | 39 | local_irq_save(flags); |
40 | ha->isp_ops->intr_handler(0, rsp); | 40 | if (IS_QLA82XX(ha)) |
41 | qla82xx_poll(0, rsp); | ||
42 | else | ||
43 | ha->isp_ops->intr_handler(0, rsp); | ||
41 | local_irq_restore(flags); | 44 | local_irq_restore(flags); |
42 | } | 45 | } |
43 | 46 | ||
@@ -64,3 +67,19 @@ qla2x00_is_reserved_id(scsi_qla_host_t *vha, uint16_t loop_id) | |||
64 | return ((loop_id > ha->max_loop_id && loop_id < SNS_FIRST_LOOP_ID) || | 67 | return ((loop_id > ha->max_loop_id && loop_id < SNS_FIRST_LOOP_ID) || |
65 | loop_id == MANAGEMENT_SERVER || loop_id == BROADCAST); | 68 | loop_id == MANAGEMENT_SERVER || loop_id == BROADCAST); |
66 | } | 69 | } |
70 | |||
71 | static inline void | ||
72 | qla2x00_clean_dsd_pool(struct qla_hw_data *ha, srb_t *sp) | ||
73 | { | ||
74 | struct dsd_dma *dsd_ptr, *tdsd_ptr; | ||
75 | |||
76 | /* clean up allocated prev pool */ | ||
77 | list_for_each_entry_safe(dsd_ptr, tdsd_ptr, | ||
78 | &((struct crc_context *)sp->ctx)->dsd_list, list) { | ||
79 | dma_pool_free(ha->dl_dma_pool, dsd_ptr->dsd_addr, | ||
80 | dsd_ptr->dsd_list_dma); | ||
81 | list_del(&dsd_ptr->list); | ||
82 | kfree(dsd_ptr); | ||
83 | } | ||
84 | INIT_LIST_HEAD(&((struct crc_context *)sp->ctx)->dsd_list); | ||
85 | } | ||