powerpc/fsl_msi: Use chip_data not handler_data
handler_data should be reserved for flow handlers on the dependent irq, not consumed by the parent irq code that is part of the irq_chip code. The msi_data pointer was already set in msidesc->irqhost->hostdata and being copied to irq_data->chipdata in the msidesc->irqhost->map() method called via create_irq_mapping, so we can obtain the pointer from there and free the instance it in teardown_msi_irqs. Also remove the unnecessary cast of irq_get_handler_data in the cascade handler, which is the demux flow handler of the parent msi interrupt. (This is the expected usage for handler_data). Signed-off-by: Milton Miller <miltonm@bga.com> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
This commit is contained in:
parent
6c4c82e20a
commit
d1921bcdee
1 changed files with 3 additions and 3 deletions
|
@ -110,7 +110,7 @@ static void fsl_teardown_msi_irqs(struct pci_dev *pdev)
|
||||||
list_for_each_entry(entry, &pdev->msi_list, list) {
|
list_for_each_entry(entry, &pdev->msi_list, list) {
|
||||||
if (entry->irq == NO_IRQ)
|
if (entry->irq == NO_IRQ)
|
||||||
continue;
|
continue;
|
||||||
msi_data = irq_get_handler_data(entry->irq);
|
msi_data = irq_get_chip_data(entry->irq);
|
||||||
irq_set_msi_desc(entry->irq, NULL);
|
irq_set_msi_desc(entry->irq, NULL);
|
||||||
msi_bitmap_free_hwirqs(&msi_data->bitmap,
|
msi_bitmap_free_hwirqs(&msi_data->bitmap,
|
||||||
virq_to_hw(entry->irq), 1);
|
virq_to_hw(entry->irq), 1);
|
||||||
|
@ -168,7 +168,7 @@ static int fsl_setup_msi_irqs(struct pci_dev *pdev, int nvec, int type)
|
||||||
rc = -ENOSPC;
|
rc = -ENOSPC;
|
||||||
goto out_free;
|
goto out_free;
|
||||||
}
|
}
|
||||||
irq_set_handler_data(virq, msi_data);
|
/* chip_data is msi_data via host->hostdata in host->map() */
|
||||||
irq_set_msi_desc(virq, entry);
|
irq_set_msi_desc(virq, entry);
|
||||||
|
|
||||||
fsl_compose_msi_msg(pdev, hwirq, &msg, msi_data);
|
fsl_compose_msi_msg(pdev, hwirq, &msg, msi_data);
|
||||||
|
@ -193,7 +193,7 @@ static void fsl_msi_cascade(unsigned int irq, struct irq_desc *desc)
|
||||||
u32 have_shift = 0;
|
u32 have_shift = 0;
|
||||||
struct fsl_msi_cascade_data *cascade_data;
|
struct fsl_msi_cascade_data *cascade_data;
|
||||||
|
|
||||||
cascade_data = (struct fsl_msi_cascade_data *)irq_get_handler_data(irq);
|
cascade_data = irq_get_handler_data(irq);
|
||||||
msi_data = cascade_data->msi_data;
|
msi_data = cascade_data->msi_data;
|
||||||
|
|
||||||
raw_spin_lock(&desc->lock);
|
raw_spin_lock(&desc->lock);
|
||||||
|
|
Loading…
Reference in a new issue