From 7db104bdd2cc01fa98913856f5fcde0a36956c90 Mon Sep 17 00:00:00 2001 From: Thomas Gleixner Date: Mon, 22 Feb 2010 18:12:30 +0100 Subject: [PATCH] genirq: Fix stale oneshot flag. commit ee2bdb55130653718b1b4fdb40d58ddb55bbe78c in tip. The oneshot flag might be set when the thread starts and cleared later in handle_edge_irq() - I know it's a hack :) Check the flags in the irq thread code instead of using a possibly stale value. Signed-off-by: Thomas Gleixner Signed-off-by: Paul Gortmaker --- kernel/irq/manage.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c index 69ffae8..88f6f7f 100644 --- a/kernel/irq/manage.c +++ b/kernel/irq/manage.c @@ -643,7 +643,7 @@ static int irq_thread(void *data) struct sched_param param = { .sched_priority = MAX_USER_RT_PRIO/2, }; struct irqaction *action = data; struct irq_desc *desc = irq_to_desc(action->irq); - int wake, oneshot = desc->status & IRQ_ONESHOT; + int wake; sched_setscheduler(current, SCHED_FIFO, ¶m); current->extra_flags |= PFE_HARDIRQ; @@ -671,7 +671,7 @@ static int irq_thread(void *data) action->thread_fn(action->irq, action->dev_id); - if (oneshot) + if (desc->status & IRQ_ONESHOT) irq_finalize_oneshot(action->irq, desc, action); } -- 1.7.0.4