diff options
author | Milton Miller <miltonm@bga.com> | 2011-05-10 15:30:11 -0400 |
---|---|---|
committer | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2011-05-19 01:31:45 -0400 |
commit | d1921bcdeee66c3d1704ef753dc74464856e4b7f (patch) | |
tree | c8cb951755a6b614cac34114f5c24d2be76762a3 /arch/powerpc/sysdev/fsl_msi.c | |
parent | 6c4c82e20a1b476589c1e2b0b7c2adc783c93006 (diff) |
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>
Diffstat (limited to 'arch/powerpc/sysdev/fsl_msi.c')
-rw-r--r-- | arch/powerpc/sysdev/fsl_msi.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/arch/powerpc/sysdev/fsl_msi.c b/arch/powerpc/sysdev/fsl_msi.c index 077776c06cd0..067cc88ae376 100644 --- a/arch/powerpc/sysdev/fsl_msi.c +++ b/arch/powerpc/sysdev/fsl_msi.c | |||
@@ -110,7 +110,7 @@ static void fsl_teardown_msi_irqs(struct pci_dev *pdev) | |||
110 | list_for_each_entry(entry, &pdev->msi_list, list) { | 110 | list_for_each_entry(entry, &pdev->msi_list, list) { |
111 | if (entry->irq == NO_IRQ) | 111 | if (entry->irq == NO_IRQ) |
112 | continue; | 112 | continue; |
113 | msi_data = irq_get_handler_data(entry->irq); | 113 | msi_data = irq_get_chip_data(entry->irq); |
114 | irq_set_msi_desc(entry->irq, NULL); | 114 | irq_set_msi_desc(entry->irq, NULL); |
115 | msi_bitmap_free_hwirqs(&msi_data->bitmap, | 115 | msi_bitmap_free_hwirqs(&msi_data->bitmap, |
116 | virq_to_hw(entry->irq), 1); | 116 | virq_to_hw(entry->irq), 1); |
@@ -168,7 +168,7 @@ static int fsl_setup_msi_irqs(struct pci_dev *pdev, int nvec, int type) | |||
168 | rc = -ENOSPC; | 168 | rc = -ENOSPC; |
169 | goto out_free; | 169 | goto out_free; |
170 | } | 170 | } |
171 | irq_set_handler_data(virq, msi_data); | 171 | /* chip_data is msi_data via host->hostdata in host->map() */ |
172 | irq_set_msi_desc(virq, entry); | 172 | irq_set_msi_desc(virq, entry); |
173 | 173 | ||
174 | fsl_compose_msi_msg(pdev, hwirq, &msg, msi_data); | 174 | 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) | |||
193 | u32 have_shift = 0; | 193 | u32 have_shift = 0; |
194 | struct fsl_msi_cascade_data *cascade_data; | 194 | struct fsl_msi_cascade_data *cascade_data; |
195 | 195 | ||
196 | cascade_data = (struct fsl_msi_cascade_data *)irq_get_handler_data(irq); | 196 | cascade_data = irq_get_handler_data(irq); |
197 | msi_data = cascade_data->msi_data; | 197 | msi_data = cascade_data->msi_data; |
198 | 198 | ||
199 | raw_spin_lock(&desc->lock); | 199 | raw_spin_lock(&desc->lock); |