if (!list_empty(&ha->done_queue)) qla2x00_done(ha);  
qla2300_intr_handler(int irq, void *dev_id, struct pt_regs *regs){	scsi_qla_host_t	*ha;	device_reg_t __iomem *reg;	int		status;	unsigned long	flags;	unsigned long	iter;	uint32_t	stat;	uint32_t	mbx;	uint16_t	hccr;	ha = (scsi_qla_host_t *) dev_id;	if (!ha) {		printk(KERN_INFO		    "%s(): NULL host pointer\n", __func__);		return (IRQ_NONE);	}	reg = ha->iobase;	status = 0;	spin_lock_irqsave(&ha->hardware_lock, flags);	for (iter = 50; iter--; ) {		stat = RD_REG_DWORD(&reg->u.isp2300.host_status);		if (stat & HSR_RISC_PAUSED) {			hccr = RD_REG_WORD(&reg->hccr);			if (hccr & (BIT_15 | BIT_13 | BIT_11 | BIT_8))				qla_printk(KERN_INFO, ha,				    "Parity error -- HCCR=%x.\n", hccr);			else				qla_printk(KERN_INFO, ha,				    "RISC paused -- HCCR=%x\n", hccr);			/*			 * Issue a "HARD" reset in order for the RISC			 * interrupt bit to be cleared.  Schedule a big			 * hammmer to get out of the RISC PAUSED state.			 */			WRT_REG_WORD(&reg->hccr, HCCR_RESET_RISC);			RD_REG_WORD(&reg->hccr);			set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);			break;		} else if ((stat & HSR_RISC_INT) == 0)			break;		mbx = MSW(stat);		switch (stat & 0xff) {		case 0x13:			qla2x00_process_response_queue(ha);			break;		case 0x1:		case 0x2:		case 0x10:		case 0x11:			qla2x00_mbx_completion(ha, (uint16_t)mbx);			status |= MBX_INTERRUPT;			/* Release mailbox registers. */			WRT_REG_WORD(&reg->semaphore, 0);			break;		case 0x12:			qla2x00_async_event(ha, mbx);			break;		case 0x15:			mbx = mbx << 16 | MBA_CMPLT_1_16BIT;			qla2x00_async_event(ha, mbx);			break;		case 0x16:			mbx = mbx << 16 | MBA_SCSI_COMPLETION;			qla2x00_async_event(ha, mbx);			break;		default:			DEBUG2(printk("scsi(%ld): Unrecognized interrupt type "			    "(%d)\n",			    ha->host_no, stat & 0xff));			break;		}		WRT_REG_WORD(&reg->hccr, HCCR_CLR_RISC_INT);		RD_REG_WORD_RELAXED(&reg->hccr);	}	spin_unlock_irqrestore(&ha->hardware_lock, flags);	qla2x00_next(ha);	ha->last_irq_cpu = _smp_processor_id();	ha->total_isr_cnt++;	if (test_bit(MBX_INTR_WAIT, &ha->mbx_cmd_flags) &&	    (status & MBX_INTERRUPT) && ha->flags.mbox_int) {		spin_lock_irqsave(&ha->mbx_reg_lock, flags);		set_bit(MBX_INTERRUPT, &ha->mbx_cmd_flags);		up(&ha->mbx_intr_sem);		spin_unlock_irqrestore(&ha->mbx_reg_lock, flags);	}	if (!list_empty(&ha->done_queue))		qla2x00_done(ha);	return (IRQ_HANDLED);}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/f4f051ebb40e74ad0ba02d2cb3a6c16b0393472b/qla_isr.c/clean/drivers/scsi/qla2xxx/qla_isr.c