Received: by 2002:a05:6a11:4021:0:0:0:0 with SMTP id ky33csp2350747pxb; Mon, 20 Sep 2021 19:46:07 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzjHQDRswsmRqLP5X17mZ/XYiR1woqJ4SKp3CyvIwAgNmIJ+hvfvRL4WIEPYoAAiBW/jLHi X-Received: by 2002:a05:6602:180e:: with SMTP id t14mr6048728ioh.204.1632192367380; Mon, 20 Sep 2021 19:46:07 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1632192367; cv=none; d=google.com; s=arc-20160816; b=xxXlsHfsuagKp5e4+wNM20RfE/7E/8GUNVKShHfAk0on2FvuduStWsRJ2hqcEg6fAU /O5H6e8JU7Oj/5JGcd5cN409ZybA1auyc4T8Hv3dd5tj31iT17h1a4IFLd4GULZzjGxV ScdkJw55eVkCafyOo/jdCzT2xuRGDJufSSMrFPsua2nwYR4jBzP3j9/rKfny+YoL2U2/ Z8R6GDZmzmQ6nX08csrYShwcKZ6o/871ieVK+PMBCroBIKHckP5dw+1P39daxi9+N0+3 GP4iocyXLtaVfysk1QqenpmIy6Rvgb4JCakjyGftAnbBQkb/kgUTGjF2rykavYO5jbrj urLw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=+BLyT92SOi4eHPbaMkUGe6p+mHU5V6lpKaOKecWPXJ0=; b=y5q46DNRpSx1YcjbKwhQwmBgopzz99Uq/Rqc0qQcsyoW2JtayApkL02KsGy4CABvBe bqhDwAutdluCyruJEuyCjA5E31DCbwyqdJlqthQsrT7k/EfYT3npo01vX35clFlUv+zC ig6bbHAjvqF3DmBVhlMsSAm+cRD6Y9Qp5+FH2kXuruCWOsIlQK2e7pzo5gkY/tmAfP6e EUPXcD/7wdEp1JhrDw6Vi7Hwfvjj360IrkeEcRyKEaECVvQv0u/a/yXNeq4geqLCIOoy Zp0SCcuMdIgSTdPrBLQ5NNbai5iaK+gA8rG5kGyqaWFBjG+iA8YI1R6u2uF7Tr3TuI2z PjwQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=LjHJgVu4; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id c17si16975279jam.29.2021.09.20.19.45.56; Mon, 20 Sep 2021 19:46:07 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=LjHJgVu4; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1378897AbhITS04 (ORCPT + 99 others); Mon, 20 Sep 2021 14:26:56 -0400 Received: from mail.kernel.org ([198.145.29.99]:43182 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1377694AbhITSUT (ORCPT ); Mon, 20 Sep 2021 14:20:19 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id A470061A78; Mon, 20 Sep 2021 17:23:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1632158613; bh=pv1Hz86Cr7ckeW96l4PLPiyMMDa3YeUNrTrhx+5k008=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=LjHJgVu4OyrGhcOVXEshC38XvhfXI3wgP1joyknwgUQXOSoQYJt2hQO53ER/46jDr 0cynzHbCNyjxDQP6+xWgEAy5Cba97DDyPGserkFdzBOG21B/t9yJa8sWkttlQg4hWF Fcan+FavGoWotWRKtguKl42m84lRKePMSiW4qNEU= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Linus Walleij , Lee Jones , Maxime Coquelin , Alexandre Torgue , Marc Zyngier , Sasha Levin Subject: [PATCH 5.4 237/260] mfd: Dont use irq_create_mapping() to resolve a mapping Date: Mon, 20 Sep 2021 18:44:15 +0200 Message-Id: <20210920163939.187304980@linuxfoundation.org> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20210920163931.123590023@linuxfoundation.org> References: <20210920163931.123590023@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Marc Zyngier [ Upstream commit 9ff80e2de36d0554e3a6da18a171719fe8663c17 ] Although irq_create_mapping() is able to deal with duplicate mappings, it really isn't supposed to be a substitute for irq_find_mapping(), and can result in allocations that take place in atomic context if the mapping didn't exist. Fix the handful of MFD drivers that use irq_create_mapping() in interrupt context by using irq_find_mapping() instead. Cc: Linus Walleij Cc: Lee Jones Cc: Maxime Coquelin Cc: Alexandre Torgue Signed-off-by: Marc Zyngier Signed-off-by: Lee Jones Signed-off-by: Sasha Levin --- drivers/mfd/ab8500-core.c | 2 +- drivers/mfd/stmpe.c | 4 ++-- drivers/mfd/tc3589x.c | 2 +- drivers/mfd/wm8994-irq.c | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/drivers/mfd/ab8500-core.c b/drivers/mfd/ab8500-core.c index 3e9dc92cb467..842de1f352df 100644 --- a/drivers/mfd/ab8500-core.c +++ b/drivers/mfd/ab8500-core.c @@ -493,7 +493,7 @@ static int ab8500_handle_hierarchical_line(struct ab8500 *ab8500, if (line == AB8540_INT_GPIO43F || line == AB8540_INT_GPIO44F) line += 1; - handle_nested_irq(irq_create_mapping(ab8500->domain, line)); + handle_nested_irq(irq_find_mapping(ab8500->domain, line)); } return 0; diff --git a/drivers/mfd/stmpe.c b/drivers/mfd/stmpe.c index 1aee3b3253fc..508349399f8a 100644 --- a/drivers/mfd/stmpe.c +++ b/drivers/mfd/stmpe.c @@ -1091,7 +1091,7 @@ static irqreturn_t stmpe_irq(int irq, void *data) if (variant->id_val == STMPE801_ID || variant->id_val == STMPE1600_ID) { - int base = irq_create_mapping(stmpe->domain, 0); + int base = irq_find_mapping(stmpe->domain, 0); handle_nested_irq(base); return IRQ_HANDLED; @@ -1119,7 +1119,7 @@ static irqreturn_t stmpe_irq(int irq, void *data) while (status) { int bit = __ffs(status); int line = bank * 8 + bit; - int nestedirq = irq_create_mapping(stmpe->domain, line); + int nestedirq = irq_find_mapping(stmpe->domain, line); handle_nested_irq(nestedirq); status &= ~(1 << bit); diff --git a/drivers/mfd/tc3589x.c b/drivers/mfd/tc3589x.c index 67c9995bb1aa..23cfbd050120 100644 --- a/drivers/mfd/tc3589x.c +++ b/drivers/mfd/tc3589x.c @@ -187,7 +187,7 @@ again: while (status) { int bit = __ffs(status); - int virq = irq_create_mapping(tc3589x->domain, bit); + int virq = irq_find_mapping(tc3589x->domain, bit); handle_nested_irq(virq); status &= ~(1 << bit); diff --git a/drivers/mfd/wm8994-irq.c b/drivers/mfd/wm8994-irq.c index 6c3a619e2628..651a028bc519 100644 --- a/drivers/mfd/wm8994-irq.c +++ b/drivers/mfd/wm8994-irq.c @@ -154,7 +154,7 @@ static irqreturn_t wm8994_edge_irq(int irq, void *data) struct wm8994 *wm8994 = data; while (gpio_get_value_cansleep(wm8994->pdata.irq_gpio)) - handle_nested_irq(irq_create_mapping(wm8994->edge_irq, 0)); + handle_nested_irq(irq_find_mapping(wm8994->edge_irq, 0)); return IRQ_HANDLED; } -- 2.30.2