On Thu, Oct 23, 2014 at 05:49:30PM +0100, Marc Zyngier wrote:
> Commit 18dcf433f3de (AHCI: Optimize single IRQ interrupt processing)
> switched the single IRQ case of the AHCI driver to use threaded
> threaded interrupts.
> 
> During this conversion, only the IRQF_SHARED flag was provided. The net
> effect of this in the presence of level interrupts is that the
> interrupt will not be masked during the execution of the treaded
> handler, leading to a screaming interrupt if the thread is not
> scheduled quickly enough, specially in error conditions:

[...]

> Not good. The culprit is a missing IRQF_ONESHOT flag, which addition
> solves the problem entierly. The number of interrupts drops radically:

I worried how many devices hanging off the same IRQ line in legacy mode
would fail to initialize after this update due to IRQF_ONESHOT mismatch.

Given that I did not observe nor anticipate this kind of problem and
LKP test shows a perf drop I am thinking may be we need to revert 18dcf43
for now.

Tejun?

> [Booting Debian Jessie to a prompt]
> Before fix:
>  88:       3562          0       GIC  88  ahci-sunxi
> After fix:
>  88:       1992          0       GIC  88  ahci-sunxi
> 
> Tested on a A20 board (ahci-sunxi).
> 
> Cc: Alexander Gordeev <[email protected]>
> Cc: Tejun Heo <[email protected]>
> Cc: [email protected]
> Signed-off-by: Marc Zyngier <[email protected]>
> ---
>  drivers/ata/libahci.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/ata/libahci.c b/drivers/ata/libahci.c
> index 5eb61c9..49c649f 100644
> --- a/drivers/ata/libahci.c
> +++ b/drivers/ata/libahci.c
> @@ -2492,7 +2492,7 @@ static int ahci_host_activate_single_irq(struct 
> ata_host *host, int irq,
>               return rc;
>  
>       rc = devm_request_threaded_irq(host->dev, irq, ahci_single_irq_intr,
> -                                    ahci_thread_fn, IRQF_SHARED,
> +                                    ahci_thread_fn, IRQF_SHARED | 
> IRQF_ONESHOT,
>                                      dev_driver_string(host->dev), host);
>       if (rc)
>               return rc;
> -- 
> 2.0.4
> 

-- 
Regards,
Alexander Gordeev
[email protected]

-- 
You received this message because you are subscribed to the Google Groups 
"linux-sunxi" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to