Patchwork [3/6] powerpc: Remove get_irq_desc()

login
register
mail settings
Submitter Michael Ellerman
Date Oct. 14, 2009, 5:44 a.m.
Message ID <a78e4bb1b3a65314dd4bd0c253a0abf242bd34a6.1255499081.git.michael@ellerman.id.au>
Download mbox | patch
Permalink /patch/35916/
State Accepted
Commit 6cff46f4bc6cc4a8a4154b0b6a2e669db08e8fd2
Delegated to: Benjamin Herrenschmidt
Headers show

Comments

Michael Ellerman - Oct. 14, 2009, 5:44 a.m.
get_irq_desc() is a powerpc-specific version of irq_to_desc(). That
is reason enough to remove it, but it also doesn't know about sparse
irq_desc support which irq_to_desc() does (when we enable it).

Signed-off-by: Michael Ellerman <michael@ellerman.id.au>
---
 arch/powerpc/include/asm/irq.h                  |    2 -
 arch/powerpc/kernel/crash.c                     |    2 +-
 arch/powerpc/kernel/irq.c                       |   28 ++++++++++++----------
 arch/powerpc/platforms/512x/mpc5121_ads_cpld.c  |    2 +-
 arch/powerpc/platforms/52xx/media5200.c         |    2 +-
 arch/powerpc/platforms/82xx/pq2ads-pci-pic.c    |    2 +-
 arch/powerpc/platforms/85xx/socrates_fpga_pic.c |    2 +-
 arch/powerpc/platforms/86xx/gef_pic.c           |    2 +-
 arch/powerpc/platforms/cell/beat_interrupt.c    |    2 +-
 arch/powerpc/platforms/cell/spider-pic.c        |    4 +-
 arch/powerpc/platforms/iseries/irq.c            |    2 +-
 arch/powerpc/platforms/powermac/pic.c           |    8 +++---
 arch/powerpc/platforms/pseries/xics.c           |    8 +++---
 arch/powerpc/sysdev/cpm1.c                      |    2 +-
 arch/powerpc/sysdev/cpm2_pic.c                  |   10 +++++---
 arch/powerpc/sysdev/fsl_msi.c                   |    2 +-
 arch/powerpc/sysdev/i8259.c                     |    4 +-
 arch/powerpc/sysdev/ipic.c                      |    2 +-
 arch/powerpc/sysdev/mpc8xx_pic.c                |    2 +-
 arch/powerpc/sysdev/mpic.c                      |   18 +++++++-------
 arch/powerpc/sysdev/mv64x60_pic.c               |    2 +-
 arch/powerpc/sysdev/qe_lib/qe_ic.c              |    4 +-
 arch/powerpc/sysdev/tsi108_pci.c                |    2 +-
 arch/powerpc/sysdev/uic.c                       |    6 ++--
 arch/powerpc/sysdev/xilinx_intc.c               |    2 +-
 25 files changed, 62 insertions(+), 60 deletions(-)
Grant Likely - Oct. 14, 2009, 7:02 p.m.
On Tue, Oct 13, 2009 at 11:44 PM, Michael Ellerman
<michael@ellerman.id.au> wrote:
> get_irq_desc() is a powerpc-specific version of irq_to_desc(). That
> is reason enough to remove it, but it also doesn't know about sparse
> irq_desc support which irq_to_desc() does (when we enable it).
>
> Signed-off-by: Michael Ellerman <michael@ellerman.id.au>
Acked-by: Grant Likely <grant.likely@secretlab.ca>

