lkml.org 
[lkml]   [2010]   [Dec]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH v3 2/4] genirq: Inform handler about line sharing state
    Am 14.12.2010 21:54, Thomas Gleixner wrote:
    > On Mon, 13 Dec 2010, Jan Kiszka wrote:
    >> @@ -943,6 +950,9 @@ static struct irqaction *__free_irq(unsigned int irq, void *dev_id)
    >> /* Make sure it's not being used on another CPU: */
    >> synchronize_irq(irq);
    >>
    >> + if (single_handler)
    >> + desc->irq_data.drv_status &= ~IRQS_SHARED;
    >> +
    >
    > What's the reason to clear this flag outside of the desc->lock held
    > region.

    We need to synchronize the irq first before clearing the flag.

    The problematic scenario behind this: An IRQ started in shared mode,
    this the line was unmasked after the hardirq. Now we clear IRQS_SHARED
    before calling into the threaded handler. And that handler may now think
    that the line is still masked as IRQS_SHARED is set.

    > I need this status for other purposes as well, where I
    > definitely need serialization.

    Well, two options: wrap all bit manipulations with desc->lock
    acquisition/release or turn drv_status into an atomic. I don't know what
    your plans with drv_status are, so...

    >
    >> + mutex_lock(&register_lock);
    >> +
    >> + old_action = desc->action;
    >> + if (old_action && (old_action->flags & IRQF_ADAPTIVE) &&
    >> + !(desc->irq_data.drv_status & IRQS_SHARED)) {
    >> + /*
    >> + * Signal the old handler that is has to switch to shareable
    >> + * handling mode. Disable the line to avoid any conflict with
    >> + * a real IRQ.
    >> + */
    >> + disable_irq(irq);
    >> + local_irq_disable();
    >> +
    >> + desc->irq_data.drv_status |= IRQS_SHARED | IRQS_MAKE_SHAREABLE;
    >
    > Unserialized access as well. Will think about it.
    >
    >> + old_action->handler(irq, old_action->dev_id);
    >> + desc->irq_data.drv_status &= ~IRQS_MAKE_SHAREABLE;
    >
    > Thanks,
    >
    > tglx

    Jan

    [unhandled content-type:application/pgp-signature]
    \
     
     \ /
      Last update: 2010-12-15 00:03    [W:0.023 / U:62.704 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site