Received: by 2002:a05:6a10:7420:0:0:0:0 with SMTP id hk32csp657596pxb; Wed, 16 Feb 2022 01:11:27 -0800 (PST) X-Google-Smtp-Source: ABdhPJz/RvdOAuvcduw/aZjc9T/g+1BOCsRs3zE27mQXNCWsRRX+hAKAqvARw0m10U7uHTHblrbp X-Received: by 2002:a17:902:a40f:b0:14b:61:b19e with SMTP id p15-20020a170902a40f00b0014b0061b19emr1684671plq.20.1645002687554; Wed, 16 Feb 2022 01:11:27 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1645002687; cv=none; d=google.com; s=arc-20160816; b=z4GaxVODJRaZu742f8fG+7dnXqk3P2G5oLg0GlDgNDeHzQJ/0PZ2YtUdaw7ePqSY29 5yymE4gl9FahO6hIotw9tLnUxH7mZCDHWIPkqkVqtXUJdnOkhU3T2fhQ6Oz0Sl9/CLL/ HwLIWerSVvdIM4UMUlSF8ITPgoS9E6kc/7M1JMakn2CPOCPvRsc1p3QaqGJZ+SUVeGq0 MZ4DBXe6afmp0vi1N5y3nJkes3+6s77dd3Pf7kPfmsL6z56USAuDcaX0NCyELv7Gr+oS PI8EmqLgQSSjDVt9LU/CECQZgObIE+McqsARqTEAI0MaFHXX7wZc3KXmV85bd2XBEBum Wm3A== 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 :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=HykRMdu+8RZt6tIsd2ElprqYqXMeByCzSdVewmr1Vwk=; b=gjFGd/USv/ztnvBYz+UuzclUab3h81d4wPxi/8qELsn2iegsv0KpUKYO4QCdXnjE9c DGy+mUWuJL6Km8sk/OZ1ZpZbbL3FqKU+ECJIs+ny7pmgrZ6om5Bdua3vj6pv/LXetLhd R8+hzWUIIlETx3CKSDB+sXkKhV40BMq1DET26Lz84yh+dl3ysTmXBmY2J16kBY55JKCD fecwxKo7d0yeZX2Ie0dEbSxCgYYEVNza5bBu8cDL9XWBXMvfle/0J6A05EwY0C1AvKrq dpq0TC3vZuYH6Wh1t8KxewVD+AMi8Y3/+HXskd4FjOjiyzjb5b/nSUYa7CNbyUyABSsQ 4nzg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=ds+64LnM; spf=softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [23.128.96.19]) by mx.google.com with ESMTPS id p10si5291400plf.430.2022.02.16.01.11.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 16 Feb 2022 01:11:27 -0800 (PST) Received-SPF: softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) client-ip=23.128.96.19; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=ds+64LnM; spf=softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id CD60D3F8B1; Wed, 16 Feb 2022 01:09:13 -0800 (PST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231946AbiBPJJN (ORCPT + 99 others); Wed, 16 Feb 2022 04:09:13 -0500 Received: from gmail-smtp-in.l.google.com ([23.128.96.19]:55006 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231887AbiBPJJG (ORCPT ); Wed, 16 Feb 2022 04:09:06 -0500 Received: from ams.source.kernel.org (ams.source.kernel.org [IPv6:2604:1380:4601:e00::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 849AE2252A; Wed, 16 Feb 2022 01:08:54 -0800 (PST) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id C3C8AB81E3B; Wed, 16 Feb 2022 09:08:52 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 59384C004E1; Wed, 16 Feb 2022 09:08:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1645002531; bh=f92FiNCHdkK0S2WazdArToFy2oc6o82XVRvE88ZJZsk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ds+64LnMjSsL685UOY9k7NhGeXxIZcKOEzrvi2AHoVutAmXxmTeg3kyGBQm7x7OXX uUw+Z60+1d9BHm5VA52q3ruUYiEzeKeXxz19baozd0fTnp5cX4roATtwOd5yVgdFop iBY2JNHcjhLByXUcUTgHqSvIKA1slFTvAbZcxaA0latnKf+5rJDVAqOE6k6Rn6JW22 4sSuoqnGlaJxcAiBYO7qqVj5KzVzqZY6KFMIqXqKGtquwcn7z31uxwXH4pUWquMKyJ qGaYot4/pUiGSGPCj6W6LSkWCKUGvewHZGH2IUma77GBBBdmLADErORd8VGMHIyUy8 LGBwWB7ZUs2hw== Received: from sofa.misterjones.org ([185.219.108.64] helo=why.lan) by disco-boy.misterjones.org with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1nKGIr-008HM9-Af; Wed, 16 Feb 2022 09:08:49 +0000 From: Marc Zyngier To: linux-kernel@vger.kernel.org, netdev@vger.kernel.org Cc: Greg Kroah-Hartman , Marcin Wojtas , Russell King , "David S. Miller" , Jakub Kicinski , Thomas Gleixner , John Garry , kernel-team@android.com Subject: [PATCH 1/2] genirq: Extract irq_set_affinity_masks() from devm_platform_get_irqs_affinity() Date: Wed, 16 Feb 2022 09:08:44 +0000 Message-Id: <20220216090845.1278114-2-maz@kernel.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220216090845.1278114-1-maz@kernel.org> References: <20220216090845.1278114-1-maz@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SA-Exim-Connect-IP: 185.219.108.64 X-SA-Exim-Rcpt-To: linux-kernel@vger.kernel.org, netdev@vger.kernel.org, gregkh@linuxfoundation.org, mw@semihalf.com, linux@armlinux.org.uk, davem@davemloft.net, kuba@kernel.org, tglx@linutronix.de, john.garry@huawei.com, kernel-team@android.com X-SA-Exim-Mail-From: maz@kernel.org X-SA-Exim-Scanned: No (on disco-boy.misterjones.org); SAEximRunCond expanded to false X-Spam-Status: No, score=-2.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI, RDNS_NONE,SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org In order to better support drivers that deal with interrupts in a more "hands-on" way, extract the core of devm_platform_get_irqs_affinity() and expose it as irq_set_affinity_masks(). This helper allows a driver to provide a set of wired interrupts that are to be configured as managed interrupts. As with the original helper, this is exported as EXPORT_SYMBOL_GPL. Signed-off-by: Marc Zyngier --- drivers/base/platform.c | 20 +++----------------- include/linux/interrupt.h | 8 ++++++++ kernel/irq/affinity.c | 27 +++++++++++++++++++++++++++ 3 files changed, 38 insertions(+), 17 deletions(-) diff --git a/drivers/base/platform.c b/drivers/base/platform.c index 6cb04ac48bf0..b363cf6ce5be 100644 --- a/drivers/base/platform.c +++ b/drivers/base/platform.c @@ -335,7 +335,6 @@ int devm_platform_get_irqs_affinity(struct platform_device *dev, int **irqs) { struct irq_affinity_devres *ptr; - struct irq_affinity_desc *desc; size_t size; int i, ret, nvec; @@ -376,31 +375,18 @@ int devm_platform_get_irqs_affinity(struct platform_device *dev, ptr->irq[i] = irq; } - desc = irq_create_affinity_masks(nvec, affd); - if (!desc) { - ret = -ENOMEM; + ret = irq_set_affinity_masks(affd, ptr->irq, nvec); + if (ret) { + dev_err(&dev->dev, "failed to update affinity descriptors (%d)\n", ret); goto err_free_devres; } - for (i = 0; i < nvec; i++) { - ret = irq_update_affinity_desc(ptr->irq[i], &desc[i]); - if (ret) { - dev_err(&dev->dev, "failed to update irq%d affinity descriptor (%d)\n", - ptr->irq[i], ret); - goto err_free_desc; - } - } - devres_add(&dev->dev, ptr); - kfree(desc); - *irqs = ptr->irq; return nvec; -err_free_desc: - kfree(desc); err_free_devres: devres_free(ptr); return ret; diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h index 9367f1cb2e3c..6bfce96206f8 100644 --- a/include/linux/interrupt.h +++ b/include/linux/interrupt.h @@ -381,6 +381,8 @@ irq_create_affinity_masks(unsigned int nvec, struct irq_affinity *affd); unsigned int irq_calc_affinity_vectors(unsigned int minvec, unsigned int maxvec, const struct irq_affinity *affd); +int irq_set_affinity_masks(struct irq_affinity *affd, int *irqs, int nvec); + #else /* CONFIG_SMP */ static inline int irq_set_affinity(unsigned int irq, const struct cpumask *m) @@ -443,6 +445,12 @@ irq_calc_affinity_vectors(unsigned int minvec, unsigned int maxvec, return maxvec; } +static inline int +irq_set_affinity_masks(struct irq_affinity *affd, int *irqs, int nvec) +{ + return -EINVAL; +} + #endif /* CONFIG_SMP */ /* diff --git a/kernel/irq/affinity.c b/kernel/irq/affinity.c index f7ff8919dc9b..c0f868cd5b87 100644 --- a/kernel/irq/affinity.c +++ b/kernel/irq/affinity.c @@ -512,3 +512,30 @@ unsigned int irq_calc_affinity_vectors(unsigned int minvec, unsigned int maxvec, return resv + min(set_vecs, maxvec - resv); } + +/* + * irq_set_affinity_masks - Set the affinity masks of a number of interrupts + * for multiqueue spreading + * @affd: Description of the affinity requirements + * @irqs: An array of interrupt numbers + * @nvec: The total number of interrupts + */ +int irq_set_affinity_masks(struct irq_affinity *affd, int *irqs, int nvec) +{ + struct irq_affinity_desc *desc; + int i, err = 0; + + desc = irq_create_affinity_masks(nvec, affd); + if (!desc) + return -ENOMEM; + + for (i = 0; i < nvec; i++) { + err = irq_update_affinity_desc(irqs[i], desc + i); + if (err) + break; + } + + kfree(desc); + return err; +} +EXPORT_SYMBOL_GPL(irq_set_affinity_masks); -- 2.30.2