From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751844AbbISUY7 (ORCPT ); Sat, 19 Sep 2015 16:24:59 -0400 Received: from www.linutronix.de ([62.245.132.108]:33040 "EHLO Galois.linutronix.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751020AbbISUYz (ORCPT ); Sat, 19 Sep 2015 16:24:55 -0400 Date: Sat, 19 Sep 2015 22:24:15 +0200 (CEST) From: Thomas Gleixner To: Kohji Okuno cc: marc.zyngier@arm.com, linux-kernel@vger.kernel.org Subject: Re: [PATCH] genirq: Fix bad IRQ_ONSHOT in forced IRQ setting In-Reply-To: <20150920.003356.1191254663935857851.okuno.kohji@jp.panasonic.com> Message-ID: References: <20150918110312.0a49d22d@arm.com> <20150918.195645.642918355603329874.okuno.kohji@jp.panasonic.com> <20150920.003356.1191254663935857851.okuno.kohji@jp.panasonic.com> User-Agent: Alpine 2.11 (DEB 23 2013-08-11) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-Linutronix-Spam-Score: -1.0 X-Linutronix-Spam-Level: - X-Linutronix-Spam-Status: No , -1.0 points, 5.0 required, ALL_TRUSTED=-1,SHORTCIRCUIT=-0.0001 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Sun, 20 Sep 2015, Kohji Okuno wrote: > From: Thomas Gleixner > Date: Fri, 18 Sep 2015 16:46:24 +0200 > > On Fri, 18 Sep 2015, Kohji Okuno wrote: > >> > >> irq thread(runs sdhci_thread_irq()) is waiting on > >> drivers/mmc/core/core.c:mmc_wait_for_req_done() in order to access > >> a SDIO register. And, this thread shoud be woken up from > >> sdhci_irq() after the completion of the register access. > >> But, since the IRQ is masked, sdhci_irq() is not called and irq > >> thread can not wake up. This is root cause, I think. > >> What do you think about this? > > > > Ah, that explains it. Let me think about it a bit. > > If something is not clear please let me know. > By the way, even if other issue exists, we should change > irq_setup_forced_threading() as my patch, I think. No, we can't. We can only do that if the interrupt is not shared. Assume the following scenario: request_irq(irq, handler, IRQF_SHARED, "devA", devidA); In case of force threading that sets the oneshot flag for the irq descriptor. Now the sdhci driver is initialized request_thread_irq(irq, handler, thandler, IRQF_SHARED, "sdhci", devidSDHCI); The oneshot flag sticks and you run into exactly the same issue as now. Shared interrupts are a major pain, but we have to deal with them. I'm working on a solution for that issue. Thanks, tglx