From daf4300dcb90773fe7b92c66b17aef02168dbf94 Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Thu, 26 Jul 2012 19:15:35 +0200 Subject: [PATCH] Defer 'wait_for_irq' until device irq is cleared --- dde_linux/src/drivers/usb/signal/irq.cc | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/dde_linux/src/drivers/usb/signal/irq.cc b/dde_linux/src/drivers/usb/signal/irq.cc index aa30920936..374dc9ce26 100644 --- a/dde_linux/src/drivers/usb/signal/irq.cc +++ b/dde_linux/src/drivers/usb/signal/irq.cc @@ -21,6 +21,7 @@ extern "C" { /* our local incarnation of sender and receiver */ static Signal_helper *_signal = 0; +static Genode::Lock _irq_ack_lock(Genode::Lock::LOCKED); /** @@ -74,6 +75,8 @@ class Irq_context : public Driver_context, /* set context & submit signal */ _signal->sender()->context(ctx->_ctx_cap); _signal->sender()->submit(); + + _irq_ack_lock.lock(); } public: @@ -101,9 +104,10 @@ class Irq_context : public Driver_context, dde_kit_log(DEBUG_IRQ, "IRQ: %u ret: %u %p", _irq, rc, h->handler); if (rc == IRQ_HANDLED) { Routine::schedule_all(); - return; + break; } } + _irq_ack_lock.unlock(); } const char *debug() { return "Irq_context"; }