From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1761973AbcINNHA (ORCPT ); Wed, 14 Sep 2016 09:07:00 -0400 Received: from mx08-00178001.pphosted.com ([91.207.212.93]:47218 "EHLO mx07-00178001.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1754281AbcINNG5 (ORCPT ); Wed, 14 Sep 2016 09:06:57 -0400 Subject: Re: [PATCH v5 2/9] drivers: irqchip: Add STM32 external interrupts support To: Thomas Gleixner References: <1473432124-6784-1-git-send-email-alexandre.torgue@st.com> <1473432124-6784-3-git-send-email-alexandre.torgue@st.com> <6941f61d-0b33-4108-0135-b11887cd0488@st.com> CC: Maxime Coquelin , Jason Cooper , Marc Zyngier , Linus Walleij , Mark Rutland , Rob Herring , , , , , , Daniel Thompson , , From: Alexandre Torgue Message-ID: Date: Wed, 14 Sep 2016 15:05:55 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.2.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset="windows-1252"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [10.48.0.2] X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:,, definitions=2016-09-14_06:,, signatures=0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Thomas, On 09/14/2016 11:19 AM, Thomas Gleixner wrote: > On Tue, 13 Sep 2016, Alexandre Torgue wrote: >> On 09/13/2016 05:21 PM, Thomas Gleixner wrote: >>> On Fri, 9 Sep 2016, Alexandre TORGUE wrote: >>>> +static void stm32_exti_free(struct irq_domain *d, unsigned int virq, >>>> + unsigned int nr_irqs) >>>> +{ >>>> + struct irq_data *data = irq_get_irq_data(virq); >>>> + >>>> + irq_gc_mask_clr_bit(data->parent_data); >>> >>> I have a hard time to understand this. The irq domain is not hierarchical. >> >> Actually, I wanted to test ".free" callback function of gpio_irq_domain in >> STM32 pinctrl driver. To do that I modified gpio driver: just after getting >> virq through gpio_to_irq, I called "irq_dispose_mapping(virq)". >> I know it is dirty but I thought it was the only way to test. >> >> Doing that, I see that ".free" callback of gpio domain is called but as it is >> hirerchical ".free" callback for parent domain (exti one) is also called. I >> observed that virq was well unmapped, but not masked at exti level. It is for >> this reason than I added "irq_gc_mask_clr_bit(data->parent_data);" which mask >> interrupt at exti level. > > Aargh. I really misread the patch, but this is entirely non obvious and you > should do: > > struct irq_data *data = irq_domain_get_irq_data(d, virq); > > irq_gc_mask_clr_bit(d); > > Then it is entirely clear that you mask the interrupt of _this_ (the exti) > domain. Ok, it's easier to understand like that. > > Now what really bugs me is that you do that at all. An interrupt which is > freed must be masked already. Why is it unmasked in the first place? Honestly I don't know. When "devm_free_irq" is called to release virq, there is no issue and interrupt is well masked. But, when I tried to use "irq_dispose_mapping(virq)" I observed that .free is called (child and parent domain) but interrupt is not masked. Regards Alex > > Thanks, > > tglx >