Received: by 2002:ac0:a5b6:0:0:0:0:0 with SMTP id m51-v6csp5579684imm; Tue, 12 Jun 2018 09:55:58 -0700 (PDT) X-Google-Smtp-Source: ADUXVKJGDB9vb/qEKGeJcKMciZhCedYBp0J576qbyFzEhXFAHT2YVnulzVsuQBGW4DJXde71dGAn X-Received: by 2002:a17:902:aa98:: with SMTP id d24-v6mr1262981plr.185.1528822558144; Tue, 12 Jun 2018 09:55:58 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1528822558; cv=none; d=google.com; s=arc-20160816; b=WjTvXfC8iztuGVWoZGv3sQivzA5SSOH7gs7L/puv901AICzaN7Z8N+/7CbGNozEcNf Q3n9sFwvz0sKb4BGKr31+TJZLSjG1G5dmueWUys1jkTVSnx2mVKjee+r2KLJtRSigekB iQwKa4Z/a3Kw/hc/s5HwKlQWkIarD9OiLdNiyQQXLLKd3OaV8XBpH2kEG1DhIyQ8s70X wU51B6iTxcWS9oXXnRYD4pac3HnQpSsa/OWC2BgGddAC//r5YRK/2M/XCCF3zaFIHD8X peK4i1eRLOw1QgMkltQ3g8JUEOuI6nuF1BFsAw6NVxdD0KG2DG5BqWdWXhoDS5pfQ7h0 fsEw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:user-agent:references :in-reply-to:message-id:date:subject:cc:to:from:dkim-signature :arc-authentication-results; bh=1VPD3Zhx8h3Mf/nC3huNQ5d5nSR7j/GGiohwJ4V+G0Y=; b=F532eCvjHIO6GP5YXCHq0+knAVyBF4OUbDmertRVYHQ3yOLDQMf4KoHYo34tkarqml Y8pPKuoUg/1b8SWaLfR1whbh7M5d9MP22dnwqKbmyhd+zvwno8J3JazZlK7uPruzfQ3y XzmM9T1gjoz/t6GKj0YMFPX9WM61JVKnIAr1knyMQmv5g7a1ny3rVdm5Cmuu67ORzcWw QJWe1kx/WV8hz5PLlGtJfxIzTzMMIVSGXo6RDYmW/sLeWqSL29zHb8BI1uHaenNxQMvv F/GbbIdHXVG4drindVIOhHaygeJPOB/hETDI4tbkusgjTwXGKVprDwR68/q0qt2hyF4E 6m/Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=O78h3hu1; 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 l30-v6si511669plg.420.2018.06.12.09.55.43; Tue, 12 Jun 2018 09:55:58 -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=@kernel.org header.s=default header.b=O78h3hu1; 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 S934951AbeFLQya (ORCPT + 99 others); Tue, 12 Jun 2018 12:54:30 -0400 Received: from mail.kernel.org ([198.145.29.99]:55864 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S934579AbeFLQyU (ORCPT ); Tue, 12 Jun 2018 12:54:20 -0400 Received: from localhost (LFbn-1-12247-202.w90-92.abo.wanadoo.fr [90.92.61.202]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 4DE82208B8; Tue, 12 Jun 2018 16:54:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1528822459; bh=Mv52hmUiMrMlFuCu8KOT5sgdcqJnh41Bc3wbFTdZHgA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=O78h3hu1X3dEBF02T2T/jxfZyj8nKS3lsjjkt+OENAbiEVnrNoLYFusrnJxpI/qmz /TXbXG92gps7fen5OfK38A53DPwgFIS2N0uogu/T+Ww+tYKu2LbT+Qm+vmAVUclpRQ mx7VgOuV1b4Yl9d9ZV9nw30SY5VS867zXATMw+48= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Jack Morgenstein , Tariq Toukan , "David S. Miller" Subject: [PATCH 3.18 19/21] net/mlx4: Fix irq-unsafe spinlock usage Date: Tue, 12 Jun 2018 18:52:16 +0200 Message-Id: <20180612164826.186608548@linuxfoundation.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180612164825.401145490@linuxfoundation.org> References: <20180612164825.401145490@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 3.18-stable review patch. If anyone has any objections, please let me know. ------------------ From: Jack Morgenstein [ Upstream commit d546b67cda015fb92bfee93d5dc0ceadb91deaee ] spin_lock/unlock was used instead of spin_un/lock_irq in a procedure used in process space, on a spinlock which can be grabbed in an interrupt. This caused the stack trace below to be displayed (on kernel 4.17.0-rc1 compiled with Lock Debugging enabled): [ 154.661474] WARNING: SOFTIRQ-safe -> SOFTIRQ-unsafe lock order detected [ 154.668909] 4.17.0-rc1-rdma_rc_mlx+ #3 Tainted: G I [ 154.675856] ----------------------------------------------------- [ 154.682706] modprobe/10159 [HC0[0]:SC0[0]:HE0:SE1] is trying to acquire: [ 154.690254] 00000000f3b0e495 (&(&qp_table->lock)->rlock){+.+.}, at: mlx4_qp_remove+0x20/0x50 [mlx4_core] [ 154.700927] and this task is already holding: [ 154.707461] 0000000094373b5d (&(&cq->lock)->rlock/1){....}, at: destroy_qp_common+0x111/0x560 [mlx4_ib] [ 154.718028] which would create a new lock dependency: [ 154.723705] (&(&cq->lock)->rlock/1){....} -> (&(&qp_table->lock)->rlock){+.+.} [ 154.731922] but this new dependency connects a SOFTIRQ-irq-safe lock: [ 154.740798] (&(&cq->lock)->rlock){..-.} [ 154.740800] ... which became SOFTIRQ-irq-safe at: [ 154.752163] _raw_spin_lock_irqsave+0x3e/0x50 [ 154.757163] mlx4_ib_poll_cq+0x36/0x900 [mlx4_ib] [ 154.762554] ipoib_tx_poll+0x4a/0xf0 [ib_ipoib] ... to a SOFTIRQ-irq-unsafe lock: [ 154.815603] (&(&qp_table->lock)->rlock){+.+.} [ 154.815604] ... which became SOFTIRQ-irq-unsafe at: [ 154.827718] ... [ 154.827720] _raw_spin_lock+0x35/0x50 [ 154.833912] mlx4_qp_lookup+0x1e/0x50 [mlx4_core] [ 154.839302] mlx4_flow_attach+0x3f/0x3d0 [mlx4_core] Since mlx4_qp_lookup() is called only in process space, we can simply replace the spin_un/lock calls with spin_un/lock_irq calls. Fixes: 6dc06c08bef1 ("net/mlx4: Fix the check in attaching steering rules") Signed-off-by: Jack Morgenstein Signed-off-by: Tariq Toukan Signed-off-by: David S. Miller Signed-off-by: Greg Kroah-Hartman --- drivers/net/ethernet/mellanox/mlx4/qp.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --- a/drivers/net/ethernet/mellanox/mlx4/qp.c +++ b/drivers/net/ethernet/mellanox/mlx4/qp.c @@ -363,11 +363,11 @@ struct mlx4_qp *mlx4_qp_lookup(struct ml struct mlx4_qp_table *qp_table = &mlx4_priv(dev)->qp_table; struct mlx4_qp *qp; - spin_lock(&qp_table->lock); + spin_lock_irq(&qp_table->lock); qp = __mlx4_qp_lookup(dev, qpn); - spin_unlock(&qp_table->lock); + spin_unlock_irq(&qp_table->lock); return qp; }