Merge branch 'queue/irq/arm' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip into next/cleanup
Merge "ARM: Interrupt cleanups and API change preparation" from Thomas
Gleixner:
The following patch series contains the following changes:
    - Consolidation of chained interrupt handler setup/removal
    - Switch to functions which avoid a redundant interrupt
      descriptor lookup
    - Preparation of interrupt flow handlers for the 'irq' argument
      removal
* 'queue/irq/arm' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  ARM/orion/gpio: Prepare gpio_irq_handler for irq argument removal
  ARM/pxa: Prepare balloon3_irq_handler for irq argument removal
  ARM/pxa: Prepare *_irq_handler for irq argument removal
  ARM/dove: Prepare pmu_irq_handler for irq argument removal
  ARM/sa1111: Prepare sa1111_irq_handler for irq argument removal
  ARM/locomo: Prepare locomo_handler for irq argument removal
  ARM, irq: Use irq_desc_get_xxx() to avoid redundant lookup of irq_desc
  ARM/LPC32xx: Use irq_set_handler_locked()
  ARM/irq: Use access helper irq_data_get_affinity_mask()
  ARM/locomo: Consolidate chained IRQ handler install/remove
  ARM/orion: Consolidate chained IRQ handler install/remove
Signed-off-by: Olof Johansson <olof@lixom.net>
			
			
This commit is contained in:
		
						commit
						39aa437e18
					
				| @ -138,9 +138,9 @@ static struct locomo_dev_info locomo_devices[] = { | ||||
| 	}, | ||||
| }; | ||||
| 
 | ||||
