From patchwork Wed Oct 4 14:46:59 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Masahiro Yamada X-Patchwork-Id: 114780 Delivered-To: patch@linaro.org Received: by 10.140.22.163 with SMTP id 32csp3211223qgn; Wed, 4 Oct 2017 07:47:46 -0700 (PDT) X-Google-Smtp-Source: AOwi7QDHGxFyOOimhVz/JBNQEEK0XVKp/4yV2mPgclUHnbxaEENCLUvmkBJM4UcY21cOnIcxc8/v X-Received: by 10.101.86.133 with SMTP id v5mr18834292pgs.249.1507128466497; Wed, 04 Oct 2017 07:47:46 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1507128466; cv=none; d=google.com; s=arc-20160816; b=avrF57ghjTeZlOvpSWhlfSs5lWVOOvDl6SeBwMqU5PMmJp1FfwUBRoMR9oIgkxa31M dXFDYdzOMha5O64NfHiBW0O9ha9V3JOGxgSU8Wxxq0K4lPXZDGB7sOJ1US4clvn1QTDX CgP54ZR+betiSuVfIwHggGBF4ysjWP64oWSQpAmu8WLE68zhBSJv1Dxn1Epm0/YGlgl6 sqjxLlmVlv1GkcbGHw5DftvNbN9/WckoM/cuQxLR8XueMiwjZhNtOkHn90JOymhkLXEF IqHq9IVX+yrBe2vcF4b+pqZzVX2U1dAqFLDdh+CcIPUwmbtnpp4WN6gxmTERToOWBCJw 5O4A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :dkim-signature:dkim-filter:arc-authentication-results; bh=PatYML+4Ew3kXSX0m6v/+ln1ZLeJGCZ1XPjd1ZDZ2J8=; b=zglu0IWdPmKMXz26E+05J1sxhxHEUygMDvEi3sL38Dscpt/0ia2+zbfy3gMV43wbul Y8WlsTJ190WT0qo2Mhl4VoORNpDT68IRMgUnCxwhbz1YlC4H6aaZfLmDBoFLeTRcYw5l U/Cauk3iyyCN1akyTbByCR2BCIsPwXj/CVWPfpq4Q6ZKzs5c3/uiDbhS/9nRiZEQHpP4 ww8UigymEU/9FHSP9krQCb6sJorJ5gbJP9ndtDQVYJAGqeozvurihcJySZv960EEWIp1 1VJnP+mn9dxpz6OrrEsA46W7f7S9R+njLABTvd/jtkyqpdH4/WJwOfIwE55l63SL59ft cfMA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@nifty.com header.s=dec2015msa header.b=pxdJEQkN; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id e9si11885536pfd.74.2017.10.04.07.47.46; Wed, 04 Oct 2017 07:47:46 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@nifty.com header.s=dec2015msa header.b=pxdJEQkN; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752323AbdJDOrn (ORCPT + 26 others); Wed, 4 Oct 2017 10:47:43 -0400 Received: from conuserg-07.nifty.com ([210.131.2.74]:51632 "EHLO conuserg-07.nifty.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752200AbdJDOrm (ORCPT ); Wed, 4 Oct 2017 10:47:42 -0400 Received: from grover.sesame (FL1-122-131-185-176.osk.mesh.ad.jp [122.131.185.176]) (authenticated) by conuserg-07.nifty.com with ESMTP id v94El4pB026020; Wed, 4 Oct 2017 23:47:05 +0900 DKIM-Filter: OpenDKIM Filter v2.10.3 conuserg-07.nifty.com v94El4pB026020 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nifty.com; s=dec2015msa; t=1507128425; bh=PatYML+4Ew3kXSX0m6v/+ln1ZLeJGCZ1XPjd1ZDZ2J8=; h=From:To:Cc:Subject:Date:From; b=pxdJEQkN5UMj7weKyIPz8ScSlRjpwu1UIkS1TguExPzJep4Y/AUcjwC7ejeRZW2KO L1f2GYkQ86CN5LzKUQsmJSrSOLmdQ/m6ZYP9Giyc5G+5+L67q0FKx7k3IG4RBssmfv dhKVocGCcqj0C+1cWl+og2U55QDNK0bU9Wdyc6dWY8M+fU/DO5les3BoI3pMjHaN1k 8VDGisHh0KH+zawtWppurlcIbGe6ejvt4J1bEkLjLzQSpij+Wxzvmme9L+suhvJDeP QM259gBcnl3lysBxyfriX3jq+sAXzhUhIDVih8++nNMtWKMn+11ciy0Q4HQWZyEMsb tn9lhRxKszovA== X-Nifty-SrcIP: [122.131.185.176] From: Masahiro Yamada To: Thomas Gleixner , Jason Cooper , Marc Zyngier Cc: Masahiro Yamada , linux-kernel@vger.kernel.org Subject: [PATCH] irqdomain: move revmap_trees_mutex to struct irq_domain Date: Wed, 4 Oct 2017 23:46:59 +0900 Message-Id: <1507128419-7543-1-git-send-email-yamada.masahiro@socionext.com> X-Mailer: git-send-email 2.7.4 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The revmap_trees_mutex protects domain->revmap_tree. It is allowed to modify revmap_tree of two different domains concurrently. Change the global mutex to per-domain mutex. Signed-off-by: Masahiro Yamada --- include/linux/irqdomain.h | 2 ++ kernel/irq/irqdomain.c | 14 +++++++------- 2 files changed, 9 insertions(+), 7 deletions(-) -- 2.7.4 diff --git a/include/linux/irqdomain.h b/include/linux/irqdomain.h index 81e4889..56b68b0 100644 --- a/include/linux/irqdomain.h +++ b/include/linux/irqdomain.h @@ -32,6 +32,7 @@ #include #include #include +#include #include struct device_node; @@ -172,6 +173,7 @@ struct irq_domain { unsigned int revmap_direct_max_irq; unsigned int revmap_size; struct radix_tree_root revmap_tree; + struct mutex revmap_tree_mutex; unsigned int linear_revmap[]; }; diff --git a/kernel/irq/irqdomain.c b/kernel/irq/irqdomain.c index ac4644e..7870800 100644 --- a/kernel/irq/irqdomain.c +++ b/kernel/irq/irqdomain.c @@ -21,7 +21,6 @@ static LIST_HEAD(irq_domain_list); static DEFINE_MUTEX(irq_domain_mutex); -static DEFINE_MUTEX(revmap_trees_mutex); static struct irq_domain *irq_default_domain; static void irq_domain_check_hierarchy(struct irq_domain *domain); @@ -211,6 +210,7 @@ struct irq_domain *__irq_domain_add(struct fwnode_handle *fwnode, int size, /* Fill structure */ INIT_RADIX_TREE(&domain->revmap_tree, GFP_KERNEL); + mutex_init(&domain->revmap_tree_mutex); domain->ops = ops; domain->host_data = host_data; domain->hwirq_max = hwirq_max; @@ -462,9 +462,9 @@ static void irq_domain_clear_mapping(struct irq_domain *domain, if (hwirq < domain->revmap_size) { domain->linear_revmap[hwirq] = 0; } else { - mutex_lock(&revmap_trees_mutex); + mutex_lock(&domain->revmap_tree_mutex); radix_tree_delete(&domain->revmap_tree, hwirq); - mutex_unlock(&revmap_trees_mutex); + mutex_unlock(&domain->revmap_tree_mutex); } } @@ -475,9 +475,9 @@ static void irq_domain_set_mapping(struct irq_domain *domain, if (hwirq < domain->revmap_size) { domain->linear_revmap[hwirq] = irq_data->irq; } else { - mutex_lock(&revmap_trees_mutex); + mutex_lock(&domain->revmap_tree_mutex); radix_tree_insert(&domain->revmap_tree, hwirq, irq_data); - mutex_unlock(&revmap_trees_mutex); + mutex_unlock(&domain->revmap_tree_mutex); } } @@ -1459,11 +1459,11 @@ static void irq_domain_fix_revmap(struct irq_data *d) return; /* Not using radix tree. */ /* Fix up the revmap. */ - mutex_lock(&revmap_trees_mutex); + mutex_lock(&d->domain->revmap_tree_mutex); slot = radix_tree_lookup_slot(&d->domain->revmap_tree, d->hwirq); if (slot) radix_tree_replace_slot(&d->domain->revmap_tree, slot, d); - mutex_unlock(&revmap_trees_mutex); + mutex_unlock(&d->domain->revmap_tree_mutex); } /**