Received: by 2002:a05:6a10:f347:0:0:0:0 with SMTP id d7csp1909205pxu; Tue, 24 Nov 2020 11:49:14 -0800 (PST) X-Google-Smtp-Source: ABdhPJxYfFYGQF9DJqkiaO6OYeItI9G/FBqOik83F7fxjGby7JMV0xbjfKaYP363/i1+OrM0zmc6 X-Received: by 2002:a17:906:f05:: with SMTP id z5mr51592eji.8.1606247353700; Tue, 24 Nov 2020 11:49:13 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1606247353; cv=none; d=google.com; s=arc-20160816; b=IIY0LQ19E2rpTpsUXNV2XypOD42zX/WWG2UYioa0gF5xYPyI/CxVtTEdr3ld/OgbsX 8jP68zrY5q0l12eYeN89L7OI5OAo77jxGOCLN26VWyFdyivbNAWmB/ZhC2+Z/NDtcxUW NxEOK7uSEwaCyywmboQKaxHUp9asxz3Xlur0ASjEAE07KRRN36zvsPf8b7o/PXCer3TM Pi3EgQAPp50rIHykfQKcWggB7uSYJVTX5GojWF6Ev/QnhvqGlTnK265oJ2PfCz46+Gjw cpmJrKjIrmuq9QQvHIwgxjzT+nipT8uwhLu9ubEPre3QSm8XwtPmGfvEQLscWADyXgLn Hu/g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:references:in-reply-to:message-id:date:subject :cc:to:from; bh=XAVZw9Gd5Rf7rH9zaJOxMPVIFqVoQ3J71dahXGYNKOs=; b=yimNEJ9m7rScpQ3mQk39roDKYtBwVhzZEr5FzFC+7lKfutFdIX7iwB6rieg0b+X4dZ quiY/C9S3j9vx9w8sQ5nLrR2sRxEUCYI8D66ITTpTRBr8KYgToyozVSPvQu7jDZjEgom Gl+P/cfp0Zi6WynZ1h0drRpfmoZZhqpyg6C65wqqHdrLgn3WWh7Y4rr9xPKVhqNm3MW/ AxWy9Sb9A4DcBxXsUE3aE2avOcmhRSteYjtHYtSoLr95ryUOY3QmA6Zuz84VwkOj3z57 YPuvOJbZuXfz9LSj/yHjjwZtdE98TXGUhR7up7Ke29wQ+QZXjOHoDCa0kg+MG5pTo9/+ GlgQ== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id d23si9060943ejd.151.2020.11.24.11.48.50; Tue, 24 Nov 2020 11:49:13 -0800 (PST) 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; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728524AbgKXGSQ (ORCPT + 99 others); Tue, 24 Nov 2020 01:18:16 -0500 Received: from ozlabs.ru ([107.174.27.60]:49638 "EHLO ozlabs.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728166AbgKXGSQ (ORCPT ); Tue, 24 Nov 2020 01:18:16 -0500 Received: from fstn1-p1.ozlabs.ibm.com (localhost [IPv6:::1]) by ozlabs.ru (Postfix) with ESMTP id D511EAE80253; Tue, 24 Nov 2020 01:18:08 -0500 (EST) From: Alexey Kardashevskiy To: linux-kernel@vger.kernel.org Cc: =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= , Frederic Barrat , =?UTF-8?q?Michal=20Such=C3=A1nek?= , "Oliver O'Halloran" , Marc Zyngier , Thomas Gleixner , linux-arm-kernel@lists.infradead.org, linux-gpio@vger.kernel.org, x86@kernel.org, linuxppc-dev@lists.ozlabs.org, Alexey Kardashevskiy Subject: [PATCH kernel v4 6/8] genirq/irqdomain: Move hierarchical IRQ cleanup to kobject_release Date: Tue, 24 Nov 2020 17:17:18 +1100 Message-Id: <20201124061720.86766-7-aik@ozlabs.ru> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20201124061720.86766-1-aik@ozlabs.ru> References: <20201124061720.86766-1-aik@ozlabs.ru> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This moves hierarchical domain's irqs cleanup into the kobject release hook to make irq_domain_free_irqs() as simple as kobject_put. Signed-off-by: Alexey Kardashevskiy --- kernel/irq/irqdomain.c | 43 +++++++++++++++++++++--------------------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/kernel/irq/irqdomain.c b/kernel/irq/irqdomain.c index 4779d912bb86..a0a81cc6c524 100644 --- a/kernel/irq/irqdomain.c +++ b/kernel/irq/irqdomain.c @@ -863,21 +863,9 @@ EXPORT_SYMBOL_GPL(irq_create_of_mapping); */ void irq_dispose_mapping(unsigned int virq) { - struct irq_data *irq_data = irq_get_irq_data(virq); - struct irq_domain *domain; + struct irq_desc *desc = irq_to_desc(virq); - if (!virq || !irq_data) - return; - - domain = irq_data->domain; - if (WARN_ON(domain == NULL)) - return; - - if (irq_domain_is_hierarchy(domain)) { - irq_domain_free_irqs(virq, 1); - } else { - irq_free_desc(virq); - } + kobject_put(&desc->kobj); } EXPORT_SYMBOL_GPL(irq_dispose_mapping); @@ -1396,6 +1384,19 @@ int irq_domain_alloc_irqs_hierarchy(struct irq_domain *domain, return domain->ops->alloc(domain, irq_base, nr_irqs, arg); } +static void irq_domain_hierarchy_free_desc(struct irq_desc *desc) +{ + unsigned int virq = desc->irq_data.irq; + struct irq_data *data = irq_get_irq_data(virq); + + mutex_lock(&irq_domain_mutex); + irq_domain_remove_irq(virq); + irq_domain_free_irqs_hierarchy(data->domain, virq, 1); + mutex_unlock(&irq_domain_mutex); + + irq_domain_free_irq_data(virq, 1); +} + int __irq_domain_alloc_irqs_data(struct irq_domain *domain, int virq, unsigned int nr_irqs, int node, void *arg, const struct irq_affinity_desc *affinity) @@ -1430,7 +1431,10 @@ int __irq_domain_alloc_irqs_data(struct irq_domain *domain, int virq, } for (i = 0; i < nr_irqs; i++) { + struct irq_desc *desc = irq_to_desc(virq + i); + irq_domain_insert_irq(virq + i); + desc->free_irq = irq_domain_hierarchy_free_desc; } mutex_unlock(&irq_domain_mutex); @@ -1675,14 +1679,11 @@ void irq_domain_free_irqs(unsigned int virq, unsigned int nr_irqs) "NULL pointer, cannot free irq\n")) return; - mutex_lock(&irq_domain_mutex); - for (i = 0; i < nr_irqs; i++) - irq_domain_remove_irq(virq + i); - irq_domain_free_irqs_hierarchy(data->domain, virq, nr_irqs); - mutex_unlock(&irq_domain_mutex); + for (i = 0; i < nr_irqs; i++) { + struct irq_desc *desc = irq_to_desc(virq + i); - irq_domain_free_irq_data(virq, nr_irqs); - irq_free_descs(virq, nr_irqs); + kobject_put(&desc->kobj); + } } /** -- 2.17.1