| static void locomo_handler(unsigned int irq, struct irq_desc *desc) | ||||
| static void locomo_handler(unsigned int __irq, struct irq_desc *desc) | ||||
| { | ||||
| 	struct locomo *lchip = irq_get_chip_data(irq); | ||||
| 	struct locomo *lchip = irq_desc_get_chip_data(desc); | ||||
| 	int req, i; | ||||
| 
 | ||||
| 	/* Acknowledge the parent IRQ */ | ||||
| @ -150,6 +150,8 @@ static void locomo_handler(unsigned int irq, struct irq_desc *desc) | ||||
| 	req = locomo_readl(lchip->base + LOCOMO_ICR) & 0x0f00; | ||||
| 
 | ||||
| 	if (req) { | ||||
| 		unsigned int irq; | ||||
| 
 | ||||
| 		/* generate the next interrupt(s) */ | ||||
| 		irq = lchip->irq_base; | ||||
| 		for (i = 0; i <= 3; i++, irq++) { | ||||
| @ -475,8 +477,7 @@ static void __locomo_remove(struct locomo *lchip) | ||||
| 	device_for_each_child(lchip->dev, NULL, locomo_remove_child); | ||||
| 
 | ||||
| 	if (lchip->irq != NO_IRQ) { | ||||
| 		irq_set_chained_handler(lchip->irq, NULL); | ||||
| 		irq_set_handler_data(lchip->irq, NULL); | ||||
| 		irq_set_chained_handler_and_data(lchip->irq, NULL, NULL); | ||||
| 	} | ||||
| 
 | ||||
| 	iounmap(lchip->base); | ||||
|  | ||||
| @ -197,10 +197,11 @@ static struct sa1111_dev_info sa1111_devices[] = { | ||||
|  * will call us again if there are more interrupts to process. | ||||
|  */ | ||||
| static void | ||||
| sa1111_irq_handler(unsigned int irq, struct irq_desc *desc) | ||||
| sa1111_irq_handler(unsigned int __irq, struct irq_desc *desc) | ||||
| { | ||||
| 	unsigned int irq = irq_desc_get_irq(desc); | ||||
| 	unsigned int stat0, stat1, i; | ||||
| 	struct sa1111 *sachip = irq_get_handler_data(irq); | ||||
| 	struct sa1111 *sachip = irq_desc_get_handler_data(desc); | ||||
| 	void __iomem *mapbase = sachip->base + SA1111_INTC; | ||||
| 
 | ||||
| 	stat0 = sa1111_readl(mapbase + SA1111_INTSTATCLR0); | ||||
|  | ||||
| @ -140,7 +140,7 @@ int __init arch_probe_nr_irqs(void) | ||||
| static bool migrate_one_irq(struct irq_desc *desc) | ||||
| { | ||||
| 	struct irq_data *d = irq_desc_get_irq_data(desc); | ||||
| 	const struct cpumask *affinity = d->affinity; | ||||
| 	const struct cpumask *affinity = irq_data_get_affinity_mask(d); | ||||
| 	struct irq_chip *c; | ||||
| 	bool ret = false; | ||||
| 
 | ||||
| @ -160,7 +160,7 @@ static bool migrate_one_irq(struct irq_desc *desc) | ||||
| 	if (!c->irq_set_affinity) | ||||
| 		pr_debug("IRQ%u: unable to set affinity\n", d->irq); | ||||
| 	else if (c->irq_set_affinity(d, affinity, false) == IRQ_SET_MASK_OK && ret) | ||||
| 		cpumask_copy(d->affinity, affinity); | ||||
| 		cpumask_copy(irq_data_get_affinity_mask(d), affinity); | ||||
| 
 | ||||
| 	return ret; | ||||
| } | ||||
|  | ||||
| @ -69,8 +69,9 @@ static struct irq_chip pmu_irq_chip = { | ||||
| 	.irq_ack	= pmu_irq_ack, | ||||
| }; | ||||
| 
 | ||||
| static void pmu_irq_handler(unsigned int irq, struct irq_desc *desc) | ||||
| static void pmu_irq_handler(unsigned int __irq, struct irq_desc *desc) | ||||
| { | ||||
| 	unsigned int irq = irq_desc_get_irq(desc); | ||||
| 	unsigned long cause = readl(PMU_INTERRUPT_CAUSE); | ||||
| 
 | ||||
| 	cause &= readl(PMU_INTERRUPT_MASK); | ||||
|  | ||||
| @ -283,25 +283,25 @@ static int lpc32xx_set_irq_type(struct irq_data *d, unsigned int type) | ||||
| 	case IRQ_TYPE_EDGE_RISING: | ||||
| 		/* Rising edge sensitive */ | ||||
| 		__lpc32xx_set_irq_type(d->hwirq, 1, 1); | ||||
| 		__irq_set_handler_locked(d->irq, handle_edge_irq); | ||||
| 		irq_set_handler_locked(d, handle_edge_irq); | ||||
| 		break; | ||||
| 
 | ||||
| 	case IRQ_TYPE_EDGE_FALLING: | ||||
| 		/* Falling edge sensitive */ | ||||
| 		__lpc32xx_set_irq_type(d->hwirq, 0, 1); | ||||
| 		__irq_set_handler_locked(d->irq, handle_edge_irq); | ||||
| 		irq_set_handler_locked(d, handle_edge_irq); | ||||
| 		break; | ||||
| 
 | ||||
| 	case IRQ_TYPE_LEVEL_LOW: | ||||
| 		/* Low level sensitive */ | ||||
| 		__lpc32xx_set_irq_type(d->hwirq, 0, 0); | ||||
| 		__irq_set_handler_locked(d->irq, handle_level_irq); | ||||
| 		irq_set_handler_locked(d, handle_level_irq); | ||||
| 		break; | ||||
| 
 | ||||
| 	case IRQ_TYPE_LEVEL_HIGH: | ||||
| 		/* High level sensitive */ | ||||
| 		__lpc32xx_set_irq_type(d->hwirq, 1, 0); | ||||
| 		__irq_set_handler_locked(d->irq, handle_level_irq); | ||||
| 		irq_set_handler_locked(d, handle_level_irq); | ||||
| 		break; | ||||
| 
 | ||||
| 	/* Other modes are not supported */ | ||||
|  | ||||
| @ -496,18 +496,18 @@ static struct irq_chip balloon3_irq_chip = { | ||||
| 	.irq_unmask	= balloon3_unmask_irq, | ||||
| }; | ||||
| 
 | ||||
| static void balloon3_irq_handler(unsigned int irq, struct irq_desc *desc) | ||||
| static void balloon3_irq_handler(unsigned int __irq, struct irq_desc *desc) | ||||
| { | ||||
| 	unsigned long pending = __raw_readl(BALLOON3_INT_CONTROL_REG) & | ||||
| 					balloon3_irq_enabled; | ||||
| 	do { | ||||
| 		/* clear useless edge notification */ | ||||
| 		if (desc->irq_data.chip->irq_ack) { | ||||
| 			struct irq_data *d; | ||||
| 		struct irq_data *d = irq_desc_get_irq_data(desc); | ||||
| 		struct irq_chip *chip = irq_data_get_chip(d); | ||||
| 		unsigned int irq; | ||||
| 
 | ||||
| 			d = irq_get_irq_data(BALLOON3_AUX_NIRQ); | ||||
| 			desc->irq_data.chip->irq_ack(d); | ||||
| 		} | ||||
| 		/* clear useless edge notification */ | ||||
| 		if (chip->irq_ack) | ||||
| 			chip->irq_ack(d); | ||||
| 
 | ||||
| 		while (pending) { | ||||
| 			irq = BALLOON3_IRQ(0) + __ffs(pending); | ||||
|  | ||||
| @ -29,8 +29,9 @@ | ||||
| void __iomem *it8152_base_address; | ||||
| static int cmx2xx_it8152_irq_gpio; | ||||
| 
 | ||||
| static void cmx2xx_it8152_irq_demux(unsigned int irq, struct irq_desc *desc) | ||||
| static void cmx2xx_it8152_irq_demux(unsigned int __irq, struct irq_desc *desc) | ||||
| { | ||||
| 	unsigned int irq = irq_desc_get_irq(desc); | ||||
| 	/* clear our parent irq */ | ||||
| 	desc->irq_data.chip->irq_ack(&desc->irq_data); | ||||
| 
 | ||||
|  | ||||
| @ -120,8 +120,9 @@ static struct irq_chip lpd270_irq_chip = { | ||||
| 	.irq_unmask	= lpd270_unmask_irq, | ||||
| }; | ||||
| 
 | ||||
| static void lpd270_irq_handler(unsigned int irq, struct irq_desc *desc) | ||||
| static void lpd270_irq_handler(unsigned int __irq, struct irq_desc *desc) | ||||
| { | ||||
| 	unsigned int irq; | ||||
| 	unsigned long pending; | ||||
| 
 | ||||
| 	pending = __raw_readw(LPD270_INT_STATUS) & lpd270_irq_enabled; | ||||
|  | ||||
| @ -284,8 +284,9 @@ static struct irq_chip pcm990_irq_chip = { | ||||
| 	.irq_unmask	= pcm990_unmask_irq, | ||||
| }; | ||||
| 
 | ||||
| static void pcm990_irq_handler(unsigned int irq, struct irq_desc *desc) | ||||
| static void pcm990_irq_handler(unsigned int __irq, struct irq_desc *desc) | ||||
| { | ||||
| 	unsigned int irq; | ||||
| 	unsigned long pending; | ||||
| 
 | ||||
| 	pending = ~pcm990_cpld_readb(PCM990_CTRL_INTSETCLR); | ||||
|  | ||||
| @ -276,8 +276,9 @@ static inline unsigned long viper_irq_pending(void) | ||||
| 			viper_irq_enabled_mask; | ||||
| } | ||||
| 
 | ||||
| static void viper_irq_handler(unsigned int irq, struct irq_desc *desc) | ||||
| static void viper_irq_handler(unsigned int __irq, struct irq_desc *desc) | ||||
| { | ||||
| 	unsigned int irq; | ||||
| 	unsigned long pending; | ||||
| 
 | ||||
| 	pending = viper_irq_pending(); | ||||
|  | ||||
| @ -105,8 +105,9 @@ static inline unsigned long zeus_irq_pending(void) | ||||
| 	return __raw_readw(ZEUS_CPLD_ISA_IRQ) & zeus_irq_enabled_mask; | ||||
| } | ||||
| 
 | ||||
| static void zeus_irq_handler(unsigned int irq, struct irq_desc *desc) | ||||
| static void zeus_irq_handler(unsigned int __irq, struct irq_desc *desc) | ||||
| { | ||||
| 	unsigned int irq; | ||||
| 	unsigned long pending; | ||||
| 
 | ||||
| 	pending = zeus_irq_pending(); | ||||
|  | ||||
| @ -407,9 +407,9 @@ static int gpio_irq_set_type(struct irq_data *d, u32 type) | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| static void gpio_irq_handler(unsigned irq, struct irq_desc *desc) | ||||
| static void gpio_irq_handler(unsigned __irq, struct irq_desc *desc) | ||||
| { | ||||
| 	struct orion_gpio_chip *ochip = irq_get_handler_data(irq); | ||||
| 	struct orion_gpio_chip *ochip = irq_desc_get_handler_data(desc); | ||||
| 	u32 cause, type; | ||||
| 	int i; | ||||
| 
 | ||||
| @ -582,8 +582,9 @@ void __init orion_gpio_init(struct device_node *np, | ||||
| 
 | ||||
| 	for (i = 0; i < 4; i++) { | ||||
| 		if (irqs[i]) { | ||||
| 			irq_set_handler_data(irqs[i], ochip); | ||||
| 			irq_set_chained_handler(irqs[i], gpio_irq_handler); | ||||
| 			irq_set_chained_handler_and_data(irqs[i], | ||||
| 							 gpio_irq_handler, | ||||
| 							 ochip); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user