Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757234AbcJYIgz (ORCPT ); Tue, 25 Oct 2016 04:36:55 -0400 Received: from smtp5-g21.free.fr ([212.27.42.5]:25558 "EHLO smtp5-g21.free.fr" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755444AbcJYIgu (ORCPT ); Tue, 25 Oct 2016 04:36:50 -0400 Subject: Re: Disabling an interrupt in the handler locks the system up To: Sebastian Frias , Thomas Gleixner Cc: Marc Zyngier , Jason Cooper , LKML , Linux ARM References: <580A4460.2090306@free.fr> <580A60ED.3030307@free.fr> <20161021201448.3f4a0a7a@arm.com> <580A70B9.8060507@free.fr> <580A7A2B.5000702@free.fr> <20161022123713.6dc788b3@arm.com> <580BF1D4.2030509@free.fr> <580E3308.4050507@free.fr> <580F17E7.5060603@laposte.net> From: Mason Message-ID: <580F1992.2070602@free.fr> Date: Tue, 25 Oct 2016 10:36:34 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:43.0) Gecko/20100101 Firefox/43.0 SeaMonkey/2.40 MIME-Version: 1.0 In-Reply-To: <580F17E7.5060603@laposte.net> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1038 Lines: 31 On 25/10/2016 10:29, Sebastian Frias wrote: > On 10/24/2016 06:55 PM, Thomas Gleixner wrote: > >> On Mon, 24 Oct 2016, Mason wrote: >> >>> For the record, setting the IRQ_DISABLE_UNLAZY flag for this device >>> makes the system lock-up disappear. >> >> The way how lazy irq disabling works is: >> >> 1) Interrupt is marked disabled in software, but the hardware is not masked >> >> 2) If the interrupt fires befor the interrupt is reenabled, then it's >> masked at the hardware level in the low level interrupt flow handler. > > Would you mind explaining what is the intention behind? > Because it does not seem obvious why there isn't a direct map between > "disable_irq*()" and "mask_irq()" I had a similar, but slightly different question: What is the difference between struct irq_chip's * @irq_shutdown: shut down the interrupt (defaults to ->disable if NULL) * @irq_disable: disable the interrupt * @irq_mask: mask an interrupt source (enable seems to default to unmask, but disable does not default to mask) Regards.