Received: by 2002:a05:6520:4d:b0:139:a872:a4c9 with SMTP id i13csp2567562lkm; Mon, 20 Sep 2021 18:55:20 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwutEzPOwmQuq5HvK95Es9pvNRwlh9H0gL+vpucTmp0ufNbz7Xc0U/q4W+m6lHcMVQic2lo X-Received: by 2002:a17:906:1454:: with SMTP id q20mr32747701ejc.446.1632188885851; Mon, 20 Sep 2021 18:48:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1632188885; cv=none; d=google.com; s=arc-20160816; b=Xwp3+XL6HL3oy+cYUwwmfZHg3++bt50sLMVKemHm8c3X4emGiIDH4g5RalNT3kAiD4 jZNZNRoVaZewpHXNATeANjGtF9gz/8/KjKeUUElJ51e2bHkW5q963K/eiYshdQ/LVxYJ uTETesTTklSVZ9jNuu/UgieIKpXjkxofssXD5pRHP714+fZtXFOz7PF55mOXa6BcmMfE cOdwKsJUP0l+hCFwa9klvPQpwVZcnKu4NGcVY3mvR6iyqsE9DZnm7W1KoTWRgs5W/TMo qfY2vveoJihtXQ91Gtpse7b4iZyMaZF/nzQlfQZe9JhxLb5e2/hDI7tL/hkO0arFRGrC CY9A== 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=R3VePBftmWzpv6Y2Jv2hqSx0nSjugyjxrJEqUh1MrxQ=; b=JV3N9CfKAvJpqwke1mpGzLqB/JMDiHwrx6tpX+G2LGKVmTAFPkLu79Ggedw2oTyUR0 TwE9nKEdkGod8wDtFLZbPnVobGAGPdRTTBlizo/234QX3jknQQYjMWB5yV+hBERuNUnj rsg0kOLU8r6piPkslwMvaDIHr1KwGy3vIWrdTmDyG728N0dniL8p1StvumFzX8X0H/X9 YoW+aqLdBFHUb+5DChZ8ZfkmubotSxzfOSmF5Q+EnVT5OqVY2UG9VvUqBU121RaDZ1XJ 7jpi/N5r0BoRs95uGpE5RY2Ro98O4VcKcNICbkm2qJmvuPOc/xXBvUK5QuaEqHcsOIFE Uq+w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=TQ0PjGiO; 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 m9si1475911ejn.761.2021.09.20.18.47.42; Mon, 20 Sep 2021 18:48:05 -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=TQ0PjGiO; 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 S1351435AbhITRdg (ORCPT + 99 others); Mon, 20 Sep 2021 13:33:36 -0400 Received: from mail.kernel.org ([198.145.29.99]:34854 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S244021AbhITRbQ (ORCPT ); Mon, 20 Sep 2021 13:31:16 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 4BF7D61AD2; Mon, 20 Sep 2021 17:04:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1632157474; bh=CF4znAEktDes8o/h9vI0NdXDlx+HSW6xSZRtfRzHPro=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=TQ0PjGiOpYaOZosKOuxFZIEaGhhDF1uv6vdaPwbMREiT2of1LJa9dmgiLVR0jDNBF vBfVS2qHQUSt2wgzuZUFd8ABBD9M16vQAYmpC2G5hH0wK3wKdnoVO7WoqESdptajMh SEhpZZWs5BjELcCNue50jk2DqVh8CGSMbTkUoAZ0= 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 4.14 207/217] mfd: Dont use irq_create_mapping() to resolve a mapping Date: Mon, 20 Sep 2021 18:43:48 +0200 Message-Id: <20210920163931.641627387@linuxfoundation.org> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20210920163924.591371269@linuxfoundation.org> References: <20210920163924.591371269@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 11ab17f64c64..f0527e769867 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 566caca4efd8..722ad2c368a5 100644 --- a/drivers/mfd/stmpe.c +++ b/drivers/mfd/stmpe.c @@ -1035,7 +1035,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; @@ -1063,7 +1063,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 cc9e563f23aa..7062baf60685 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 18710f3b5c53..2c58d9b99a39 100644 --- a/drivers/mfd/wm8994-irq.c +++ b/drivers/mfd/wm8994-irq.c @@ -159,7 +159,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