@ -1917,6 +1917,7 @@ qla24xx_msix_rsp_q(int irq, void *dev_id)
struct rsp_que * rsp ;
struct device_reg_24xx __iomem * reg ;
struct scsi_qla_host * vha ;
unsigned long flags ;
rsp = ( struct rsp_que * ) dev_id ;
if ( ! rsp ) {
@ -1927,15 +1928,15 @@ qla24xx_msix_rsp_q(int irq, void *dev_id)
ha = rsp - > hw ;
reg = & ha - > iobase - > isp24 ;
spin_lock_irq ( & ha - > hardware_lock ) ;
spin_lock_irqsave ( & ha - > hardware_lock , flags ) ;
vha = qla25xx_get_host ( rsp ) ;
vha = pci_get_drvdata ( ha - > pdev ) ;
qla24xx_process_response_queue ( vha , rsp ) ;
if ( ! ha - > flags . disable_msix_handshake ) {
WRT_REG_DWORD ( & reg - > hccr , HCCRX_CLR_RISC_INT ) ;
RD_REG_DWORD_RELAXED ( & reg - > hccr ) ;
}
spin_unlock_irq ( & ha - > hardware_lock ) ;
spin_unlock_irqrestore ( & ha - > hardware_lock , flags ) ;
return IRQ_HANDLED ;
}
@ -1946,6 +1947,7 @@ qla25xx_msix_rsp_q(int irq, void *dev_id)
struct qla_hw_data * ha ;
struct rsp_que * rsp ;
struct device_reg_24xx __iomem * reg ;
unsigned long flags ;
rsp = ( struct rsp_que * ) dev_id ;
if ( ! rsp ) {
@ -1958,10 +1960,10 @@ qla25xx_msix_rsp_q(int irq, void *dev_id)
/* Clear the interrupt, if enabled, for this response queue */
if ( rsp - > options & ~ BIT_6 ) {
reg = & ha - > iobase - > isp24 ;
spin_lock_irq ( & ha - > hardware_lock ) ;
spin_lock_irqsave ( & ha - > hardware_lock , flags ) ;
WRT_REG_DWORD ( & reg - > hccr , HCCRX_CLR_RISC_INT ) ;
RD_REG_DWORD_RELAXED ( & reg - > hccr ) ;
spin_unlock_irq ( & ha - > hardware_lock ) ;
spin_unlock_irqrestore ( & ha - > hardware_lock , flags ) ;
}
queue_work_on ( ( int ) ( rsp - > id - 1 ) , ha - > wq , & rsp - > q_work ) ;
@ -1979,6 +1981,7 @@ qla24xx_msix_default(int irq, void *dev_id)
uint32_t stat ;
uint32_t hccr ;
uint16_t mb [ 4 ] ;
unsigned long flags ;
rsp = ( struct rsp_que * ) dev_id ;
if ( ! rsp ) {
@ -1990,7 +1993,7 @@ qla24xx_msix_default(int irq, void *dev_id)
reg = & ha - > iobase - > isp24 ;
status = 0 ;
spin_lock_irq ( & ha - > hardware_lock ) ;
spin_lock_irqsave ( & ha - > hardware_lock , flags ) ;
vha = pci_get_drvdata ( ha - > pdev ) ;
do {
stat = RD_REG_DWORD ( & reg - > host_status ) ;
@ -2039,7 +2042,7 @@ qla24xx_msix_default(int irq, void *dev_id)
}
WRT_REG_DWORD ( & reg - > hccr , HCCRX_CLR_RISC_INT ) ;
} while ( 0 ) ;
spin_unlock_irq ( & ha - > hardware_lock ) ;
spin_unlock_irqrestore ( & ha - > hardware_lock , flags ) ;
if ( test_bit ( MBX_INTR_WAIT , & ha - > mbx_cmd_flags ) & &
( status & MBX_INTERRUPT ) & & ha - > flags . mbox_int ) {
@ -2277,30 +2280,3 @@ int qla25xx_request_irq(struct rsp_que *rsp)
msix - > rsp = rsp ;
return ret ;
}
struct scsi_qla_host *
qla25xx_get_host ( struct rsp_que * rsp )
{
srb_t * sp ;
struct qla_hw_data * ha = rsp - > hw ;
struct scsi_qla_host * vha = NULL ;
struct sts_entry_24xx * pkt ;
struct req_que * req ;
uint16_t que ;
uint32_t handle ;
pkt = ( struct sts_entry_24xx * ) rsp - > ring_ptr ;
que = MSW ( pkt - > handle ) ;
handle = ( uint32_t ) LSW ( pkt - > handle ) ;
req = ha - > req_q_map [ que ] ;
if ( handle < MAX_OUTSTANDING_COMMANDS ) {
sp = req - > outstanding_cmds [ handle ] ;
if ( sp )
return sp - > fcport - > vha ;
else
goto base_que ;
}
base_que :
vha = pci_get_drvdata ( ha - > pdev ) ;
return vha ;
}