From patchwork Thu May 24 08:46:46 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Rosin X-Patchwork-Id: 919728 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-i2c-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=axentia.se Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=axentia.se header.i=@axentia.se header.b="fQhydMhF"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40s3153LFlz9s16 for ; Thu, 24 May 2018 18:47:37 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S965497AbeEXIrd (ORCPT ); Thu, 24 May 2018 04:47:33 -0400 Received: from mail-ve1eur01on0119.outbound.protection.outlook.com ([104.47.1.119]:9666 "EHLO EUR01-VE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S965114AbeEXIrP (ORCPT ); Thu, 24 May 2018 04:47:15 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=axentia.se; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=bnjFxM7Xfo1o836R6grJp2tKFNFTiInQt0KAD0bU6jc=; b=fQhydMhFNqq0mcBxz2ySBtx8UpKl15ZM4P/k0edhvnJOLOwMBEd3u1TRd6zPskd9ENWGrhUTBimPY29gwlBIwaOiXzNROgqm8HQZLi3x9waS/A68+TVB9mdEbmBmpeXSJwyN4ZLuuYtOgrFLXRhctiAfeUl6Wei9gdLV5ww83IE= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=peda@axentia.se; Received: from orc.pedanet (85.226.244.23) by HE1PR0202MB2779.eurprd02.prod.outlook.com (2603:10a6:3:e8::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.776.11; Thu, 24 May 2018 08:47:11 +0000 From: Peter Rosin To: linux-kernel@vger.kernel.org Cc: Peter Rosin , Wolfram Sang , Peter Zijlstra , Ingo Molnar , Will Deacon , Greg Kroah-Hartman , Andrew Morton , Philippe Ombredanne , Davidlohr Bueso , linux-i2c@vger.kernel.org, Peter Chang , Deepa Dinamani , John Sperbeck Subject: [PATCH v2 2/2] i2c: mux: annotate the nested rt_mutex usage Date: Thu, 24 May 2018 10:46:46 +0200 Message-Id: <20180524084646.31697-3-peda@axentia.se> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20180524084646.31697-1-peda@axentia.se> References: <20180524084646.31697-1-peda@axentia.se> MIME-Version: 1.0 X-Originating-IP: [85.226.244.23] X-ClientProxiedBy: HE1PR0402CA0019.eurprd04.prod.outlook.com (2603:10a6:3:d0::29) To HE1PR0202MB2779.eurprd02.prod.outlook.com (2603:10a6:3:e8::21) X-MS-PublicTrafficType: Email X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(7021125)(5600026)(4534165)(7022125)(4603075)(4627221)(201702281549075)(7048125)(7024125)(7027125)(7028125)(7023125)(2017052603328)(7153060)(7193020); SRVR:HE1PR0202MB2779; X-Microsoft-Exchange-Diagnostics: 1; HE1PR0202MB2779; 3:whpFVXywz9XeoKyTsLmVJuS58cxidJzo5/2MqvvActeotry87KOwpav5ZeF7Qab/TQCnnxJAc3icJYXJA+QGzXc41U1RZlItI1v4erhlxVad4+jKM8ITaU7n75EMyBRyF24YCoFRffyje6t+bmzTzX11xiUZtXcTen73v+mVZwMLoBCbRUcevhOOepiiuBgrbzJlS3H9fv7/uPzi5EF5HbCvKVDBIqAjG24sHUFstxYooe+2my2M0K53mBJa0p7Q; 25:eubf3JnGmK5xRQ524v99366vBMYM+9GZtu8uRZsR1NuIrirtn+I0GLA6XjRCJ5cuMuERKNcPbxdpGMys1NUc/ExRojl0vJb7D5pa8e9LOsIMgEAbKGCfPEmLmCNMcD5N03HTK9XKRZ6eNhrohQjANiQeeqNDWePuYZoCny0yrw0iaegbb7RxCF5eM31gS+JQNX+lBVLWn5F2PnBVdjYMA7HoxgGqMwN04qH3hqqE9XkNEEUF31N71cs7YTtaNwaQI6NaBB/JM/g8A/aa2Wh4C5ad9Crc2KbOeBzZys/w+FTKh4enpo/brgeZi/XxC5FJ4tXfg6NLs1uHdZeIt2zfYg==; 31:8n8qelnhQ1Xm0H6RPKqeiSGniUwNzfSW1waPPF9SoECKWDWaiqR+GtvOIQkDik7FBAblLo++hgioEgC3J4crG0yqVDvR9vYcQDZZlNIWIKI4qzVkjsajR1KLnPVdKflM/C0mwTIFJ0eGgBiZYKVpD0FeeQ80SqbVYLGuosxCGad2of8CmZ0gdMo//RFeRg8JQyVM4HH0be9qweP33zxsDgpUi7dYhv0icWWV6+/kKxw= X-MS-TrafficTypeDiagnostic: HE1PR0202MB2779: X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(211936372134217)(153496737603132); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040522)(2401047)(5005006)(8121501046)(3002001)(10201501046)(93006095)(93001095)(3231254)(944501410)(52105095)(149027)(150027)(6041310)(20161123558120)(20161123564045)(20161123560045)(20161123562045)(2016111802025)(6043046)(6072148)(201708071742011)(7699016); SRVR:HE1PR0202MB2779; BCL:0; PCL:0; RULEID:; SRVR:HE1PR0202MB2779; X-Microsoft-Exchange-Diagnostics: 1; HE1PR0202MB2779; 4:UQWGQjoibB37iaki1FuoW+bxctVnbdqYR6vSn6PUWgjucsi9stf9JlK/yCo43RjUvVIxglfx5YSaMrwOnYqgc/BPfnpRQdN0cycd2iRFiFZ1uQcZyHW1e9oB4qyuv0gw29mFGSocUV2grOcnW80E+LZMxWGBJhTirAr8i2IFHEErFLLMqVYvBhHKAL9BL0ePsgor09+hlVWlBNE1RlB9VD5cweJWGHaE3SLk0S1gEYEH/tq8IvLe4e8fNfkKoPaTzOPst6fIV+rTBt/m+OxvcgoBydsqrZvc/P8N1iZTMh7QIOAqutrM4ptABHjinY0veJDjg+/EhgImRY4wYEl3putxO+J92QxMDHnPB31vp+8= X-Forefront-PRVS: 0682FC00E8 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(366004)(39380400002)(396003)(39830400003)(376002)(346002)(189003)(199004)(74482002)(52116002)(25786009)(6916009)(50226002)(8936002)(6506007)(386003)(478600001)(51416003)(2351001)(2361001)(7736002)(5660300001)(476003)(6486002)(97736004)(6512007)(305945005)(76176011)(6666003)(53936002)(86362001)(54906003)(486006)(59450400001)(316002)(2616005)(81156014)(81166006)(11346002)(4326008)(956004)(8676002)(3846002)(48376002)(66066001)(68736007)(7416002)(50466002)(36756003)(16586007)(6116002)(106356001)(16526019)(105586002)(1076002)(186003)(26005)(446003)(2906002)(47776003)(42262002); DIR:OUT; SFP:1102; SCL:1; SRVR:HE1PR0202MB2779; H:orc.pedanet; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; Received-SPF: None (protection.outlook.com: axentia.se does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: 1; HE1PR0202MB2779; 23:bMPLe5vbYMpw8Mk9OnOuFc35mIk/ztt6djn9oPH/Kac4ta4o3V6eKIoodJZ11vB1lpLlQgwawLYC+HUNZ+xdWXE9qZp/VryreWmibuJJwg5tt18I0atqoB6R3nGo1uG10B2dwVhGn4hG5yQTk0kn20W9RK0ygUl6FTD01VlykfQ8HyKoIiCXdMJ7ocUe1tJS+cZQ1/mk9p8XHtvsJem4GeKi8ntT4wvNH1LTrgpWNhlgP5T+hrvMrGZpZQdfz34FmkY1vXLhOfqY7Qzk+MgtWbSyjdziouZSmdr3Ih9NMRukeqUTsmdskbjPCa+CCaN7mUCTVaMggDhszaf+dKVWp8PlA5TNYJrjYOwb8EKhQhfbZ430VU29rbCjQN9Jq5m+11Z18fpVzw9Mx4uXg8HG8Av0Z0S+VQee6XDVUE4+C8jVgEt2xrQfLGdr0QVuOiEi3xhBUOemtvM429dE7j1O6pB9RbuYK38oBdhVnZUEbr9TFVqWz4DACU+ZoBz1jCJD3TTmmByZv53IjG+lbiRGyS+34wbiVfJSMOoYJ6f8xwqfOoKgRDwgmX1xAWT3c/7s3vBKTDNxhRuGtLhcUFxCYZgS2YQps7IOt0GGy4uOQro4ad+Zd3CA8xBwmI5esjGW7xnr3xq08fJYjQCbizoFZqXiIqgy02l6IbmL7+PezeB4XmjMYA+KKdmprGRiji+uxcBPX6O+HV2vyja4a0FC4HI9BkG4NkbYMjf8nDUzetBN5ZtRqQrHCi83YZ7mdqLiWr/UGB18mnr3KyBHAqbV+sZiw4cTpJ4imek50RPHSFdpA2whZMenEbAX/IpgcWHb+Cv//RKwDQreZSXYnA49Aqc76t5kz7dvsNvPwFbhfe6WEZ6qn0XHeo1HRhNJmHoSPQdWTaK8b7N85sbvF/Pu6V1DZMrdGtx0Rkd++HuVtVpArOkfAGv4W45c7HnUO4HhJHM3rK5DhtEyu0G3QZ5TWMbJFkyfh29UOF3vJWxz8FcRBJiSLr4yGM0m6O8e7iS1MTD4SctWN8Dl4naHYowH6ut7pt4WDUJ147884TnhEOj0W4j/1UAaVvNTToVq+JNbYPFbEB1KmVxZ4zBoSe8flHL/v16QE3jctxPnFC7pbFCNvmKPjsjkRRH/9m57nYKLhmqX1FXzVhn+8oZFzVgCnevMdPKMh20x4AbFE1eUlB6GkAl1VCt0Ccufo+1OM7j2C0yavZXChpGzr6ldRcDtcSGjitK7NDPM5YurOhvRV1dzTazNJ5w79UTNsbjeecwComcosM9nY1BpDSu5O9D3gN3qG5mJjGh4GpoJd4qgoVOvQ1iooYEkmSjdyL3Z05PS X-Microsoft-Antispam-Message-Info: pGU1E/oND+twdVrh2e8t1nsJqxPGv5AYh0GFsLn8NcGB2A3LdMgmiMMd1x9U96KXkfcSp541F9LJxECNWcIaNnqLEOEdhJ/xZkx8jyVm6xUlCUjQygMglqGUTDXG8hb0BqdBRFNmm9nxxyfhuNtHxU3NTLJw5oE1lo5ABVIqE0AlzNDe0Dr5Trx7Dg2F1JBg X-Microsoft-Exchange-Diagnostics: 1; HE1PR0202MB2779; 6:nrRLrgu03JrSN4iFW0lrjralFfeQcNz0nTfWKdoSpivqvqKoJHg7DDRqdotdcb17Os63zovTkBF8kON6JGXaPHoEv1u9tlVp+BqYoIsI4R/TQfMuUrMz6hVQbCmytsCjlR8h/0r1se37/tFGUFLm1DxkdxKiulN3XKatKKt0ZfiKSMXp0C/q/cjtIB4V/skKtfHGHc6uVDn7Di0H5Gx2MzSUszaZJLm6MHQITTJIe8Dk+rJny5E7sOnZMM65VIUnqfRw219V3brCiOMILyPXmzNCOWWqFECDhYETa7q7BrFp+xaGkZDUraXD2H0RNFvJJqcrEl0ui+TlylvUzpxAUmV2E6gQ/RtDj6cV/B14zWVC6SM3yaLMXu2HVx5zoIWdATJn3WSP5oyuMvXTx3Mc7r48MeyHjEAG6DUJoXzzEKG0Egk+nZ5+yj8Ve59xLhX4hIpcCsaBDWnL42xT9ybMvg==; 5:8MFi4Um2Rwv/JqqRP68/nJv3XR0rHIp5JH7/uTy6POD2cIRA4L4A5HK4xCyO4hDNik7ScPgacObEwK0dOnG4i7Ek5O7HnLItGlLTNb+uuk3Z+4iv/hC/AioGPLh1udVTxvCN9wbhpgDDRtx/YCskOk8s6HpN7X3fxoq2V05lz5o=; 24:W16w9CiEih1R0ApQhUfAlunN9+FCrzgrxPQz05DLvLXK/6kol7IDv07G11Yr1RiUysGDdPGymKop4Lk2BoWJZu3MtZ0eHMAu7awZzkYHf/0= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; HE1PR0202MB2779; 7:ZYke/DeJYFUiiwWE/mXPwuFqprkUANdOuY3n/Ke9bVYR9bMcDb99IuhxNO6vaZxhdU3KvU/0+EBx2xDiEtlKtCyo0OdL2R+PcwfxPJz4rhNbz9QYt4+2yC5+0CEzS/2KejiRSGCtutcUGVEAZfGOvQkNvpILL1y8E3fCEzhfj+GIZg6R7Qf9M/+0rDWuNjB8I1dUNTMo3SavI5fmDvsEepHI2URFuMMP66OIsuC3KlMXTalsaXnPVBWZe/9Ps4JN X-MS-Office365-Filtering-Correlation-Id: f36df9cf-8020-4809-90bb-08d5c152f117 X-OriginatorOrg: axentia.se X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 May 2018 08:47:11.5844 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: f36df9cf-8020-4809-90bb-08d5c152f117 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4ee68585-03e1-4785-942a-df9c1871a234 X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0202MB2779 Sender: linux-i2c-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-i2c@vger.kernel.org If an i2c topology has instances of nested muxes, then a lockdep splat is produced when when i2c_parent_lock_bus() is called. Here is an example: ============================================ WARNING: possible recursive locking detected -------------------------------------------- insmod/68159 is trying to acquire lock: (i2c_register_adapter#2){+.+.}, at: i2c_parent_lock_bus+0x32/0x50 [i2c_mux] but task is already holding lock: (i2c_register_adapter#2){+.+.}, at: i2c_parent_lock_bus+0x32/0x50 [i2c_mux] other info that might help us debug this: Possible unsafe locking scenario: CPU0 ---- lock(i2c_register_adapter#2); lock(i2c_register_adapter#2); *** DEADLOCK *** May be due to missing lock nesting notation 1 lock held by insmod/68159: #0: (i2c_register_adapter#2){+.+.}, at: i2c_parent_lock_bus+0x32/0x50 [i2c_mux] stack backtrace: CPU: 13 PID: 68159 Comm: insmod Tainted: G O Call Trace: dump_stack+0x67/0x98 __lock_acquire+0x162e/0x1780 lock_acquire+0xba/0x200 rt_mutex_lock+0x44/0x60 i2c_parent_lock_bus+0x32/0x50 [i2c_mux] i2c_parent_lock_bus+0x3e/0x50 [i2c_mux] i2c_smbus_xfer+0xf0/0x700 i2c_smbus_read_byte+0x42/0x70 my2c_init+0xa2/0x1000 [my2c] do_one_initcall+0x51/0x192 do_init_module+0x62/0x216 load_module+0x20f9/0x2b50 SYSC_init_module+0x19a/0x1c0 SyS_init_module+0xe/0x10 do_syscall_64+0x6c/0x1a0 entry_SYSCALL_64_after_hwframe+0x42/0xb7 Reported-by: John Sperbeck Signed-off-by: Peter Rosin --- drivers/i2c/i2c-core-base.c | 2 +- drivers/i2c/i2c-mux.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/i2c/i2c-core-base.c b/drivers/i2c/i2c-core-base.c index f5ec6ec6776f..1157a64c7be3 100644 --- a/drivers/i2c/i2c-core-base.c +++ b/drivers/i2c/i2c-core-base.c @@ -615,7 +615,7 @@ static int i2c_check_addr_busy(struct i2c_adapter *adapter, int addr) static void i2c_adapter_lock_bus(struct i2c_adapter *adapter, unsigned int flags) { - rt_mutex_lock(&adapter->bus_lock); + rt_mutex_lock_nested(&adapter->bus_lock, i2c_adapter_depth(adapter)); } /** diff --git a/drivers/i2c/i2c-mux.c b/drivers/i2c/i2c-mux.c index 9669ca4937b8..7ba31f6bf148 100644 --- a/drivers/i2c/i2c-mux.c +++ b/drivers/i2c/i2c-mux.c @@ -144,7 +144,7 @@ static void i2c_mux_lock_bus(struct i2c_adapter *adapter, unsigned int flags) struct i2c_mux_priv *priv = adapter->algo_data; struct i2c_adapter *parent = priv->muxc->parent; - rt_mutex_lock(&parent->mux_lock); + rt_mutex_lock_nested(&parent->mux_lock, i2c_adapter_depth(adapter)); if (!(flags & I2C_LOCK_ROOT_ADAPTER)) return; i2c_lock_bus(parent, flags); @@ -181,7 +181,7 @@ static void i2c_parent_lock_bus(struct i2c_adapter *adapter, struct i2c_mux_priv *priv = adapter->algo_data; struct i2c_adapter *parent = priv->muxc->parent; - rt_mutex_lock(&parent->mux_lock); + rt_mutex_lock_nested(&parent->mux_lock, i2c_adapter_depth(adapter)); i2c_lock_bus(parent, flags); }