On Fri, 2010-04-16 at 15:34 +0800, Li Yang wrote:
> From: Zhao Chenhui <b26...@freescale.com>
> 
> In fsl_of_msi_probe(), the virt_msir's chip_data have been stored
> the pointer to struct mpic. We add a struct fsl_msi_cascade_data
> to store the pointer to struct fsl_msi and msir_index.  Otherwise,
> the pointer to struct mpic will be over-written, and will cause
> problem when calling eoi() of the irq.

I don't quite understand. Do you mean someone was overwriting
handler_data somewhere?
 
> @@ -309,9 +319,19 @@ static int __devinit fsl_of_msi_probe(struct of_device 
> *dev,
>                       break;
>               virt_msir = irq_of_parse_and_map(dev->node, i);
>               if (virt_msir != NO_IRQ) {
> -                     set_irq_data(virt_msir, (void *)i);
> +                     cascade_data = kzalloc(
> +                                     sizeof(struct fsl_msi_cascade_data),
> +                                     GFP_KERNEL);
> +                     if (!cascade_data) {
> +                             dev_err(&dev->dev,
> +                                     "No memory for MSI cascade data\n");
> +                             err = -ENOMEM;
> +                             goto error_out;

The error handling in this routine is not great, most of the setup is
not torn down properly in the error paths AFAICS, this adds another.

> +                     }
> +                     cascade_data->index = i;
> +                     cascade_data->data = msi;
> +                     set_irq_data(virt_msir, (void *)cascade_data);
>                       set_irq_chained_handler(virt_msir, fsl_msi_cascade);
> -                     set_irq_chip_data(virt_msir, msi);
>               }
>       }
>  

cheers

Attachment: signature.asc
Description: This is a digitally signed message part

_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Reply via email to