Received: by 2002:a05:6a10:f347:0:0:0:0 with SMTP id d7csp1410754pxu; Mon, 23 Nov 2020 22:21:44 -0800 (PST) X-Google-Smtp-Source: ABdhPJwPyMis+B7AC/hFUk5C4CCP7cJT6v10b0FzghYCAwGEazcwEHSQBK8og0klK7CSWVCGtWkL X-Received: by 2002:aa7:dc53:: with SMTP id g19mr2419531edu.256.1606198904687; Mon, 23 Nov 2020 22:21:44 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1606198904; cv=none; d=google.com; s=arc-20160816; b=gB21+A29K6+AVJOSzsbDJz0C1i+3Kb2E7JVDjD2RZDSrm3h/ouTI361n/6bQ4MFlqN sp+F7Wfn8tLB+obAHMs2f20ZjFoWVsctxclbR+iit+0OrABqZeObuESiyfNCt/YeIcVc NDF086MvfCni7MZGf1zwcRinkZCd8FEX64m+/SmrPPYCBUJdx0gyQ+qhLvl/U0MvFw26 m7Ls68YnzKLwpjnixHY3hYzGM7KrjjWHeIh6Nl8L/k56WJEn19/1UaMqUV49nv8aZHAH lVrIjkXU35JMY8MQijyKGAwIj1wtvIwdbr29NdwGpoqoov+RVVwBPDiUkfFKVd1AIz8A VIcA== 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=GZjR6qHmOPHyA0Omzm/z9EJlU3n+BWzbwkD76Wtn2wQ=; b=soD+t/AJEHyaXYurTc69GrBneMGC9uNtDH3nK6i5FcStswvT+/tLtoBflEm+Eqont5 DeDv6CDMERC87Ka402oownVtFujEtBjROiV5pjpUgj9DDYwtmAZ3efXUeCUD9GPjqYGk arWc2UynJrL30dZlGTF0+B+Ti+FxWTAxbShFH7Ih6Z6qUafh3AyjIv5Ksd8/hCQzfxqo RG+B8scXyBW2Svg/XceqNlBiRMhoGtN3R9wkps1dJwSi/aO/Myt8B2IBeZ7TA8jjnsxe A5EhG0QoT46uJK1/9Tn5oAV6dWPlFohw2hhcnbiVbegWFQyTZ00d/G1lOWtlYkf9Cv5F X6YQ== 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 w14si7165097ejz.314.2020.11.23.22.21.21; Mon, 23 Nov 2020 22:21:44 -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 S1728641AbgKXGSU (ORCPT + 99 others); Tue, 24 Nov 2020 01:18:20 -0500 Received: from ozlabs.ru ([107.174.27.60]:49704 "EHLO ozlabs.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728166AbgKXGSU (ORCPT ); Tue, 24 Nov 2020 01:18:20 -0500 Received: from fstn1-p1.ozlabs.ibm.com (localhost [IPv6:::1]) by ozlabs.ru (Postfix) with ESMTP id A6A2EAE80255; Tue, 24 Nov 2020 01:18:14 -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 7/8] genirq/irqdomain: Reference irq_desc for already mapped irqs Date: Tue, 24 Nov 2020 17:17:19 +1100 Message-Id: <20201124061720.86766-8-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 references an irq_desc if already mapped interrupt requested to map again. This happends for PCI legacy interrupts where 4 interrupts are shared among all devices on the same PCI host bus adapter. From now on, the users shall call irq_dispose_mapping() for every irq_create_fwspec_mapping(). Most (all?) users do not bother with disposing though so it is not very likely to break many things. Signed-off-by: Alexey Kardashevskiy --- kernel/irq/irqdomain.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/kernel/irq/irqdomain.c b/kernel/irq/irqdomain.c index a0a81cc6c524..07f4bde87de5 100644 --- a/kernel/irq/irqdomain.c +++ b/kernel/irq/irqdomain.c @@ -663,7 +663,9 @@ unsigned int irq_create_mapping(struct irq_domain *domain, /* Check if mapping already exists */ virq = irq_find_mapping(domain, hwirq); if (virq) { + desc = irq_to_desc(virq); pr_debug("-> existing mapping on virq %d\n", virq); + kobject_get(&desc->kobj); return virq; } @@ -762,6 +764,7 @@ unsigned int irq_create_fwspec_mapping(struct irq_fwspec *fwspec) irq_hw_number_t hwirq; unsigned int type = IRQ_TYPE_NONE; int virq; + struct irq_desc *desc; if (fwspec->fwnode) { domain = irq_find_matching_fwspec(fwspec, DOMAIN_BUS_WIRED); @@ -798,8 +801,11 @@ unsigned int irq_create_fwspec_mapping(struct irq_fwspec *fwspec) * current trigger type then we are done so return the * interrupt number. */ - if (type == IRQ_TYPE_NONE || type == irq_get_trigger_type(virq)) + if (type == IRQ_TYPE_NONE || type == irq_get_trigger_type(virq)) { + desc = irq_to_desc(virq); + kobject_get(&desc->kobj); return virq; + } /* * If the trigger type has not been set yet, then set @@ -811,6 +817,8 @@ unsigned int irq_create_fwspec_mapping(struct irq_fwspec *fwspec) return 0; irqd_set_trigger_type(irq_data, type); + desc = irq_to_desc(virq); + kobject_get(&desc->kobj); return virq; } -- 2.17.1