Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

powerpc: Remove get_irq_desc()

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>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>

authored by

Michael Ellerman and committed by
Benjamin Herrenschmidt
6cff46f4 59e3f837

+62 -60
-2
arch/powerpc/include/asm/irq.h
··· 17 17 #include <asm/atomic.h> 18 18 19 19 20 - #define get_irq_desc(irq) (&irq_desc[(irq)]) 21 - 22 20 /* Define a way to iterate across irqs. */ 23 21 #define for_each_irq(i) \ 24 22 for ((i) = 0; (i) < NR_IRQS; ++(i))
+1 -1
arch/powerpc/kernel/crash.c
··· 373 373 hard_irq_disable(); 374 374 375 375 for_each_irq(i) { 376 - struct irq_desc *desc = irq_desc + i; 376 + struct irq_desc *desc = irq_to_desc(i); 377 377 378 378 if (desc->status & IRQ_INPROGRESS) 379 379 desc->chip->eoi(i);
+15 -13
arch/powerpc/kernel/irq.c
··· 190 190 } 191 191 192 192 if (i < NR_IRQS) { 193 - desc = get_irq_desc(i); 193 + desc = irq_to_desc(i); 194 194 spin_lock_irqsave(&desc->lock, flags); 195 195 action = desc->action; 196 196 if (!action || !action->handler) ··· 230 230 #ifdef CONFIG_HOTPLUG_CPU 231 231 void fixup_irqs(cpumask_t map) 232 232 { 233 + struct irq_desc *desc; 233 234 unsigned int irq; 234 235 static int warned; 235 236 236 237 for_each_irq(irq) { 237 238 cpumask_t mask; 238 239 239 - if (irq_desc[irq].status & IRQ_PER_CPU) 240 + desc = irq_to_desc(irq); 241 + if (desc && desc->status & IRQ_PER_CPU) 240 242 continue; 241 243 242 - cpumask_and(&mask, irq_desc[irq].affinity, &map); 244 + cpumask_and(&mask, desc->affinity, &map); 243 245 if (any_online_cpu(mask) == NR_CPUS) { 244 246 printk("Breaking affinity for irq %i\n", irq); 245 247 mask = map; 246 248 } 247 - if (irq_desc[irq].chip->set_affinity) 248 - irq_desc[irq].chip->set_affinity(irq, &mask); 249 - else if (irq_desc[irq].action && !(warned++)) 249 + if (desc->chip->set_affinity) 250 + desc->chip->set_affinity(irq, &mask); 251 + else if (desc->action && !(warned++)) 250 252 printk("Cannot set affinity for irq %i\n", irq); 251 253 } 252 254 ··· 275 273 return; 276 274 } 277 275 278 - desc = irq_desc + irq; 276 + desc = irq_to_desc(irq); 279 277 saved_sp_limit = current->thread.ksp_limit; 280 278 281 279 irqtp->task = curtp->task; ··· 537 535 smp_wmb(); 538 536 539 537 /* Clear norequest flags */ 540 - get_irq_desc(i)->status &= ~IRQ_NOREQUEST; 538 + irq_to_desc(i)->status &= ~IRQ_NOREQUEST; 541 539 542 540 /* Legacy flags are left to default at this point, 543 541 * one can then use irq_create_mapping() to ··· 604 602 irq_hw_number_t hwirq) 605 603 { 606 604 /* Clear IRQ_NOREQUEST flag */ 607 - get_irq_desc(virq)->status &= ~IRQ_NOREQUEST; 605 + irq_to_desc(virq)->status &= ~IRQ_NOREQUEST; 608 606 609 607 /* map it */ 610 608 smp_wmb(); ··· 734 732 735 733 /* Set type if specified and different than the current one */ 736 734 if (type != IRQ_TYPE_NONE && 737 - type != (get_irq_desc(virq)->status & IRQF_TRIGGER_MASK)) 735 + type != (irq_to_desc(virq)->status & IRQF_TRIGGER_MASK)) 738 736 set_irq_type(virq, type); 739 737 return virq; 740 738 } ··· 806 804 irq_map[virq].hwirq = host->inval_irq; 807 805 808 806 /* Set some flags */ 809 - get_irq_desc(virq)->status |= IRQ_NOREQUEST; 807 + irq_to_desc(virq)->status |= IRQ_NOREQUEST; 810 808 811 809 /* Free it */ 812 810 irq_free_virt(virq, 1); ··· 1003 1001 unsigned int i; 1004 1002 1005 1003 for (i = 0; i < NR_IRQS; i++) 1006 - get_irq_desc(i)->status |= IRQ_NOREQUEST; 1004 + irq_to_desc(i)->status |= IRQ_NOREQUEST; 1007 1005 } 1008 1006 1009 1007 /* We need to create the radix trees late */ ··· 1066 1064 "chip name", "host name"); 1067 1065 1068 1066 for (i = 1; i < NR_IRQS; i++) { 1069 - desc = get_irq_desc(i); 1067 + desc = irq_to_desc(i); 1070 1068 spin_lock_irqsave(&desc->lock, flags); 1071 1069 1072 1070 if (desc->action && desc->action->handler) {
+1 -1
arch/powerpc/platforms/512x/mpc5121_ads_cpld.c
··· 132 132 cpld_pic_host_map(struct irq_host *h, unsigned int virq, 133 133 irq_hw_number_t hw) 134 134 { 135 - get_irq_desc(virq)->status |= IRQ_LEVEL; 135 + irq_to_desc(virq)->status |= IRQ_LEVEL; 136 136 set_irq_chip_and_handler(virq, &cpld_pic, handle_level_irq); 137 137 return 0; 138 138 }
+1 -1
arch/powerpc/platforms/52xx/media5200.c
··· 114 114 static int media5200_irq_map(struct irq_host *h, unsigned int virq, 115 115 irq_hw_number_t hw) 116 116 { 117 - struct irq_desc *desc = get_irq_desc(virq); 117 + struct irq_desc *desc = irq_to_desc(virq); 118 118 119 119 pr_debug("%s: h=%p, virq=%i, hwirq=%i\n", __func__, h, virq, (int)hw); 120 120 set_irq_chip_data(virq, &media5200_irq);
+1 -1
arch/powerpc/platforms/82xx/pq2ads-pci-pic.c
··· 107 107 static int pci_pic_host_map(struct irq_host *h, unsigned int virq, 108 108 irq_hw_number_t hw) 109 109 { 110 - get_irq_desc(virq)->status |= IRQ_LEVEL; 110 + irq_to_desc(virq)->status |= IRQ_LEVEL; 111 111 set_irq_chip_data(virq, h->host_data); 112 112 set_irq_chip_and_handler(virq, &pq2ads_pci_ic, handle_level_irq); 113 113 return 0;
+1 -1
arch/powerpc/platforms/85xx/socrates_fpga_pic.c
··· 245 245 irq_hw_number_t hwirq) 246 246 { 247 247 /* All interrupts are LEVEL sensitive */ 248 - get_irq_desc(virq)->status |= IRQ_LEVEL; 248 + irq_to_desc(virq)->status |= IRQ_LEVEL; 249 249 set_irq_chip_and_handler(virq, &socrates_fpga_pic_chip, 250 250 handle_fasteoi_irq); 251 251
+1 -1
arch/powerpc/platforms/86xx/gef_pic.c
··· 163 163 irq_hw_number_t hwirq) 164 164 { 165 165 /* All interrupts are LEVEL sensitive */ 166 - get_irq_desc(virq)->status |= IRQ_LEVEL; 166 + irq_to_desc(virq)->status |= IRQ_LEVEL; 167 167 set_irq_chip_and_handler(virq, &gef_pic_chip, handle_level_irq); 168 168 169 169 return 0;
+1 -1
arch/powerpc/platforms/cell/beat_interrupt.c
··· 136 136 static int beatic_pic_host_map(struct irq_host *h, unsigned int virq, 137 137 irq_hw_number_t hw) 138 138 { 139 - struct irq_desc *desc = get_irq_desc(virq); 139 + struct irq_desc *desc = irq_to_desc(virq); 140 140 int64_t err; 141 141 142 142 err = beat_construct_and_connect_irq_plug(virq, hw);
+2 -2
arch/powerpc/platforms/cell/spider-pic.c
··· 102 102 103 103 /* Reset edge detection logic if necessary 104 104 */ 105 - if (get_irq_desc(virq)->status & IRQ_LEVEL) 105 + if (irq_to_desc(virq)->status & IRQ_LEVEL) 106 106 return; 107 107 108 108 /* Only interrupts 47 to 50 can be set to edge */ ··· 119 119 struct spider_pic *pic = spider_virq_to_pic(virq); 120 120 unsigned int hw = irq_map[virq].hwirq; 121 121 void __iomem *cfg = spider_get_irq_config(pic, hw); 122 - struct irq_desc *desc = get_irq_desc(virq); 122 + struct irq_desc *desc = irq_to_desc(virq); 123 123 u32 old_mask; 124 124 u32 ic; 125 125
+1 -1
arch/powerpc/platforms/iseries/irq.c
··· 214 214 unsigned long flags; 215 215 216 216 for_each_irq (irq) { 217 - struct irq_desc *desc = get_irq_desc(irq); 217 + struct irq_desc *desc = irq_to_desc(irq); 218 218 219 219 if (desc && desc->chip && desc->chip->startup) { 220 220 spin_lock_irqsave(&desc->lock, flags);
+4 -4
arch/powerpc/platforms/powermac/pic.c
··· 152 152 unsigned long bit = 1UL << (src & 0x1f); 153 153 int i = src >> 5; 154 154 155 - spin_lock_irqsave(&pmac_pic_lock, flags); 156 - if ((irq_desc[virq].status & IRQ_LEVEL) == 0) 155 + spin_lock_irqsave(&pmac_pic_lock, flags); 156 + if ((irq_to_desc(virq)->status & IRQ_LEVEL) == 0) 157 157 out_le32(&pmac_irq_hw[i]->ack, bit); 158 158 __set_bit(src, ppc_cached_irq_mask); 159 159 __pmac_set_irq_mask(src, 0); 160 - spin_unlock_irqrestore(&pmac_pic_lock, flags); 160 + spin_unlock_irqrestore(&pmac_pic_lock, flags); 161 161 162 162 return 0; 163 163 } ··· 285 285 static int pmac_pic_host_map(struct irq_host *h, unsigned int virq, 286 286 irq_hw_number_t hw) 287 287 { 288 - struct irq_desc *desc = get_irq_desc(virq); 288 + struct irq_desc *desc = irq_to_desc(virq); 289 289 int level; 290 290 291 291 if (hw >= max_irqs)
+4 -4
arch/powerpc/platforms/pseries/xics.c
··· 156 156 cpumask_t cpumask; 157 157 cpumask_t tmp = CPU_MASK_NONE; 158 158 159 - cpumask_copy(&cpumask, irq_desc[virq].affinity); 159 + cpumask_copy(&cpumask, irq_to_desc(virq)->affinity); 160 160 if (!distribute_irqs) 161 161 return default_server; 162 162 ··· 419 419 /* Insert the interrupt mapping into the radix tree for fast lookup */ 420 420 irq_radix_revmap_insert(xics_host, virq, hw); 421 421 422 - get_irq_desc(virq)->status |= IRQ_LEVEL; 422 + irq_to_desc(virq)->status |= IRQ_LEVEL; 423 423 set_irq_chip_and_handler(virq, xics_irq_chip, handle_fasteoi_irq); 424 424 return 0; 425 425 } ··· 843 843 /* We need to get IPIs still. */ 844 844 if (irq == XICS_IPI || irq == XICS_IRQ_SPURIOUS) 845 845 continue; 846 - desc = get_irq_desc(virq); 846 + desc = irq_to_desc(virq); 847 847 848 848 /* We only need to migrate enabled IRQS */ 849 849 if (desc == NULL || desc->chip == NULL ··· 872 872 virq, cpu); 873 873 874 874 /* Reset affinity to all cpus */ 875 - cpumask_setall(irq_desc[virq].affinity); 875 + cpumask_setall(irq_to_desc(virq)->affinity); 876 876 desc->chip->set_affinity(virq, cpu_all_mask); 877 877 unlock: 878 878 spin_unlock_irqrestore(&desc->lock, flags);
+1 -1
arch/powerpc/sysdev/cpm1.c
··· 102 102 { 103 103 pr_debug("cpm_pic_host_map(%d, 0x%lx)\n", virq, hw); 104 104 105 - get_irq_desc(virq)->status |= IRQ_LEVEL; 105 + irq_to_desc(virq)->status |= IRQ_LEVEL; 106 106 set_irq_chip_and_handler(virq, &cpm_pic, handle_fasteoi_irq); 107 107 return 0; 108 108 }
+6 -4
arch/powerpc/sysdev/cpm2_pic.c
··· 115 115 116 116 static void cpm2_end_irq(unsigned int virq) 117 117 { 118 + struct irq_desc *desc; 118 119 int bit, word; 119 120 unsigned int irq_nr = virq_to_hw(virq); 120 121 121 - if (!(irq_desc[irq_nr].status & (IRQ_DISABLED|IRQ_INPROGRESS)) 122 - && irq_desc[irq_nr].action) { 122 + desc = irq_to_desc(irq_nr); 123 + if (!(desc->status & (IRQ_DISABLED|IRQ_INPROGRESS)) 124 + && desc->action) { 123 125 124 126 bit = irq_to_siubit[irq_nr]; 125 127 word = irq_to_siureg[irq_nr]; ··· 140 138 static int cpm2_set_irq_type(unsigned int virq, unsigned int flow_type) 141 139 { 142 140 unsigned int src = virq_to_hw(virq); 143 - struct irq_desc *desc = get_irq_desc(virq); 141 + struct irq_desc *desc = irq_to_desc(virq); 144 142 unsigned int vold, vnew, edibit; 145 143 146 144 if (flow_type == IRQ_TYPE_NONE) ··· 212 210 { 213 211 pr_debug("cpm2_pic_host_map(%d, 0x%lx)\n", virq, hw); 214 212 215 - get_irq_desc(virq)->status |= IRQ_LEVEL; 213 + irq_to_desc(virq)->status |= IRQ_LEVEL; 216 214 set_irq_chip_and_handler(virq, &cpm2_pic, handle_level_irq); 217 215 return 0; 218 216 }
+1 -1
arch/powerpc/sysdev/fsl_msi.c
··· 55 55 { 56 56 struct irq_chip *chip = &fsl_msi_chip; 57 57 58 - get_irq_desc(virq)->status |= IRQ_TYPE_EDGE_FALLING; 58 + irq_to_desc(virq)->status |= IRQ_TYPE_EDGE_FALLING; 59 59 60 60 set_irq_chip_and_handler(virq, chip, handle_edge_irq); 61 61
+2 -2
arch/powerpc/sysdev/i8259.c
··· 175 175 176 176 /* We block the internal cascade */ 177 177 if (hw == 2) 178 - get_irq_desc(virq)->status |= IRQ_NOREQUEST; 178 + irq_to_desc(virq)->status |= IRQ_NOREQUEST; 179 179 180 180 /* We use the level handler only for now, we might want to 181 181 * be more cautious here but that works for now 182 182 */ 183 - get_irq_desc(virq)->status |= IRQ_LEVEL; 183 + irq_to_desc(virq)->status |= IRQ_LEVEL; 184 184 set_irq_chip_and_handler(virq, &i8259_pic, handle_level_irq); 185 185 return 0; 186 186 }
+1 -1
arch/powerpc/sysdev/ipic.c
··· 605 605 { 606 606 struct ipic *ipic = ipic_from_irq(virq); 607 607 unsigned int src = ipic_irq_to_hw(virq); 608 - struct irq_desc *desc = get_irq_desc(virq); 608 + struct irq_desc *desc = irq_to_desc(virq); 609 609 unsigned int vold, vnew, edibit; 610 610 611 611 if (flow_type == IRQ_TYPE_NONE)
+1 -1
arch/powerpc/sysdev/mpc8xx_pic.c
··· 72 72 73 73 static int mpc8xx_set_irq_type(unsigned int virq, unsigned int flow_type) 74 74 { 75 - struct irq_desc *desc = get_irq_desc(virq); 75 + struct irq_desc *desc = irq_to_desc(virq); 76 76 77 77 desc->status &= ~(IRQ_TYPE_SENSE_MASK | IRQ_LEVEL); 78 78 desc->status |= flow_type & IRQ_TYPE_SENSE_MASK;
+9 -9
arch/powerpc/sysdev/mpic.c
··· 572 572 cpumask_t mask; 573 573 int cpuid; 574 574 575 - cpumask_copy(&mask, irq_desc[virt_irq].affinity); 575 + cpumask_copy(&mask, irq_to_desc(virt_irq)->affinity); 576 576 if (cpus_equal(mask, CPU_MASK_ALL)) { 577 577 static int irq_rover; 578 578 static DEFINE_SPINLOCK(irq_rover_lock); ··· 621 621 if (irq < NUM_ISA_INTERRUPTS) 622 622 return NULL; 623 623 624 - return irq_desc[irq].chip_data; 624 + return irq_to_desc(irq)->chip_data; 625 625 } 626 626 627 627 /* Determine if the linux irq is an IPI */ ··· 648 648 /* Get the mpic structure from the IPI number */ 649 649 static inline struct mpic * mpic_from_ipi(unsigned int ipi) 650 650 { 651 - return irq_desc[ipi].chip_data; 651 + return irq_to_desc(ipi)->chip_data; 652 652 } 653 653 #endif 654 654 655 655 /* Get the mpic structure from the irq number */ 656 656 static inline struct mpic * mpic_from_irq(unsigned int irq) 657 657 { 658 - return irq_desc[irq].chip_data; 658 + return irq_to_desc(irq)->chip_data; 659 659 } 660 660 661 661 /* Send an EOI */ ··· 735 735 736 736 mpic_unmask_irq(irq); 737 737 738 - if (irq_desc[irq].status & IRQ_LEVEL) 738 + if (irq_to_desc(irq)->status & IRQ_LEVEL) 739 739 mpic_ht_end_irq(mpic, src); 740 740 } 741 741 ··· 745 745 unsigned int src = mpic_irq_to_hw(irq); 746 746 747 747 mpic_unmask_irq(irq); 748 - mpic_startup_ht_interrupt(mpic, src, irq_desc[irq].status); 748 + mpic_startup_ht_interrupt(mpic, src, irq_to_desc(irq)->status); 749 749 750 750 return 0; 751 751 } ··· 755 755 struct mpic *mpic = mpic_from_irq(irq); 756 756 unsigned int src = mpic_irq_to_hw(irq); 757 757 758 - mpic_shutdown_ht_interrupt(mpic, src, irq_desc[irq].status); 758 + mpic_shutdown_ht_interrupt(mpic, src, irq_to_desc(irq)->status); 759 759 mpic_mask_irq(irq); 760 760 } 761 761 ··· 772 772 * latched another edge interrupt coming in anyway 773 773 */ 774 774 775 - if (irq_desc[irq].status & IRQ_LEVEL) 775 + if (irq_to_desc(irq)->status & IRQ_LEVEL) 776 776 mpic_ht_end_irq(mpic, src); 777 777 mpic_eoi(mpic); 778 778 } ··· 856 856 { 857 857 struct mpic *mpic = mpic_from_irq(virq); 858 858 unsigned int src = mpic_irq_to_hw(virq); 859 - struct irq_desc *desc = get_irq_desc(virq); 859 + struct irq_desc *desc = irq_to_desc(virq); 860 860 unsigned int vecpri, vold, vnew; 861 861 862 862 DBG("mpic: set_irq_type(mpic:@%p,virq:%d,src:0x%x,type:0x%x)\n",
+1 -1
arch/powerpc/sysdev/mv64x60_pic.c
··· 213 213 { 214 214 int level1; 215 215 216 - get_irq_desc(virq)->status |= IRQ_LEVEL; 216 + irq_to_desc(virq)->status |= IRQ_LEVEL; 217 217 218 218 level1 = (hwirq & MV64x60_LEVEL1_MASK) >> MV64x60_LEVEL1_OFFSET; 219 219 BUG_ON(level1 > MV64x60_LEVEL1_GPP);
+2 -2
arch/powerpc/sysdev/qe_lib/qe_ic.c
··· 189 189 190 190 static inline struct qe_ic *qe_ic_from_irq(unsigned int virq) 191 191 { 192 - return irq_desc[virq].chip_data; 192 + return irq_to_desc(virq)->chip_data; 193 193 } 194 194 195 195 #define virq_to_hw(virq) ((unsigned int)irq_map[virq].hwirq) ··· 263 263 chip = &qe_ic->hc_irq; 264 264 265 265 set_irq_chip_data(virq, qe_ic); 266 - get_irq_desc(virq)->status |= IRQ_LEVEL; 266 + irq_to_desc(virq)->status |= IRQ_LEVEL; 267 267 268 268 set_irq_chip_and_handler(virq, chip, handle_level_irq); 269 269
+1 -1
arch/powerpc/sysdev/tsi108_pci.c
··· 398 398 DBG("%s(%d, 0x%lx)\n", __func__, virq, hw); 399 399 if ((virq >= 1) && (virq <= 4)){ 400 400 irq = virq + IRQ_PCI_INTAD_BASE - 1; 401 - get_irq_desc(irq)->status |= IRQ_LEVEL; 401 + irq_to_desc(irq)->status |= IRQ_LEVEL; 402 402 set_irq_chip(irq, &tsi108_pci_irq); 403 403 } 404 404 return 0;
+3 -3
arch/powerpc/sysdev/uic.c
··· 57 57 58 58 static void uic_unmask_irq(unsigned int virq) 59 59 { 60 - struct irq_desc *desc = get_irq_desc(virq); 60 + struct irq_desc *desc = irq_to_desc(virq); 61 61 struct uic *uic = get_irq_chip_data(virq); 62 62 unsigned int src = uic_irq_to_hw(virq); 63 63 unsigned long flags; ··· 101 101 102 102 static void uic_mask_ack_irq(unsigned int virq) 103 103 { 104 - struct irq_desc *desc = get_irq_desc(virq); 104 + struct irq_desc *desc = irq_to_desc(virq); 105 105 struct uic *uic = get_irq_chip_data(virq); 106 106 unsigned int src = uic_irq_to_hw(virq); 107 107 unsigned long flags; ··· 129 129 { 130 130 struct uic *uic = get_irq_chip_data(virq); 131 131 unsigned int src = uic_irq_to_hw(virq); 132 - struct irq_desc *desc = get_irq_desc(virq); 132 + struct irq_desc *desc = irq_to_desc(virq); 133 133 unsigned long flags; 134 134 int trigger, polarity; 135 135 u32 tr, pr, mask;
+1 -1
arch/powerpc/sysdev/xilinx_intc.c
··· 79 79 80 80 static int xilinx_intc_set_type(unsigned int virq, unsigned int flow_type) 81 81 { 82 - struct irq_desc *desc = get_irq_desc(virq); 82 + struct irq_desc *desc = irq_to_desc(virq); 83 83 84 84 desc->status &= ~(IRQ_TYPE_SENSE_MASK | IRQ_LEVEL); 85 85 desc->status |= flow_type & IRQ_TYPE_SENSE_MASK;