From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2CF2719005D; Tue, 10 Sep 2024 10:42:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1725964978; cv=none; b=mu7A5Ah6jcCTviVLQ/VhZjIcIXXlcUg6DSLkmFkn4FT6G0xKQlG9W1Rx1N/N6PBriswLDlj4XRGjv8TUeiAZLsFCDISeipl6KSueLAO8j1WzLeE5OxJ9nW+1Na54STXNk2w8dIF5Q9ynpVyzKuuUyhMGL4gkDr7UoNirwq6NVSU= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1725964978; c=relaxed/simple; bh=xkv+YmfHMy5AKGTipmxwwJdx11s7luzjoFsferQfl6A=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ETJVPch1pii4VjVxP3k2dxSWz8Quyne2ZiepkDI6GAN/DU+mJXTqPJ6g/7zHPpq8dDnQKAPGF3GVUTSYmYP+rzascxXJyowDB8o8d8fIcXBPLCe8XeC7b5+jLfREMGesYkrIk89arx7hOh2zfCzHbH1G6GXSNdfQZ9hAUVLUQCM= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b=Ekc1G6dX; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b="Ekc1G6dX" Received: by smtp.kernel.org (Postfix) with ESMTPSA id AA61DC4CEC3; Tue, 10 Sep 2024 10:42:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1725964978; bh=xkv+YmfHMy5AKGTipmxwwJdx11s7luzjoFsferQfl6A=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Ekc1G6dXUlBfRXBXY2GyBDGpf4VIzfB1HA2btBaVPA0WoerjP7SI4kSIIgPAPmsCq AH9aNgDCdwWBl8nsGxDu7bzR7tksGN38T+oTCzq6qiDuM7i5y8zJGRUWtivVSTUl2H XEWg9K9sxyajoZVsBB+kTJMDL1kZv/FjiGrBqH18= From: Greg Kroah-Hartman To: stable@vger.kernel.org Cc: Greg Kroah-Hartman , patches@lists.linux.dev, Simon Arlott , Przemek Kitszel , Marc Kleine-Budde Subject: [PATCH 5.10 069/186] can: mcp251x: fix deadlock if an interrupt occurs during mcp251x_open Date: Tue, 10 Sep 2024 11:32:44 +0200 Message-ID: <20240910092557.355168258@linuxfoundation.org> X-Mailer: git-send-email 2.46.0 In-Reply-To: <20240910092554.645718780@linuxfoundation.org> References: <20240910092554.645718780@linuxfoundation.org> User-Agent: quilt/0.67 X-stable: review X-Patchwork-Hint: ignore Precedence: bulk X-Mailing-List: stable@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit 5.10-stable review patch. If anyone has any objections, please let me know. ------------------ From: Simon Arlott commit 7dd9c26bd6cf679bcfdef01a8659791aa6487a29 upstream. The mcp251x_hw_wake() function is called with the mpc_lock mutex held and disables the interrupt handler so that no interrupts can be processed while waking the device. If an interrupt has already occurred then waiting for the interrupt handler to complete will deadlock because it will be trying to acquire the same mutex. CPU0 CPU1 ---- ---- mcp251x_open() mutex_lock(&priv->mcp_lock) request_threaded_irq() mcp251x_can_ist() mutex_lock(&priv->mcp_lock) mcp251x_hw_wake() disable_irq() <-- deadlock Use disable_irq_nosync() instead because the interrupt handler does everything while holding the mutex so it doesn't matter if it's still running. Fixes: 8ce8c0abcba3 ("can: mcp251x: only reset hardware as required") Signed-off-by: Simon Arlott Reviewed-by: Przemek Kitszel Cc: stable@vger.kernel.org Link: https://lore.kernel.org/all/4fc08687-1d80-43fe-9f0d-8ef8475e75f6@0882a8b5-c6c3-11e9-b005-00805fc181fe.uuid.home.arpa Signed-off-by: Marc Kleine-Budde Signed-off-by: Greg Kroah-Hartman --- drivers/net/can/spi/mcp251x.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --- a/drivers/net/can/spi/mcp251x.c +++ b/drivers/net/can/spi/mcp251x.c @@ -755,7 +755,7 @@ static int mcp251x_hw_wake(struct spi_de int ret; /* Force wakeup interrupt to wake device, but don't execute IST */ - disable_irq(spi->irq); + disable_irq_nosync(spi->irq); mcp251x_write_2regs(spi, CANINTE, CANINTE_WAKIE, CANINTF_WAKIF); /* Wait for oscillator startup timer after wake up */