diff options
Diffstat (limited to 'arch/powerpc/sysdev/fsl_msi.c')
| -rw-r--r-- | arch/powerpc/sysdev/fsl_msi.c | 12 | 
1 files changed, 4 insertions, 8 deletions
diff --git a/arch/powerpc/sysdev/fsl_msi.c b/arch/powerpc/sysdev/fsl_msi.c index 808e7118abfc..e6b06c3f8197 100644 --- a/arch/powerpc/sysdev/fsl_msi.c +++ b/arch/powerpc/sysdev/fsl_msi.c @@ -266,7 +266,6 @@ out_free:  static irqreturn_t fsl_msi_cascade(int irq, void *data)  { -	unsigned int cascade_irq;  	struct fsl_msi *msi_data;  	int msir_index = -1;  	u32 msir_value = 0; @@ -279,9 +278,6 @@ static irqreturn_t fsl_msi_cascade(int irq, void *data)  	msir_index = cascade_data->index; -	if (msir_index >= NR_MSI_REG_MAX) -		cascade_irq = 0; -  	switch (msi_data->feature & FSL_PIC_IP_MASK) {  	case FSL_PIC_IP_MPIC:  		msir_value = fsl_msi_read(msi_data->msi_regs, @@ -305,15 +301,15 @@ static irqreturn_t fsl_msi_cascade(int irq, void *data)  	}  	while (msir_value) { +		int err;  		intr_index = ffs(msir_value) - 1; -		cascade_irq = irq_linear_revmap(msi_data->irqhost, +		err = generic_handle_domain_irq(msi_data->irqhost,  				msi_hwirq(msi_data, msir_index,  					  intr_index + have_shift)); -		if (cascade_irq) { -			generic_handle_irq(cascade_irq); +		if (!err)  			ret = IRQ_HANDLED; -		} +  		have_shift += intr_index + 1;  		msir_value = msir_value >> (intr_index + 1);  	}  |