From mboxrd@z Thu Jan 1 00:00:00 1970 From: Grygorii Strashko Subject: Re: [PATCH 06/15] irqdomain: Ensure type settings match for an existing mapping Date: Fri, 18 Mar 2016 12:03:30 +0200 Message-ID: <56EBD272.1040404@ti.com> References: <1458224359-32665-1-git-send-email-jonathanh@nvidia.com> <1458224359-32665-7-git-send-email-jonathanh@nvidia.com> <56EAF4E1.5020201@nvidia.com> Mime-Version: 1.0 Content-Type: text/plain; charset="windows-1252"; format=flowed Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <56EAF4E1.5020201@nvidia.com> Sender: linux-kernel-owner@vger.kernel.org To: Jon Hunter , Thomas Gleixner , Jason Cooper , Marc Zyngier , =?UTF-8?Q?Beno=c3=aet_Cousson?= , Tony Lindgren , Rob Herring , Pawel Moll , Mark Rutland , Ian Campbell , Kumar Gala , Stephen Warren , Thierry Reding Cc: Kevin Hilman , Geert Uytterhoeven , Lars-Peter Clausen , Linus Walleij , linux-tegra@vger.kernel.org, linux-omap@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org List-Id: linux-tegra@vger.kernel.org On 03/17/2016 08:18 PM, Jon Hunter wrote: > > On 17/03/16 14:19, Jon Hunter wrote: >> When mapping an IRQ, if a mapping already exists, then we simply return >> the virtual IRQ number. However, we do not check that the type settings >> for the existing mapping match those for the mapping that is about to be >> created. It may be unlikely that the type settings would not match, but >> check for this and don't return a valid IRQ mapping if the type settings >> do not match. >> >> WARN if the type return by irq_domain_translate() has bits outside the >> sense mask set and then clear these bits. If these bits are not cleared >> then this will cause the comparision of the type settings for an >> existing mapping to fail with that of the new mapping even if the sense >> bit themselves match. The reason being is that the existing type >> settings are read by calling irq_get_trigger_type() which will clear >> any bits outside the sense mask. This will allow us to detect irqchips >> that are not correctly clearing these bits and fix them. >> >> Signed-off-by: Jon Hunter >> --- >> kernel/irq/irqdomain.c | 59 ++++++++++++++++++++++++++++++++++++-------------- >> 1 file changed, 43 insertions(+), 16 deletions(-) >> >> diff --git a/kernel/irq/irqdomain.c b/kernel/irq/irqdomain.c >> index 3a519a01118b..0ea285baa619 100644 >> --- a/kernel/irq/irqdomain.c >> +++ b/kernel/irq/irqdomain.c >> @@ -549,6 +549,13 @@ static int irq_domain_translate(struct irq_domain *d, >> fwspec->param, fwspec->param_count, >> hwirq, type); >> >> + /* >> + * WARN if the irqchip returns a type with bits >> + * outside the sense mask set and clear these bits. >> + */ >> + if (WARN_ON(*type & ~IRQ_TYPE_SENSE_MASK)) >> + *type &= IRQ_TYPE_SENSE_MASK; Not sure that this warn and in this place make sense. type will come unchanged here from caller irq_create_fwspec_mapping() [...] -- regards, -grygorii From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754766AbcCRKE0 (ORCPT ); Fri, 18 Mar 2016 06:04:26 -0400 Received: from comal.ext.ti.com ([198.47.26.152]:59948 "EHLO comal.ext.ti.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752400AbcCRKEU (ORCPT ); Fri, 18 Mar 2016 06:04:20 -0400 Subject: Re: [PATCH 06/15] irqdomain: Ensure type settings match for an existing mapping To: Jon Hunter , Thomas Gleixner , Jason Cooper , Marc Zyngier , =?UTF-8?Q?Beno=c3=aet_Cousson?= , Tony Lindgren , Rob Herring , Pawel Moll , Mark Rutland , Ian Campbell , Kumar Gala , Stephen Warren , Thierry Reding References: <1458224359-32665-1-git-send-email-jonathanh@nvidia.com> <1458224359-32665-7-git-send-email-jonathanh@nvidia.com> <56EAF4E1.5020201@nvidia.com> CC: Kevin Hilman , Geert Uytterhoeven , Lars-Peter Clausen , Linus Walleij , , , , From: Grygorii Strashko Message-ID: <56EBD272.1040404@ti.com> Date: Fri, 18 Mar 2016 12:03:30 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.6.0 MIME-Version: 1.0 In-Reply-To: <56EAF4E1.5020201@nvidia.com> Content-Type: text/plain; charset="windows-1252"; format=flowed Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 03/17/2016 08:18 PM, Jon Hunter wrote: > > On 17/03/16 14:19, Jon Hunter wrote: >> When mapping an IRQ, if a mapping already exists, then we simply return >> the virtual IRQ number. However, we do not check that the type settings >> for the existing mapping match those for the mapping that is about to be >> created. It may be unlikely that the type settings would not match, but >> check for this and don't return a valid IRQ mapping if the type settings >> do not match. >> >> WARN if the type return by irq_domain_translate() has bits outside the >> sense mask set and then clear these bits. If these bits are not cleared >> then this will cause the comparision of the type settings for an >> existing mapping to fail with that of the new mapping even if the sense >> bit themselves match. The reason being is that the existing type >> settings are read by calling irq_get_trigger_type() which will clear >> any bits outside the sense mask. This will allow us to detect irqchips >> that are not correctly clearing these bits and fix them. >> >> Signed-off-by: Jon Hunter >> --- >> kernel/irq/irqdomain.c | 59 ++++++++++++++++++++++++++++++++++++-------------- >> 1 file changed, 43 insertions(+), 16 deletions(-) >> >> diff --git a/kernel/irq/irqdomain.c b/kernel/irq/irqdomain.c >> index 3a519a01118b..0ea285baa619 100644 >> --- a/kernel/irq/irqdomain.c >> +++ b/kernel/irq/irqdomain.c >> @@ -549,6 +549,13 @@ static int irq_domain_translate(struct irq_domain *d, >> fwspec->param, fwspec->param_count, >> hwirq, type); >> >> + /* >> + * WARN if the irqchip returns a type with bits >> + * outside the sense mask set and clear these bits. >> + */ >> + if (WARN_ON(*type & ~IRQ_TYPE_SENSE_MASK)) >> + *type &= IRQ_TYPE_SENSE_MASK; Not sure that this warn and in this place make sense. type will come unchanged here from caller irq_create_fwspec_mapping() [...] -- regards, -grygorii