From 501ecf615656ad7f9234df97540e3f98c96fd0b9 Mon Sep 17 00:00:00 2001 From: Thomas Gleixner Date: Mon, 3 Jul 2006 02:22:22 +0200 Subject: [PATCH] --- yaml --- r: 31745 b: refs/heads/master c: 29454dde27d8e340bb1987bad9aa504af7081eba h: refs/heads/master i: 31743: 8db48ef2c16457e95e3cefb6a1479b47272df6e6 v: v3 --- [refs] | 2 +- trunk/arch/arm/plat-omap/gpio.c | 15 ++++++++------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/[refs] b/[refs] index b5820e896b6e..47fb72335013 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: bb8d5a55a523869ebcdd004a08ed5fab86b474e3 +refs/heads/master: 29454dde27d8e340bb1987bad9aa504af7081eba diff --git a/trunk/arch/arm/plat-omap/gpio.c b/trunk/arch/arm/plat-omap/gpio.c index cb0c21d384c0..fec7970e564d 100644 --- a/trunk/arch/arm/plat-omap/gpio.c +++ b/trunk/arch/arm/plat-omap/gpio.c @@ -850,7 +850,8 @@ static void gpio_irq_handler(unsigned int irq, struct irqdesc *desc, /* Don't run the handler if it's already running * or was disabled lazely. */ - if (unlikely((d->disable_depth || d->running))) { + if (unlikely((d->depth || + (d->status & IRQ_INPROGRESS)))) { irq_mask = 1 << (gpio_irq - bank->virtual_irq_start); /* The unmasking will be done by @@ -859,22 +860,22 @@ static void gpio_irq_handler(unsigned int irq, struct irqdesc *desc, * it's already running. */ _enable_gpio_irqbank(bank, irq_mask, 0); - if (!d->disable_depth) { + if (!d->depth) { /* Level triggered interrupts * won't ever be reentered */ BUG_ON(level_mask & irq_mask); - d->pending = 1; + d->status |= IRQ_PENDING; } continue; } - d->running = 1; + desc_handle_irq(gpio_irq, d, regs); - d->running = 0; - if (unlikely(d->pending && !d->disable_depth)) { + + if (unlikely((d->status & IRQ_PENDING) && !d->depth)) { irq_mask = 1 << (gpio_irq - bank->virtual_irq_start); - d->pending = 0; + d->status &= ~IRQ_PENDING; _enable_gpio_irqbank(bank, irq_mask, 1); retrigger |= irq_mask; }