> ---
>  arch/powerpc/include/asm/irq.h                  |    2 -
>  arch/powerpc/kernel/crash.c                     |    2 +-
>  arch/powerpc/kernel/irq.c                       |   28 ++++++++++++----------
>  arch/powerpc/platforms/512x/mpc5121_ads_cpld.c  |    2 +-
>  arch/powerpc/platforms/52xx/media5200.c         |    2 +-
>  arch/powerpc/platforms/82xx/pq2ads-pci-pic.c    |    2 +-
>  arch/powerpc/platforms/85xx/socrates_fpga_pic.c |    2 +-
>  arch/powerpc/platforms/86xx/gef_pic.c           |    2 +-
>  arch/powerpc/platforms/cell/beat_interrupt.c    |    2 +-
>  arch/powerpc/platforms/cell/spider-pic.c        |    4 +-
>  arch/powerpc/platforms/iseries/irq.c            |    2 +-
>  arch/powerpc/platforms/powermac/pic.c           |    8 +++---
>  arch/powerpc/platforms/pseries/xics.c           |    8 +++---
>  arch/powerpc/sysdev/cpm1.c                      |    2 +-
>  arch/powerpc/sysdev/cpm2_pic.c                  |   10 +++++---
>  arch/powerpc/sysdev/fsl_msi.c                   |    2 +-
>  arch/powerpc/sysdev/i8259.c                     |    4 +-
>  arch/powerpc/sysdev/ipic.c                      |    2 +-
>  arch/powerpc/sysdev/mpc8xx_pic.c                |    2 +-
>  arch/powerpc/sysdev/mpic.c                      |   18 +++++++-------
>  arch/powerpc/sysdev/mv64x60_pic.c               |    2 +-
>  arch/powerpc/sysdev/qe_lib/qe_ic.c              |    4 +-
>  arch/powerpc/sysdev/tsi108_pci.c                |    2 +-
>  arch/powerpc/sysdev/uic.c                       |    6 ++--
>  arch/powerpc/sysdev/xilinx_intc.c               |    2 +-
>  25 files changed, 62 insertions(+), 60 deletions(-)
>
> diff --git a/arch/powerpc/include/asm/irq.h b/arch/powerpc/include/asm/irq.h
> index b83fcc8..03dc28c 100644
> --- a/arch/powerpc/include/asm/irq.h
> +++ b/arch/powerpc/include/asm/irq.h
> @@ -17,8 +17,6 @@
>  #include <asm/atomic.h>
>
>
> -#define get_irq_desc(irq) (&irq_desc[(irq)])
> -
>  /* Define a way to iterate across irqs. */
>  #define for_each_irq(i) \
>        for ((i) = 0; (i) < NR_IRQS; ++(i))
> diff --git a/arch/powerpc/kernel/crash.c b/arch/powerpc/kernel/crash.c
> index 0a8439a..6f4613d 100644
> --- a/arch/powerpc/kernel/crash.c
> +++ b/arch/powerpc/kernel/crash.c
> @@ -373,7 +373,7 @@ void default_machine_crash_shutdown(struct pt_regs *regs)
>        hard_irq_disable();
>
>        for_each_irq(i) {
> -               struct irq_desc *desc = irq_desc + i;
> +               struct irq_desc *desc = irq_to_desc(i);
>
>                if (desc->status & IRQ_INPROGRESS)
>                        desc->chip->eoi(i);
> diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c
> index e5d1211..6563221 100644
> --- a/arch/powerpc/kernel/irq.c
> +++ b/arch/powerpc/kernel/irq.c
> @@ -190,7 +190,7 @@ int show_interrupts(struct seq_file *p, void *v)
>        }
>
>        if (i < NR_IRQS) {
> -               desc = get_irq_desc(i);
> +               desc = irq_to_desc(i);
>                spin_lock_irqsave(&desc->lock, flags);
>                action = desc->action;
>                if (!action || !action->handler)
> @@ -230,23 +230,25 @@ skip:
>  #ifdef CONFIG_HOTPLUG_CPU
>  void fixup_irqs(cpumask_t map)
>  {
> +       struct irq_desc *desc;
>        unsigned int irq;
>        static int warned;
>
>        for_each_irq(irq) {
>                cpumask_t mask;
>
> -               if (irq_desc[irq].status & IRQ_PER_CPU)
> +               desc = irq_to_desc(irq);
> +               if (desc && desc->status & IRQ_PER_CPU)
>                        continue;
>
> -               cpumask_and(&mask, irq_desc[irq].affinity, &map);
> +               cpumask_and(&mask, desc->affinity, &map);
>                if (any_online_cpu(mask) == NR_CPUS) {
>                        printk("Breaking affinity for irq %i\n", irq);
>                        mask = map;
>                }
> -               if (irq_desc[irq].chip->set_affinity)
> -                       irq_desc[irq].chip->set_affinity(irq, &mask);
> -               else if (irq_desc[irq].action && !(warned++))
> +               if (desc->chip->set_affinity)
> +                       desc->chip->set_affinity(irq, &mask);
> +               else if (desc->action && !(warned++))
>                        printk("Cannot set affinity for irq %i\n", irq);
>        }
>
> @@ -273,7 +275,7 @@ static inline void handle_one_irq(unsigned int irq)
>                return;
>        }
>
> -       desc = irq_desc + irq;
> +       desc = irq_to_desc(irq);
>        saved_sp_limit = current->thread.ksp_limit;
>
>        irqtp->task = curtp->task;
> @@ -535,7 +537,7 @@ struct irq_host *irq_alloc_host(struct device_node *of_node,
>                        smp_wmb();
>
>                        /* Clear norequest flags */
> -                       get_irq_desc(i)->status &= ~IRQ_NOREQUEST;
> +                       irq_to_desc(i)->status &= ~IRQ_NOREQUEST;
>
>                        /* Legacy flags are left to default at this point,
>                         * one can then use irq_create_mapping() to
> @@ -602,7 +604,7 @@ static int irq_setup_virq(struct irq_host *host, unsigned int virq,
>                            irq_hw_number_t hwirq)
>  {
>        /* Clear IRQ_NOREQUEST flag */
> -       get_irq_desc(virq)->status &= ~IRQ_NOREQUEST;
> +       irq_to_desc(virq)->status &= ~IRQ_NOREQUEST;
>
>        /* map it */
>        smp_wmb();
> @@ -732,7 +734,7 @@ unsigned int irq_create_of_mapping(struct device_node *controller,
>
>        /* Set type if specified and different than the current one */
>        if (type != IRQ_TYPE_NONE &&
> -           type != (get_irq_desc(virq)->status & IRQF_TRIGGER_MASK))
> +           type != (irq_to_desc(virq)->status & IRQF_TRIGGER_MASK))
>                set_irq_type(virq, type);
>        return virq;
>  }
> @@ -804,7 +806,7 @@ void irq_dispose_mapping(unsigned int virq)
>        irq_map[virq].hwirq = host->inval_irq;
>
>        /* Set some flags */
> -       get_irq_desc(virq)->status |= IRQ_NOREQUEST;
> +       irq_to_desc(virq)->status |= IRQ_NOREQUEST;
>
>        /* Free it */
>        irq_free_virt(virq, 1);
> @@ -1001,7 +1003,7 @@ void irq_early_init(void)
>        unsigned int i;
>
>        for (i = 0; i < NR_IRQS; i++)
> -               get_irq_desc(i)->status |= IRQ_NOREQUEST;
> +               irq_to_desc(i)->status |= IRQ_NOREQUEST;
>  }
>
>  /* We need to create the radix trees late */
> @@ -1064,7 +1066,7 @@ static int virq_debug_show(struct seq_file *m, void *private)
>                      "chip name", "host name");
>
>        for (i = 1; i < NR_IRQS; i++) {
> -               desc = get_irq_desc(i);
> +               desc = irq_to_desc(i);
>                spin_lock_irqsave(&desc->lock, flags);
>
>                if (desc->action && desc->action->handler) {
> diff --git a/arch/powerpc/platforms/512x/mpc5121_ads_cpld.c b/arch/powerpc/platforms/512x/mpc5121_ads_cpld.c
> index a6ce805..cd70ee1 100644
> --- a/arch/powerpc/platforms/512x/mpc5121_ads_cpld.c
> +++ b/arch/powerpc/platforms/512x/mpc5121_ads_cpld.c
> @@ -132,7 +132,7 @@ static int
>  cpld_pic_host_map(struct irq_host *h, unsigned int virq,
>                             irq_hw_number_t hw)
>  {
> -       get_irq_desc(virq)->status |= IRQ_LEVEL;
> +       irq_to_desc(virq)->status |= IRQ_LEVEL;
>        set_irq_chip_and_handler(virq, &cpld_pic, handle_level_irq);
>        return 0;
>  }
> diff --git a/arch/powerpc/platforms/52xx/media5200.c b/arch/powerpc/platforms/52xx/media5200.c
> index 68e4f16..4780203 100644
> --- a/arch/powerpc/platforms/52xx/media5200.c
> +++ b/arch/powerpc/platforms/52xx/media5200.c
> @@ -114,7 +114,7 @@ void media5200_irq_cascade(unsigned int virq, struct irq_desc *desc)
>  static int media5200_irq_map(struct irq_host *h, unsigned int virq,
>                             irq_hw_number_t hw)
>  {
> -       struct irq_desc *desc = get_irq_desc(virq);
> +       struct irq_desc *desc = irq_to_desc(virq);
>
>        pr_debug("%s: h=%p, virq=%i, hwirq=%i\n", __func__, h, virq, (int)hw);
>        set_irq_chip_data(virq, &media5200_irq);
> diff --git a/arch/powerpc/platforms/82xx/pq2ads-pci-pic.c b/arch/powerpc/platforms/82xx/pq2ads-pci-pic.c
> index 7ee979f..a682331 100644
> --- a/arch/powerpc/platforms/82xx/pq2ads-pci-pic.c
> +++ b/arch/powerpc/platforms/82xx/pq2ads-pci-pic.c
> @@ -107,7 +107,7 @@ static void pq2ads_pci_irq_demux(unsigned int irq, struct irq_desc *desc)
>  static int pci_pic_host_map(struct irq_host *h, unsigned int virq,
>                            irq_hw_number_t hw)
>  {
> -       get_irq_desc(virq)->status |= IRQ_LEVEL;
> +       irq_to_desc(virq)->status |= IRQ_LEVEL;
>        set_irq_chip_data(virq, h->host_data);
>        set_irq_chip_and_handler(virq, &pq2ads_pci_ic, handle_level_irq);
>        return 0;
> diff --git a/arch/powerpc/platforms/85xx/socrates_fpga_pic.c b/arch/powerpc/platforms/85xx/socrates_fpga_pic.c
> index 60edf63..e59920a 100644
> --- a/arch/powerpc/platforms/85xx/socrates_fpga_pic.c
> +++ b/arch/powerpc/platforms/85xx/socrates_fpga_pic.c
> @@ -245,7 +245,7 @@ static int socrates_fpga_pic_host_map(struct irq_host *h, unsigned int virq,
>                irq_hw_number_t hwirq)
>  {
>        /* All interrupts are LEVEL sensitive */
> -       get_irq_desc(virq)->status |= IRQ_LEVEL;
> +       irq_to_desc(virq)->status |= IRQ_LEVEL;
>        set_irq_chip_and_handler(virq, &socrates_fpga_pic_chip,
>                        handle_fasteoi_irq);
>
> diff --git a/arch/powerpc/platforms/86xx/gef_pic.c b/arch/powerpc/platforms/86xx/gef_pic.c
> index 50d0a2b..978d6cb 100644
> --- a/arch/powerpc/platforms/86xx/gef_pic.c
> +++ b/arch/powerpc/platforms/86xx/gef_pic.c
> @@ -163,7 +163,7 @@ static int gef_pic_host_map(struct irq_host *h, unsigned int virq,
>                          irq_hw_number_t hwirq)
>  {
>        /* All interrupts are LEVEL sensitive */
> -       get_irq_desc(virq)->status |= IRQ_LEVEL;
> +       irq_to_desc(virq)->status |= IRQ_LEVEL;
>        set_irq_chip_and_handler(virq, &gef_pic_chip, handle_level_irq);
>
>        return 0;
> diff --git a/arch/powerpc/platforms/cell/beat_interrupt.c b/arch/powerpc/platforms/cell/beat_interrupt.c
> index 7225484..4a2bbff 100644
> --- a/arch/powerpc/platforms/cell/beat_interrupt.c
> +++ b/arch/powerpc/platforms/cell/beat_interrupt.c
> @@ -136,7 +136,7 @@ static void beatic_pic_host_unmap(struct irq_host *h, unsigned int virq)
>  static int beatic_pic_host_map(struct irq_host *h, unsigned int virq,
>                               irq_hw_number_t hw)
>  {
> -       struct irq_desc *desc = get_irq_desc(virq);
> +       struct irq_desc *desc = irq_to_desc(virq);
>        int64_t err;
>
>        err = beat_construct_and_connect_irq_plug(virq, hw);
> diff --git a/arch/powerpc/platforms/cell/spider-pic.c b/arch/powerpc/platforms/cell/spider-pic.c
> index 4e56556..9dd63c5 100644
> --- a/arch/powerpc/platforms/cell/spider-pic.c
> +++ b/arch/powerpc/platforms/cell/spider-pic.c
> @@ -102,7 +102,7 @@ static void spider_ack_irq(unsigned int virq)
>
>        /* Reset edge detection logic if necessary
>         */
> -       if (get_irq_desc(virq)->status & IRQ_LEVEL)
> +       if (irq_to_desc(virq)->status & IRQ_LEVEL)
>                return;
>
>        /* Only interrupts 47 to 50 can be set to edge */
> @@ -119,7 +119,7 @@ static int spider_set_irq_type(unsigned int virq, unsigned int type)
>        struct spider_pic *pic = spider_virq_to_pic(virq);
>        unsigned int hw = irq_map[virq].hwirq;
>        void __iomem *cfg = spider_get_irq_config(pic, hw);
> -       struct irq_desc *desc = get_irq_desc(virq);
> +       struct irq_desc *desc = irq_to_desc(virq);
>        u32 old_mask;
>        u32 ic;
>
> diff --git a/arch/powerpc/platforms/iseries/irq.c b/arch/powerpc/platforms/iseries/irq.c
> index 94f4447..f8446ea 100644
> --- a/arch/powerpc/platforms/iseries/irq.c
> +++ b/arch/powerpc/platforms/iseries/irq.c
> @@ -214,7 +214,7 @@ void __init iSeries_activate_IRQs()
>        unsigned long flags;
>
>        for_each_irq (irq) {
> -               struct irq_desc *desc = get_irq_desc(irq);
> +               struct irq_desc *desc = irq_to_desc(irq);
>
>                if (desc && desc->chip && desc->chip->startup) {
>                        spin_lock_irqsave(&desc->lock, flags);
> diff --git a/arch/powerpc/platforms/powermac/pic.c b/arch/powerpc/platforms/powermac/pic.c
> index d212006..484d21e 100644
> --- a/arch/powerpc/platforms/powermac/pic.c
> +++ b/arch/powerpc/platforms/powermac/pic.c
> @@ -152,12 +152,12 @@ static unsigned int pmac_startup_irq(unsigned int virq)
>         unsigned long bit = 1UL << (src & 0x1f);
>         int i = src >> 5;
>
> -       spin_lock_irqsave(&pmac_pic_lock, flags);
> -       if ((irq_desc[virq].status & IRQ_LEVEL) == 0)
> +       spin_lock_irqsave(&pmac_pic_lock, flags);
> +       if ((irq_to_desc(virq)->status & IRQ_LEVEL) == 0)
>                out_le32(&pmac_irq_hw[i]->ack, bit);
>         __set_bit(src, ppc_cached_irq_mask);
>         __pmac_set_irq_mask(src, 0);
> -       spin_unlock_irqrestore(&pmac_pic_lock, flags);
> +       spin_unlock_irqrestore(&pmac_pic_lock, flags);
>
>        return 0;
>  }
> @@ -285,7 +285,7 @@ static int pmac_pic_host_match(struct irq_host *h, struct device_node *node)
>  static int pmac_pic_host_map(struct irq_host *h, unsigned int virq,
>                             irq_hw_number_t hw)
>  {
> -       struct irq_desc *desc = get_irq_desc(virq);
> +       struct irq_desc *desc = irq_to_desc(virq);
>        int level;
>
>        if (hw >= max_irqs)
> diff --git a/arch/powerpc/platforms/pseries/xics.c b/arch/powerpc/platforms/pseries/xics.c
> index 419f8a6..75935ae 100644
> --- a/arch/powerpc/platforms/pseries/xics.c
> +++ b/arch/powerpc/platforms/pseries/xics.c
> @@ -156,7 +156,7 @@ static int get_irq_server(unsigned int virq, unsigned int strict_check)
>        cpumask_t cpumask;
>        cpumask_t tmp = CPU_MASK_NONE;
>
> -       cpumask_copy(&cpumask, irq_desc[virq].affinity);
> +       cpumask_copy(&cpumask, irq_to_desc(virq)->affinity);
>        if (!distribute_irqs)
>                return default_server;
>
> @@ -419,7 +419,7 @@ static int xics_host_map(struct irq_host *h, unsigned int virq,
>        /* Insert the interrupt mapping into the radix tree for fast lookup */
>        irq_radix_revmap_insert(xics_host, virq, hw);
>
> -       get_irq_desc(virq)->status |= IRQ_LEVEL;
> +       irq_to_desc(virq)->status |= IRQ_LEVEL;
>        set_irq_chip_and_handler(virq, xics_irq_chip, handle_fasteoi_irq);
>        return 0;
>  }
> @@ -843,7 +843,7 @@ void xics_migrate_irqs_away(void)
>                /* We need to get IPIs still. */
>                if (irq == XICS_IPI || irq == XICS_IRQ_SPURIOUS)
>                        continue;
> -               desc = get_irq_desc(virq);
> +               desc = irq_to_desc(virq);
>
>                /* We only need to migrate enabled IRQS */
>                if (desc == NULL || desc->chip == NULL
> @@ -872,7 +872,7 @@ void xics_migrate_irqs_away(void)
>                       virq, cpu);
>
>                /* Reset affinity to all cpus */
> -               cpumask_setall(irq_desc[virq].affinity);
> +               cpumask_setall(irq_to_desc(virq)->affinity);
>                desc->chip->set_affinity(virq, cpu_all_mask);
>  unlock:
>                spin_unlock_irqrestore(&desc->lock, flags);
> diff --git a/arch/powerpc/sysdev/cpm1.c b/arch/powerpc/sysdev/cpm1.c
> index 82424cd..5235373 100644
> --- a/arch/powerpc/sysdev/cpm1.c
> +++ b/arch/powerpc/sysdev/cpm1.c
> @@ -102,7 +102,7 @@ static int cpm_pic_host_map(struct irq_host *h, unsigned int virq,
>  {
>        pr_debug("cpm_pic_host_map(%d, 0x%lx)\n", virq, hw);
>
> -       get_irq_desc(virq)->status |= IRQ_LEVEL;
> +       irq_to_desc(virq)->status |= IRQ_LEVEL;
>        set_irq_chip_and_handler(virq, &cpm_pic, handle_fasteoi_irq);
>        return 0;
>  }
> diff --git a/arch/powerpc/sysdev/cpm2_pic.c b/arch/powerpc/sysdev/cpm2_pic.c
> index 78f1f7c..722cf72 100644
> --- a/arch/powerpc/sysdev/cpm2_pic.c
> +++ b/arch/powerpc/sysdev/cpm2_pic.c
> @@ -115,11 +115,13 @@ static void cpm2_ack(unsigned int virq)
>
>  static void cpm2_end_irq(unsigned int virq)
>  {
> +       struct irq_desc *desc;
>        int     bit, word;
>        unsigned int irq_nr = virq_to_hw(virq);
>
> -       if (!(irq_desc[irq_nr].status & (IRQ_DISABLED|IRQ_INPROGRESS))
> -                       && irq_desc[irq_nr].action) {
> +       desc = irq_to_desc(irq_nr);
> +       if (!(desc->status & (IRQ_DISABLED|IRQ_INPROGRESS))
> +                       && desc->action) {
>
>                bit = irq_to_siubit[irq_nr];
>                word = irq_to_siureg[irq_nr];
> @@ -138,7 +140,7 @@ static void cpm2_end_irq(unsigned int virq)
>  static int cpm2_set_irq_type(unsigned int virq, unsigned int flow_type)
>  {
>        unsigned int src = virq_to_hw(virq);
> -       struct irq_desc *desc = get_irq_desc(virq);
> +       struct irq_desc *desc = irq_to_desc(virq);
>        unsigned int vold, vnew, edibit;
>
>        if (flow_type == IRQ_TYPE_NONE)
> @@ -210,7 +212,7 @@ static int cpm2_pic_host_map(struct irq_host *h, unsigned int virq,
>  {
>        pr_debug("cpm2_pic_host_map(%d, 0x%lx)\n", virq, hw);
>
> -       get_irq_desc(virq)->status |= IRQ_LEVEL;
> +       irq_to_desc(virq)->status |= IRQ_LEVEL;
>        set_irq_chip_and_handler(virq, &cpm2_pic, handle_level_irq);
>        return 0;
>  }
> diff --git a/arch/powerpc/sysdev/fsl_msi.c b/arch/powerpc/sysdev/fsl_msi.c
> index da38a1f..7174374 100644
> --- a/arch/powerpc/sysdev/fsl_msi.c
> +++ b/arch/powerpc/sysdev/fsl_msi.c
> @@ -55,7 +55,7 @@ static int fsl_msi_host_map(struct irq_host *h, unsigned int virq,
>  {
>        struct irq_chip *chip = &fsl_msi_chip;
>
> -       get_irq_desc(virq)->status |= IRQ_TYPE_EDGE_FALLING;
> +       irq_to_desc(virq)->status |= IRQ_TYPE_EDGE_FALLING;
>
>        set_irq_chip_and_handler(virq, chip, handle_edge_irq);
>
> diff --git a/arch/powerpc/sysdev/i8259.c b/arch/powerpc/sysdev/i8259.c
> index a96584a..78ed945 100644
> --- a/arch/powerpc/sysdev/i8259.c
> +++ b/arch/powerpc/sysdev/i8259.c
> @@ -175,12 +175,12 @@ static int i8259_host_map(struct irq_host *h, unsigned int virq,
>
>        /* We block the internal cascade */
>        if (hw == 2)
> -               get_irq_desc(virq)->status |= IRQ_NOREQUEST;
> +               irq_to_desc(virq)->status |= IRQ_NOREQUEST;
>
>        /* We use the level handler only for now, we might want to
>         * be more cautious here but that works for now
>         */
> -       get_irq_desc(virq)->status |= IRQ_LEVEL;
> +       irq_to_desc(virq)->status |= IRQ_LEVEL;
>        set_irq_chip_and_handler(virq, &i8259_pic, handle_level_irq);
>        return 0;
>  }
> diff --git a/arch/powerpc/sysdev/ipic.c b/arch/powerpc/sysdev/ipic.c
> index cb7689c..f042c1d 100644
> --- a/arch/powerpc/sysdev/ipic.c
> +++ b/arch/powerpc/sysdev/ipic.c
> @@ -605,7 +605,7 @@ static int ipic_set_irq_type(unsigned int virq, unsigned int flow_type)
>  {
>        struct ipic *ipic = ipic_from_irq(virq);
>        unsigned int src = ipic_irq_to_hw(virq);
> -       struct irq_desc *desc = get_irq_desc(virq);
> +       struct irq_desc *desc = irq_to_desc(virq);
>        unsigned int vold, vnew, edibit;
>
>        if (flow_type == IRQ_TYPE_NONE)
> diff --git a/arch/powerpc/sysdev/mpc8xx_pic.c b/arch/powerpc/sysdev/mpc8xx_pic.c
> index 5d2d552..0117958 100644
> --- a/arch/powerpc/sysdev/mpc8xx_pic.c
> +++ b/arch/powerpc/sysdev/mpc8xx_pic.c
> @@ -72,7 +72,7 @@ static void mpc8xx_end_irq(unsigned int virq)
>
>  static int mpc8xx_set_irq_type(unsigned int virq, unsigned int flow_type)
>  {
> -       struct irq_desc *desc = get_irq_desc(virq);
> +       struct irq_desc *desc = irq_to_desc(virq);
>
>        desc->status &= ~(IRQ_TYPE_SENSE_MASK | IRQ_LEVEL);
>        desc->status |= flow_type & IRQ_TYPE_SENSE_MASK;
> diff --git a/arch/powerpc/sysdev/mpic.c b/arch/powerpc/sysdev/mpic.c
> index 30c44e6..4fd57ab 100644
> --- a/arch/powerpc/sysdev/mpic.c
> +++ b/arch/powerpc/sysdev/mpic.c
> @@ -572,7 +572,7 @@ static int irq_choose_cpu(unsigned int virt_irq)
>        cpumask_t mask;
>        int cpuid;
>
> -       cpumask_copy(&mask, irq_desc[virt_irq].affinity);
> +       cpumask_copy(&mask, irq_to_desc(virt_irq)->affinity);
>        if (cpus_equal(mask, CPU_MASK_ALL)) {
>                static int irq_rover;
>                static DEFINE_SPINLOCK(irq_rover_lock);
> @@ -621,7 +621,7 @@ static struct mpic *mpic_find(unsigned int irq)
>        if (irq < NUM_ISA_INTERRUPTS)
>                return NULL;
>
> -       return irq_desc[irq].chip_data;
> +       return irq_to_desc(irq)->chip_data;
>  }
>
>  /* Determine if the linux irq is an IPI */
> @@ -648,14 +648,14 @@ static inline u32 mpic_physmask(u32 cpumask)
>  /* Get the mpic structure from the IPI number */
>  static inline struct mpic * mpic_from_ipi(unsigned int ipi)
>  {
> -       return irq_desc[ipi].chip_data;
> +       return irq_to_desc(ipi)->chip_data;
>  }
>  #endif
>
>  /* Get the mpic structure from the irq number */
>  static inline struct mpic * mpic_from_irq(unsigned int irq)
>  {
> -       return irq_desc[irq].chip_data;
> +       return irq_to_desc(irq)->chip_data;
>  }
>
>  /* Send an EOI */
> @@ -735,7 +735,7 @@ static void mpic_unmask_ht_irq(unsigned int irq)
>
>        mpic_unmask_irq(irq);
>
> -       if (irq_desc[irq].status & IRQ_LEVEL)
> +       if (irq_to_desc(irq)->status & IRQ_LEVEL)
>                mpic_ht_end_irq(mpic, src);
>  }
>
> @@ -745,7 +745,7 @@ static unsigned int mpic_startup_ht_irq(unsigned int irq)
>        unsigned int src = mpic_irq_to_hw(irq);
>
>        mpic_unmask_irq(irq);
> -       mpic_startup_ht_interrupt(mpic, src, irq_desc[irq].status);
> +       mpic_startup_ht_interrupt(mpic, src, irq_to_desc(irq)->status);
>
>        return 0;
>  }
> @@ -755,7 +755,7 @@ static void mpic_shutdown_ht_irq(unsigned int irq)
>        struct mpic *mpic = mpic_from_irq(irq);
>        unsigned int src = mpic_irq_to_hw(irq);
>
> -       mpic_shutdown_ht_interrupt(mpic, src, irq_desc[irq].status);
> +       mpic_shutdown_ht_interrupt(mpic, src, irq_to_desc(irq)->status);
>        mpic_mask_irq(irq);
>  }
>
> @@ -772,7 +772,7 @@ static void mpic_end_ht_irq(unsigned int irq)
>         * latched another edge interrupt coming in anyway
>         */
>
> -       if (irq_desc[irq].status & IRQ_LEVEL)
> +       if (irq_to_desc(irq)->status & IRQ_LEVEL)
>                mpic_ht_end_irq(mpic, src);
>        mpic_eoi(mpic);
>  }
> @@ -856,7 +856,7 @@ int mpic_set_irq_type(unsigned int virq, unsigned int flow_type)
>  {
>        struct mpic *mpic = mpic_from_irq(virq);
>        unsigned int src = mpic_irq_to_hw(virq);
> -       struct irq_desc *desc = get_irq_desc(virq);
> +       struct irq_desc *desc = irq_to_desc(virq);
>        unsigned int vecpri, vold, vnew;
>
>        DBG("mpic: set_irq_type(mpic:@%p,virq:%d,src:0x%x,type:0x%x)\n",
> diff --git a/arch/powerpc/sysdev/mv64x60_pic.c b/arch/powerpc/sysdev/mv64x60_pic.c
> index 2aa4ed0..485b924 100644
> --- a/arch/powerpc/sysdev/mv64x60_pic.c
> +++ b/arch/powerpc/sysdev/mv64x60_pic.c
> @@ -213,7 +213,7 @@ static int mv64x60_host_map(struct irq_host *h, unsigned int virq,
>  {
>        int level1;
>
> -       get_irq_desc(virq)->status |= IRQ_LEVEL;
> +       irq_to_desc(virq)->status |= IRQ_LEVEL;
>
>        level1 = (hwirq & MV64x60_LEVEL1_MASK) >> MV64x60_LEVEL1_OFFSET;
>        BUG_ON(level1 > MV64x60_LEVEL1_GPP);
> diff --git a/arch/powerpc/sysdev/qe_lib/qe_ic.c b/arch/powerpc/sysdev/qe_lib/qe_ic.c
> index 3faa42e..fc09874 100644
> --- a/arch/powerpc/sysdev/qe_lib/qe_ic.c
> +++ b/arch/powerpc/sysdev/qe_lib/qe_ic.c
> @@ -189,7 +189,7 @@ static inline void qe_ic_write(volatile __be32  __iomem * base, unsigned int reg
>
>  static inline struct qe_ic *qe_ic_from_irq(unsigned int virq)
>  {
> -       return irq_desc[virq].chip_data;
> +       return irq_to_desc(virq)->chip_data;
>  }
>
>  #define virq_to_hw(virq)       ((unsigned int)irq_map[virq].hwirq)
> @@ -263,7 +263,7 @@ static int qe_ic_host_map(struct irq_host *h, unsigned int virq,
>        chip = &qe_ic->hc_irq;
>
>        set_irq_chip_data(virq, qe_ic);
> -       get_irq_desc(virq)->status |= IRQ_LEVEL;
> +       irq_to_desc(virq)->status |= IRQ_LEVEL;
>
>        set_irq_chip_and_handler(virq, chip, handle_level_irq);
>
> diff --git a/arch/powerpc/sysdev/tsi108_pci.c b/arch/powerpc/sysdev/tsi108_pci.c
> index cf244a4..02f6009 100644
> --- a/arch/powerpc/sysdev/tsi108_pci.c
> +++ b/arch/powerpc/sysdev/tsi108_pci.c
> @@ -398,7 +398,7 @@ static int pci_irq_host_map(struct irq_host *h, unsigned int virq,
>        DBG("%s(%d, 0x%lx)\n", __func__, virq, hw);
>        if ((virq >= 1) && (virq <= 4)){
>                irq = virq + IRQ_PCI_INTAD_BASE - 1;
> -               get_irq_desc(irq)->status |= IRQ_LEVEL;
> +               irq_to_desc(irq)->status |= IRQ_LEVEL;
>                set_irq_chip(irq, &tsi108_pci_irq);
>        }
>        return 0;
> diff --git a/arch/powerpc/sysdev/uic.c b/arch/powerpc/sysdev/uic.c
> index 466ce9a..cf97935 100644
> --- a/arch/powerpc/sysdev/uic.c
> +++ b/arch/powerpc/sysdev/uic.c
> @@ -57,7 +57,7 @@ struct uic {
>
>  static void uic_unmask_irq(unsigned int virq)
>  {
> -       struct irq_desc *desc = get_irq_desc(virq);
> +       struct irq_desc *desc = irq_to_desc(virq);
>        struct uic *uic = get_irq_chip_data(virq);
>        unsigned int src = uic_irq_to_hw(virq);
>        unsigned long flags;
> @@ -101,7 +101,7 @@ static void uic_ack_irq(unsigned int virq)
>
>  static void uic_mask_ack_irq(unsigned int virq)
>  {
> -       struct irq_desc *desc = get_irq_desc(virq);
> +       struct irq_desc *desc = irq_to_desc(virq);
>        struct uic *uic = get_irq_chip_data(virq);
>        unsigned int src = uic_irq_to_hw(virq);
>        unsigned long flags;
> @@ -129,7 +129,7 @@ static int uic_set_irq_type(unsigned int virq, unsigned int flow_type)
>  {
>        struct uic *uic = get_irq_chip_data(virq);
>        unsigned int src = uic_irq_to_hw(virq);
> -       struct irq_desc *desc = get_irq_desc(virq);
> +       struct irq_desc *desc = irq_to_desc(virq);
>        unsigned long flags;
>        int trigger, polarity;
>        u32 tr, pr, mask;
> diff --git a/arch/powerpc/sysdev/xilinx_intc.c b/arch/powerpc/sysdev/xilinx_intc.c
> index 40edad5..ab74371 100644
> --- a/arch/powerpc/sysdev/xilinx_intc.c
> +++ b/arch/powerpc/sysdev/xilinx_intc.c
> @@ -79,7 +79,7 @@ static void xilinx_intc_mask(unsigned int virq)
>
>  static int xilinx_intc_set_type(unsigned int virq, unsigned int flow_type)
>  {
> -       struct irq_desc *desc = get_irq_desc(virq);
> +       struct irq_desc *desc = irq_to_desc(virq);
>
>        desc->status &= ~(IRQ_TYPE_SENSE_MASK | IRQ_LEVEL);
>        desc->status |= flow_type & IRQ_TYPE_SENSE_MASK;
> --
> 1.6.2.1
>
> _______________________________________________
> Linuxppc-dev mailing list
> Linuxppc-dev@lists.ozlabs.org
> https://lists.ozlabs.org/listinfo/linuxppc-dev
>

Patch

diff --git a/arch/powerpc/include/asm/irq.h b/arch/powerpc/include/asm/irq.h
index b83fcc8..03dc28c 100644
--- a/arch/powerpc/include/asm/irq.h
+++ b/arch/powerpc/include/asm/irq.h
@@ -17,8 +17,6 @@ 
 #include <asm/atomic.h>
 
 
-#define get_irq_desc(irq) (&irq_desc[(irq)])
-
 /* Define a way to iterate across irqs. */
 #define for_each_irq(i) \
 	for ((i) = 0; (i) < NR_IRQS; ++(i))
diff --git a/arch/powerpc/kernel/crash.c b/arch/powerpc/kernel/crash.c
index 0a8439a..6f4613d 100644
--- a/arch/powerpc/kernel/crash.c
+++ b/arch/powerpc/kernel/crash.c
@@ -373,7 +373,7 @@  void default_machine_crash_shutdown(struct pt_regs *regs)
 	hard_irq_disable();
 
 	for_each_irq(i) {
-		struct irq_desc *desc = irq_desc + i;
+		struct irq_desc *desc = irq_to_desc(i);
 
 		if (desc->status & IRQ_INPROGRESS)
 			desc->chip->eoi(i);
diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c
index e5d1211..6563221 100644
--- a/arch/powerpc/kernel/irq.c
+++ b/arch/powerpc/kernel/irq.c
@@ -190,7 +190,7 @@  int show_interrupts(struct seq_file *p, void *v)
 	}
 
 	if (i < NR_IRQS) {
-		desc = get_irq_desc(i);
+		desc = irq_to_desc(i);
 		spin_lock_irqsave(&desc->lock, flags);
 		action = desc->action;
 		if (!action || !action->handler)
@@ -230,23 +230,25 @@  skip:
 #ifdef CONFIG_HOTPLUG_CPU
 void fixup_irqs(cpumask_t map)
 {
+	struct irq_desc *desc;
 	unsigned int irq;
 	static int warned;
 
 	for_each_irq(irq) {
 		cpumask_t mask;
 
-		if (irq_desc[irq].status & IRQ_PER_CPU)
+		desc = irq_to_desc(irq);
+		if (desc && desc->status & IRQ_PER_CPU)
 			continue;
 
-		cpumask_and(&mask, irq_desc[irq].affinity, &map);
+		cpumask_and(&mask, desc->affinity, &map);
 		if (any_online_cpu(mask) == NR_CPUS) {
 			printk("Breaking affinity for irq %i\n", irq);
 			mask = map;
 		}
-		if (irq_desc[irq].chip->set_affinity)
-			irq_desc[irq].chip->set_affinity(irq, &mask);
-		else if (irq_desc[irq].action && !(warned++))
+		if (desc->chip->set_affinity)
+			desc->chip->set_affinity(irq, &mask);
+		else if (desc->action && !(warned++))
 			printk("Cannot set affinity for irq %i\n", irq);
 	}
 
@@ -273,7 +275,7 @@  static inline void handle_one_irq(unsigned int irq)
 		return;
 	}
 
-	desc = irq_desc + irq;
+	desc = irq_to_desc(irq);
 	saved_sp_limit = current->thread.ksp_limit;
 
 	irqtp->task = curtp->task;
@@ -535,7 +537,7 @@  struct irq_host *irq_alloc_host(struct device_node *of_node,
 			smp_wmb();
 
 			/* Clear norequest flags */
-			get_irq_desc(i)->status &= ~IRQ_NOREQUEST;
+			irq_to_desc(i)->status &= ~IRQ_NOREQUEST;
 
 			/* Legacy flags are left to default at this point,
 			 * one can then use irq_create_mapping() to
@@ -602,7 +604,7 @@  static int irq_setup_virq(struct irq_host *host, unsigned int virq,
 			    irq_hw_number_t hwirq)
 {
 	/* Clear IRQ_NOREQUEST flag */
-	get_irq_desc(virq)->status &= ~IRQ_NOREQUEST;
+	irq_to_desc(virq)->status &= ~IRQ_NOREQUEST;
 
 	/* map it */
 	smp_wmb();
@@ -732,7 +734,7 @@  unsigned int irq_create_of_mapping(struct device_node *controller,
 
 	/* Set type if specified and different than the current one */
 	if (type != IRQ_TYPE_NONE &&
-	    type != (get_irq_desc(virq)->status & IRQF_TRIGGER_MASK))
+	    type != (irq_to_desc(virq)->status & IRQF_TRIGGER_MASK))
 		set_irq_type(virq, type);
 	return virq;
 }
@@ -804,7 +806,7 @@  void irq_dispose_mapping(unsigned int virq)
 	irq_map[virq].hwirq = host->inval_irq;
 
 	/* Set some flags */
-	get_irq_desc(virq)->status |= IRQ_NOREQUEST;
+	irq_to_desc(virq)->status |= IRQ_NOREQUEST;
 
 	/* Free it */
 	irq_free_virt(virq, 1);
@@ -1001,7 +1003,7 @@  void irq_early_init(void)
 	unsigned int i;
 
 	for (i = 0; i < NR_IRQS; i++)
-		get_irq_desc(i)->status |= IRQ_NOREQUEST;
+		irq_to_desc(i)->status |= IRQ_NOREQUEST;
 }
 
 /* We need to create the radix trees late */
@@ -1064,7 +1066,7 @@  static int virq_debug_show(struct seq_file *m, void *private)
 		      "chip name", "host name");
 
 	for (i = 1; i < NR_IRQS; i++) {
-		desc = get_irq_desc(i);
+		desc = irq_to_desc(i);
 		spin_lock_irqsave(&desc->lock, flags);
 
 		if (desc->action && desc->action->handler) {
diff --git a/arch/powerpc/platforms/512x/mpc5121_ads_cpld.c b/arch/powerpc/platforms/512x/mpc5121_ads_cpld.c
index a6ce805..cd70ee1 100644
--- a/arch/powerpc/platforms/512x/mpc5121_ads_cpld.c
+++ b/arch/powerpc/platforms/512x/mpc5121_ads_cpld.c
@@ -132,7 +132,7 @@  static int
 cpld_pic_host_map(struct irq_host *h, unsigned int virq,
 			     irq_hw_number_t hw)
 {
-	get_irq_desc(virq)->status |= IRQ_LEVEL;
+	irq_to_desc(virq)->status |= IRQ_LEVEL;
 	set_irq_chip_and_handler(virq, &cpld_pic, handle_level_irq);
 	return 0;
 }
diff --git a/arch/powerpc/platforms/52xx/media5200.c b/arch/powerpc/platforms/52xx/media5200.c
index 68e4f16..4780203 100644
--- a/arch/powerpc/platforms/52xx/media5200.c
+++ b/arch/powerpc/platforms/52xx/media5200.c
@@ -114,7 +114,7 @@  void media5200_irq_cascade(unsigned int virq, struct irq_desc *desc)
 static int media5200_irq_map(struct irq_host *h, unsigned int virq,
 			     irq_hw_number_t hw)
 {
-	struct irq_desc *desc = get_irq_desc(virq);
+	struct irq_desc *desc = irq_to_desc(virq);
 
 	pr_debug("%s: h=%p, virq=%i, hwirq=%i\n", __func__, h, virq, (int)hw);
 	set_irq_chip_data(virq, &media5200_irq);
diff --git a/arch/powerpc/platforms/82xx/pq2ads-pci-pic.c b/arch/powerpc/platforms/82xx/pq2ads-pci-pic.c
index 7ee979f..a682331 100644
--- a/arch/powerpc/platforms/82xx/pq2ads-pci-pic.c
+++ b/arch/powerpc/platforms/82xx/pq2ads-pci-pic.c
@@ -107,7 +107,7 @@  static void pq2ads_pci_irq_demux(unsigned int irq, struct irq_desc *desc)
 static int pci_pic_host_map(struct irq_host *h, unsigned int virq,
 			    irq_hw_number_t hw)
 {
-	get_irq_desc(virq)->status |= IRQ_LEVEL;
+	irq_to_desc(virq)->status |= IRQ_LEVEL;
 	set_irq_chip_data(virq, h->host_data);
 	set_irq_chip_and_handler(virq, &pq2ads_pci_ic, handle_level_irq);
 	return 0;
diff --git a/arch/powerpc/platforms/85xx/socrates_fpga_pic.c b/arch/powerpc/platforms/85xx/socrates_fpga_pic.c
index 60edf63..e59920a 100644
--- a/arch/powerpc/platforms/85xx/socrates_fpga_pic.c
+++ b/arch/powerpc/platforms/85xx/socrates_fpga_pic.c
@@ -245,7 +245,7 @@  static int socrates_fpga_pic_host_map(struct irq_host *h, unsigned int virq,
 		irq_hw_number_t hwirq)
 {
 	/* All interrupts are LEVEL sensitive */
-	get_irq_desc(virq)->status |= IRQ_LEVEL;
+	irq_to_desc(virq)->status |= IRQ_LEVEL;
 	set_irq_chip_and_handler(virq, &socrates_fpga_pic_chip,
 			handle_fasteoi_irq);
 
diff --git a/arch/powerpc/platforms/86xx/gef_pic.c b/arch/powerpc/platforms/86xx/gef_pic.c
index 50d0a2b..978d6cb 100644
--- a/arch/powerpc/platforms/86xx/gef_pic.c
+++ b/arch/powerpc/platforms/86xx/gef_pic.c
@@ -163,7 +163,7 @@  static int gef_pic_host_map(struct irq_host *h, unsigned int virq,
 			  irq_hw_number_t hwirq)
 {
 	/* All interrupts are LEVEL sensitive */
-	get_irq_desc(virq)->status |= IRQ_LEVEL;
+	irq_to_desc(virq)->status |= IRQ_LEVEL;
 	set_irq_chip_and_handler(virq, &gef_pic_chip, handle_level_irq);
 
 	return 0;
diff --git a/arch/powerpc/platforms/cell/beat_interrupt.c b/arch/powerpc/platforms/cell/beat_interrupt.c
index 7225484..4a2bbff 100644
--- a/arch/powerpc/platforms/cell/beat_interrupt.c
+++ b/arch/powerpc/platforms/cell/beat_interrupt.c
@@ -136,7 +136,7 @@  static void beatic_pic_host_unmap(struct irq_host *h, unsigned int virq)
 static int beatic_pic_host_map(struct irq_host *h, unsigned int virq,
 			       irq_hw_number_t hw)
 {
-	struct irq_desc *desc = get_irq_desc(virq);
+	struct irq_desc *desc = irq_to_desc(virq);
 	int64_t	err;
 
 	err = beat_construct_and_connect_irq_plug(virq, hw);
diff --git a/arch/powerpc/platforms/cell/spider-pic.c b/arch/powerpc/platforms/cell/spider-pic.c
index 4e56556..9dd63c5 100644
--- a/arch/powerpc/platforms/cell/spider-pic.c
+++ b/arch/powerpc/platforms/cell/spider-pic.c
@@ -102,7 +102,7 @@  static void spider_ack_irq(unsigned int virq)
 
 	/* Reset edge detection logic if necessary
 	 */
-	if (get_irq_desc(virq)->status & IRQ_LEVEL)
+	if (irq_to_desc(virq)->status & IRQ_LEVEL)
 		return;
 
 	/* Only interrupts 47 to 50 can be set to edge */
@@ -119,7 +119,7 @@  static int spider_set_irq_type(unsigned int virq, unsigned int type)
 	struct spider_pic *pic = spider_virq_to_pic(virq);
 	unsigned int hw = irq_map[virq].hwirq;
 	void __iomem *cfg = spider_get_irq_config(pic, hw);
-	struct irq_desc *desc = get_irq_desc(virq);
+	struct irq_desc *desc = irq_to_desc(virq);
 	u32 old_mask;
 	u32 ic;
 
diff --git a/arch/powerpc/platforms/iseries/irq.c b/arch/powerpc/platforms/iseries/irq.c
index 94f4447..f8446ea 100644
--- a/arch/powerpc/platforms/iseries/irq.c
+++ b/arch/powerpc/platforms/iseries/irq.c
@@ -214,7 +214,7 @@  void __init iSeries_activate_IRQs()
 	unsigned long flags;
 
 	for_each_irq (irq) {
-		struct irq_desc *desc = get_irq_desc(irq);
+		struct irq_desc *desc = irq_to_desc(irq);
 
 		if (desc && desc->chip && desc->chip->startup) {
 			spin_lock_irqsave(&desc->lock, flags);
diff --git a/arch/powerpc/platforms/powermac/pic.c b/arch/powerpc/platforms/powermac/pic.c
index d212006..484d21e 100644
--- a/arch/powerpc/platforms/powermac/pic.c
+++ b/arch/powerpc/platforms/powermac/pic.c
@@ -152,12 +152,12 @@  static unsigned int pmac_startup_irq(unsigned int virq)
         unsigned long bit = 1UL << (src & 0x1f);
         int i = src >> 5;
 
-  	spin_lock_irqsave(&pmac_pic_lock, flags);
-	if ((irq_desc[virq].status & IRQ_LEVEL) == 0)
+	spin_lock_irqsave(&pmac_pic_lock, flags);
+	if ((irq_to_desc(virq)->status & IRQ_LEVEL) == 0)
 		out_le32(&pmac_irq_hw[i]->ack, bit);
         __set_bit(src, ppc_cached_irq_mask);
         __pmac_set_irq_mask(src, 0);
-  	spin_unlock_irqrestore(&pmac_pic_lock, flags);
+	spin_unlock_irqrestore(&pmac_pic_lock, flags);
 
 	return 0;
 }
@@ -285,7 +285,7 @@  static int pmac_pic_host_match(struct irq_host *h, struct device_node *node)
 static int pmac_pic_host_map(struct irq_host *h, unsigned int virq,
 			     irq_hw_number_t hw)
 {
-	struct irq_desc *desc = get_irq_desc(virq);
+	struct irq_desc *desc = irq_to_desc(virq);
 	int level;
 
 	if (hw >= max_irqs)
diff --git a/arch/powerpc/platforms/pseries/xics.c b/arch/powerpc/platforms/pseries/xics.c
index 419f8a6..75935ae 100644
--- a/arch/powerpc/platforms/pseries/xics.c
+++ b/arch/powerpc/platforms/pseries/xics.c
@@ -156,7 +156,7 @@  static int get_irq_server(unsigned int virq, unsigned int strict_check)
 	cpumask_t cpumask;
 	cpumask_t tmp = CPU_MASK_NONE;
 
-	cpumask_copy(&cpumask, irq_desc[virq].affinity);
+	cpumask_copy(&cpumask, irq_to_desc(virq)->affinity);
 	if (!distribute_irqs)
 		return default_server;
 
@@ -419,7 +419,7 @@  static int xics_host_map(struct irq_host *h, unsigned int virq,
 	/* Insert the interrupt mapping into the radix tree for fast lookup */
 	irq_radix_revmap_insert(xics_host, virq, hw);
 
-	get_irq_desc(virq)->status |= IRQ_LEVEL;
+	irq_to_desc(virq)->status |= IRQ_LEVEL;
 	set_irq_chip_and_handler(virq, xics_irq_chip, handle_fasteoi_irq);
 	return 0;
 }
@@ -843,7 +843,7 @@  void xics_migrate_irqs_away(void)
 		/* We need to get IPIs still. */
 		if (irq == XICS_IPI || irq == XICS_IRQ_SPURIOUS)
 			continue;
-		desc = get_irq_desc(virq);
+		desc = irq_to_desc(virq);
 
 		/* We only need to migrate enabled IRQS */
 		if (desc == NULL || desc->chip == NULL
@@ -872,7 +872,7 @@  void xics_migrate_irqs_away(void)
 		       virq, cpu);
 
 		/* Reset affinity to all cpus */
-		cpumask_setall(irq_desc[virq].affinity);
+		cpumask_setall(irq_to_desc(virq)->affinity);
 		desc->chip->set_affinity(virq, cpu_all_mask);
 unlock:
 		spin_unlock_irqrestore(&desc->lock, flags);
diff --git a/arch/powerpc/sysdev/cpm1.c b/arch/powerpc/sysdev/cpm1.c
index 82424cd..5235373 100644
--- a/arch/powerpc/sysdev/cpm1.c
+++ b/arch/powerpc/sysdev/cpm1.c
@@ -102,7 +102,7 @@  static int cpm_pic_host_map(struct irq_host *h, unsigned int virq,
 {
 	pr_debug("cpm_pic_host_map(%d, 0x%lx)\n", virq, hw);
 
-	get_irq_desc(virq)->status |= IRQ_LEVEL;
+	irq_to_desc(virq)->status |= IRQ_LEVEL;
 	set_irq_chip_and_handler(virq, &cpm_pic, handle_fasteoi_irq);
 	return 0;
 }
diff --git a/arch/powerpc/sysdev/cpm2_pic.c b/arch/powerpc/sysdev/cpm2_pic.c
index 78f1f7c..722cf72 100644
--- a/arch/powerpc/sysdev/cpm2_pic.c
+++ b/arch/powerpc/sysdev/cpm2_pic.c
@@ -115,11 +115,13 @@  static void cpm2_ack(unsigned int virq)
 
 static void cpm2_end_irq(unsigned int virq)
 {
+	struct irq_desc *desc;
 	int	bit, word;
 	unsigned int irq_nr = virq_to_hw(virq);
 
-	if (!(irq_desc[irq_nr].status & (IRQ_DISABLED|IRQ_INPROGRESS))
-			&& irq_desc[irq_nr].action) {
+	desc = irq_to_desc(irq_nr);
+	if (!(desc->status & (IRQ_DISABLED|IRQ_INPROGRESS))
+			&& desc->action) {
 
 		bit = irq_to_siubit[irq_nr];
 		word = irq_to_siureg[irq_nr];
@@ -138,7 +140,7 @@  static void cpm2_end_irq(unsigned int virq)
 static int cpm2_set_irq_type(unsigned int virq, unsigned int flow_type)
 {
 	unsigned int src = virq_to_hw(virq);
-	struct irq_desc *desc = get_irq_desc(virq);
+	struct irq_desc *desc = irq_to_desc(virq);
 	unsigned int vold, vnew, edibit;
 
 	if (flow_type == IRQ_TYPE_NONE)
@@ -210,7 +212,7 @@  static int cpm2_pic_host_map(struct irq_host *h, unsigned int virq,
 {
 	pr_debug("cpm2_pic_host_map(%d, 0x%lx)\n", virq, hw);
 
-	get_irq_desc(virq)->status |= IRQ_LEVEL;
+	irq_to_desc(virq)->status |= IRQ_LEVEL;
 	set_irq_chip_and_handler(virq, &cpm2_pic, handle_level_irq);
 	return 0;
 }
diff --git a/arch/powerpc/sysdev/fsl_msi.c b/arch/powerpc/sysdev/fsl_msi.c
index da38a1f..7174374 100644
--- a/arch/powerpc/sysdev/fsl_msi.c
+++ b/arch/powerpc/sysdev/fsl_msi.c
@@ -55,7 +55,7 @@  static int fsl_msi_host_map(struct irq_host *h, unsigned int virq,
 {
 	struct irq_chip *chip = &fsl_msi_chip;
 
-	get_irq_desc(virq)->status |= IRQ_TYPE_EDGE_FALLING;
+	irq_to_desc(virq)->status |= IRQ_TYPE_EDGE_FALLING;
 
 	set_irq_chip_and_handler(virq, chip, handle_edge_irq);
 
diff --git a/arch/powerpc/sysdev/i8259.c b/arch/powerpc/sysdev/i8259.c
index a96584a..78ed945 100644
--- a/arch/powerpc/sysdev/i8259.c
+++ b/arch/powerpc/sysdev/i8259.c
@@ -175,12 +175,12 @@  static int i8259_host_map(struct irq_host *h, unsigned int virq,
 
 	/* We block the internal cascade */
 	if (hw == 2)
-		get_irq_desc(virq)->status |= IRQ_NOREQUEST;
+		irq_to_desc(virq)->status |= IRQ_NOREQUEST;
 
 	/* We use the level handler only for now, we might want to
 	 * be more cautious here but that works for now
 	 */
-	get_irq_desc(virq)->status |= IRQ_LEVEL;
+	irq_to_desc(virq)->status |= IRQ_LEVEL;
 	set_irq_chip_and_handler(virq, &i8259_pic, handle_level_irq);
 	return 0;
 }
diff --git a/arch/powerpc/sysdev/ipic.c b/arch/powerpc/sysdev/ipic.c
index cb7689c..f042c1d 100644
--- a/arch/powerpc/sysdev/ipic.c
+++ b/arch/powerpc/sysdev/ipic.c
@@ -605,7 +605,7 @@  static int ipic_set_irq_type(unsigned int virq, unsigned int flow_type)
 {
 	struct ipic *ipic = ipic_from_irq(virq);
 	unsigned int src = ipic_irq_to_hw(virq);
-	struct irq_desc *desc = get_irq_desc(virq);
+	struct irq_desc *desc = irq_to_desc(virq);
 	unsigned int vold, vnew, edibit;
 
 	if (flow_type == IRQ_TYPE_NONE)
diff --git a/arch/powerpc/sysdev/mpc8xx_pic.c b/arch/powerpc/sysdev/mpc8xx_pic.c
index 5d2d552..0117958 100644
--- a/arch/powerpc/sysdev/mpc8xx_pic.c
+++ b/arch/powerpc/sysdev/mpc8xx_pic.c
@@ -72,7 +72,7 @@  static void mpc8xx_end_irq(unsigned int virq)
 
 static int mpc8xx_set_irq_type(unsigned int virq, unsigned int flow_type)
 {
-	struct irq_desc *desc = get_irq_desc(virq);
+	struct irq_desc *desc = irq_to_desc(virq);
 
 	desc->status &= ~(IRQ_TYPE_SENSE_MASK | IRQ_LEVEL);
 	desc->status |= flow_type & IRQ_TYPE_SENSE_MASK;
diff --git a/arch/powerpc/sysdev/mpic.c b/arch/powerpc/sysdev/mpic.c
index 30c44e6..4fd57ab 100644
--- a/arch/powerpc/sysdev/mpic.c
+++ b/arch/powerpc/sysdev/mpic.c
@@ -572,7 +572,7 @@  static int irq_choose_cpu(unsigned int virt_irq)
 	cpumask_t mask;
 	int cpuid;
 
-	cpumask_copy(&mask, irq_desc[virt_irq].affinity);
+	cpumask_copy(&mask, irq_to_desc(virt_irq)->affinity);
 	if (cpus_equal(mask, CPU_MASK_ALL)) {
 		static int irq_rover;
 		static DEFINE_SPINLOCK(irq_rover_lock);
@@ -621,7 +621,7 @@  static struct mpic *mpic_find(unsigned int irq)
 	if (irq < NUM_ISA_INTERRUPTS)
 		return NULL;
 
-	return irq_desc[irq].chip_data;
+	return irq_to_desc(irq)->chip_data;
 }
 
 /* Determine if the linux irq is an IPI */
@@ -648,14 +648,14 @@  static inline u32 mpic_physmask(u32 cpumask)
 /* Get the mpic structure from the IPI number */
 static inline struct mpic * mpic_from_ipi(unsigned int ipi)
 {
-	return irq_desc[ipi].chip_data;
+	return irq_to_desc(ipi)->chip_data;
 }
 #endif
 
 /* Get the mpic structure from the irq number */
 static inline struct mpic * mpic_from_irq(unsigned int irq)
 {
-	return irq_desc[irq].chip_data;
+	return irq_to_desc(irq)->chip_data;
 }
 
 /* Send an EOI */
@@ -735,7 +735,7 @@  static void mpic_unmask_ht_irq(unsigned int irq)
 
 	mpic_unmask_irq(irq);
 
-	if (irq_desc[irq].status & IRQ_LEVEL)
+	if (irq_to_desc(irq)->status & IRQ_LEVEL)
 		mpic_ht_end_irq(mpic, src);
 }
 
@@ -745,7 +745,7 @@  static unsigned int mpic_startup_ht_irq(unsigned int irq)
 	unsigned int src = mpic_irq_to_hw(irq);
 
 	mpic_unmask_irq(irq);
-	mpic_startup_ht_interrupt(mpic, src, irq_desc[irq].status);
+	mpic_startup_ht_interrupt(mpic, src, irq_to_desc(irq)->status);
 
 	return 0;
 }
@@ -755,7 +755,7 @@  static void mpic_shutdown_ht_irq(unsigned int irq)
 	struct mpic *mpic = mpic_from_irq(irq);
 	unsigned int src = mpic_irq_to_hw(irq);
 
-	mpic_shutdown_ht_interrupt(mpic, src, irq_desc[irq].status);
+	mpic_shutdown_ht_interrupt(mpic, src, irq_to_desc(irq)->status);
 	mpic_mask_irq(irq);
 }
 
@@ -772,7 +772,7 @@  static void mpic_end_ht_irq(unsigned int irq)
 	 * latched another edge interrupt coming in anyway
 	 */
 
-	if (irq_desc[irq].status & IRQ_LEVEL)
+	if (irq_to_desc(irq)->status & IRQ_LEVEL)
 		mpic_ht_end_irq(mpic, src);
 	mpic_eoi(mpic);
 }
@@ -856,7 +856,7 @@  int mpic_set_irq_type(unsigned int virq, unsigned int flow_type)
 {
 	struct mpic *mpic = mpic_from_irq(virq);
 	unsigned int src = mpic_irq_to_hw(virq);
-	struct irq_desc *desc = get_irq_desc(virq);
+	struct irq_desc *desc = irq_to_desc(virq);
 	unsigned int vecpri, vold, vnew;
 
 	DBG("mpic: set_irq_type(mpic:@%p,virq:%d,src:0x%x,type:0x%x)\n",
diff --git a/arch/powerpc/sysdev/mv64x60_pic.c b/arch/powerpc/sysdev/mv64x60_pic.c
index 2aa4ed0..485b924 100644
--- a/arch/powerpc/sysdev/mv64x60_pic.c
+++ b/arch/powerpc/sysdev/mv64x60_pic.c
@@ -213,7 +213,7 @@  static int mv64x60_host_map(struct irq_host *h, unsigned int virq,
 {
 	int level1;
 
-	get_irq_desc(virq)->status |= IRQ_LEVEL;
+	irq_to_desc(virq)->status |= IRQ_LEVEL;
 
 	level1 = (hwirq & MV64x60_LEVEL1_MASK) >> MV64x60_LEVEL1_OFFSET;
 	BUG_ON(level1 > MV64x60_LEVEL1_GPP);
diff --git a/arch/powerpc/sysdev/qe_lib/qe_ic.c b/arch/powerpc/sysdev/qe_lib/qe_ic.c
index 3faa42e..fc09874 100644
--- a/arch/powerpc/sysdev/qe_lib/qe_ic.c
+++ b/arch/powerpc/sysdev/qe_lib/qe_ic.c
@@ -189,7 +189,7 @@  static inline void qe_ic_write(volatile __be32  __iomem * base, unsigned int reg
 
 static inline struct qe_ic *qe_ic_from_irq(unsigned int virq)
 {
-	return irq_desc[virq].chip_data;
+	return irq_to_desc(virq)->chip_data;
 }
 
 #define virq_to_hw(virq)	((unsigned int)irq_map[virq].hwirq)
@@ -263,7 +263,7 @@  static int qe_ic_host_map(struct irq_host *h, unsigned int virq,
 	chip = &qe_ic->hc_irq;
 
 	set_irq_chip_data(virq, qe_ic);
-	get_irq_desc(virq)->status |= IRQ_LEVEL;
+	irq_to_desc(virq)->status |= IRQ_LEVEL;
 
 	set_irq_chip_and_handler(virq, chip, handle_level_irq);
 
diff --git a/arch/powerpc/sysdev/tsi108_pci.c b/arch/powerpc/sysdev/tsi108_pci.c
index cf244a4..02f6009 100644
--- a/arch/powerpc/sysdev/tsi108_pci.c
+++ b/arch/powerpc/sysdev/tsi108_pci.c
@@ -398,7 +398,7 @@  static int pci_irq_host_map(struct irq_host *h, unsigned int virq,
 	DBG("%s(%d, 0x%lx)\n", __func__, virq, hw);
 	if ((virq >= 1) && (virq <= 4)){
 		irq = virq + IRQ_PCI_INTAD_BASE - 1;
-		get_irq_desc(irq)->status |= IRQ_LEVEL;
+		irq_to_desc(irq)->status |= IRQ_LEVEL;
 		set_irq_chip(irq, &tsi108_pci_irq);
 	}
 	return 0;
diff --git a/arch/powerpc/sysdev/uic.c b/arch/powerpc/sysdev/uic.c
index 466ce9a..cf97935 100644
--- a/arch/powerpc/sysdev/uic.c
+++ b/arch/powerpc/sysdev/uic.c
@@ -57,7 +57,7 @@  struct uic {
 
 static void uic_unmask_irq(unsigned int virq)
 {
-	struct irq_desc *desc = get_irq_desc(virq);
+	struct irq_desc *desc = irq_to_desc(virq);
 	struct uic *uic = get_irq_chip_data(virq);
 	unsigned int src = uic_irq_to_hw(virq);
 	unsigned long flags;
@@ -101,7 +101,7 @@  static void uic_ack_irq(unsigned int virq)
 
 static void uic_mask_ack_irq(unsigned int virq)
 {
-	struct irq_desc *desc = get_irq_desc(virq);
+	struct irq_desc *desc = irq_to_desc(virq);
 	struct uic *uic = get_irq_chip_data(virq);
 	unsigned int src = uic_irq_to_hw(virq);
 	unsigned long flags;
@@ -129,7 +129,7 @@  static int uic_set_irq_type(unsigned int virq, unsigned int flow_type)
 {
 	struct uic *uic = get_irq_chip_data(virq);
 	unsigned int src = uic_irq_to_hw(virq);
-	struct irq_desc *desc = get_irq_desc(virq);
+	struct irq_desc *desc = irq_to_desc(virq);
 	unsigned long flags;
 	int trigger, polarity;
 	u32 tr, pr, mask;
diff --git a/arch/powerpc/sysdev/xilinx_intc.c b/arch/powerpc/sysdev/xilinx_intc.c
index 40edad5..ab74371 100644
--- a/arch/powerpc/sysdev/xilinx_intc.c
+++ b/arch/powerpc/sysdev/xilinx_intc.c
@@ -79,7 +79,7 @@  static void xilinx_intc_mask(unsigned int virq)
 
 static int xilinx_intc_set_type(unsigned int virq, unsigned int flow_type)
 {
-	struct irq_desc *desc = get_irq_desc(virq);
+	struct irq_desc *desc = irq_to_desc(virq);
 
 	desc->status &= ~(IRQ_TYPE_SENSE_MASK | IRQ_LEVEL);
 	desc->status |= flow_type & IRQ_TYPE_SENSE_MASK;