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
    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. I need this status for other purposes as well, where I
    definitely need serialization.

    > + 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


    \
     
     \ /
      Last update: 2010-12-14 21:57    [W:0.020 / U:1.596 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site