{"id":2220969,"url":"http://patchwork.ozlabs.org/api/1.1/patches/2220969/?format=json","web_url":"http://patchwork.ozlabs.org/project/linux-tegra/patch/20260408-tegra_warn-v1-1-669a3bc74d77@debian.org/","project":{"id":21,"url":"http://patchwork.ozlabs.org/api/1.1/projects/21/?format=json","name":"Linux Tegra Development","link_name":"linux-tegra","list_id":"linux-tegra.vger.kernel.org","list_email":"linux-tegra@vger.kernel.org","web_url":null,"scm_url":null,"webscm_url":null},"msgid":"<20260408-tegra_warn-v1-1-669a3bc74d77@debian.org>","date":"2026-04-08T13:45:43","name":"spi: tegra210-quad: Fix false positive WARN on interrupt timeout with transfer complete","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"621e4fb59204856b4893d3db71e08e66bbb48be6","submitter":{"id":71262,"url":"http://patchwork.ozlabs.org/api/1.1/people/71262/?format=json","name":"Breno Leitao","email":"leitao@debian.org"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/linux-tegra/patch/20260408-tegra_warn-v1-1-669a3bc74d77@debian.org/mbox/","series":[{"id":499144,"url":"http://patchwork.ozlabs.org/api/1.1/series/499144/?format=json","web_url":"http://patchwork.ozlabs.org/project/linux-tegra/list/?series=499144","date":"2026-04-08T13:45:43","name":"spi: tegra210-quad: Fix false positive WARN on interrupt timeout with transfer complete","version":1,"mbox":"http://patchwork.ozlabs.org/series/499144/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/2220969/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/2220969/checks/","tags":{},"headers":{"Return-Path":"\n <linux-tegra+bounces-13608-incoming=patchwork.ozlabs.org@vger.kernel.org>","X-Original-To":["incoming@patchwork.ozlabs.org","linux-tegra@vger.kernel.org"],"Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n secure) header.d=debian.org header.i=@debian.org header.a=rsa-sha256\n header.s=smtpauto.stravinsky header.b=icQTJTsS;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=2600:3c04:e001:36c::12fc:5321; helo=tor.lore.kernel.org;\n envelope-from=linux-tegra+bounces-13608-incoming=patchwork.ozlabs.org@vger.kernel.org;\n receiver=patchwork.ozlabs.org)","smtp.subspace.kernel.org;\n\tdkim=pass (2048-bit key) header.d=debian.org header.i=@debian.org\n header.b=\"icQTJTsS\"","smtp.subspace.kernel.org;\n arc=none smtp.client-ip=82.195.75.108","smtp.subspace.kernel.org;\n dmarc=none (p=none dis=none) header.from=debian.org","smtp.subspace.kernel.org;\n spf=none smtp.mailfrom=debian.org"],"Received":["from tor.lore.kernel.org (tor.lore.kernel.org\n [IPv6:2600:3c04:e001:36c::12fc:5321])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4frPW13PPxz1xv0\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 08 Apr 2026 23:46:53 +1000 (AEST)","from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby tor.lore.kernel.org (Postfix) with ESMTP id 956463042E95\n\tfor <incoming@patchwork.ozlabs.org>; Wed,  8 Apr 2026 13:46:14 +0000 (UTC)","from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id 2469B3D091B;\n\tWed,  8 Apr 2026 13:46:14 +0000 (UTC)","from stravinsky.debian.org (stravinsky.debian.org [82.195.75.108])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby smtp.subspace.kernel.org (Postfix) with ESMTPS id 1B1FA3D0919;\n\tWed,  8 Apr 2026 13:46:12 +0000 (UTC)","from authenticated user\n\tby stravinsky.debian.org with esmtpsa\n (TLS1.3:ECDHE_X25519__RSA_PSS_RSAE_SHA256__AES_256_GCM:256)\n\t(Exim 4.96)\n\t(envelope-from <leitao@debian.org>)\n\tid 1wATEN-008Snk-04;\n\tWed, 08 Apr 2026 13:46:07 +0000"],"ARC-Seal":"i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1775655973; cv=none;\n b=D0h+NKg1KLtmFy0q68yF83cw5GEPNSfitT1ZJ6Gn9vae28U1DvG8A6+v/YbRpB42sZnBQ/2J5Wm+gvGcbBMA7c4uP/UsJQ52h+pqOtrpqCdi4khFxnOmpn7ZN7BooTBQtQKwh+CyXxKAD7AEzM1z/hSAhgTvcq2WJeQR41wdcTg=","ARC-Message-Signature":"i=1; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1775655973; c=relaxed/simple;\n\tbh=L2VDqHhN7Ia7l+wKWCkvcm5lCLsUz8HKsNWtCrpGFt0=;\n\th=From:Date:Subject:MIME-Version:Content-Type:Message-Id:To:Cc;\n b=Fj442XIPQVrXm8E6EGNldZQ1sv5a7MPGXAfHJzEYPaTDEAofiOWPu0PxBw3xqVEdAk1if1OlgP5lqP0JLn2eCGD/x8GUgJ4ORu8tvqjRM7yMYnAw/J/VDvfWKT/gXhByDmPM6Xf5p8xMlyumuQlKDbzGq+8eqWtpuSxQ587e1PE=","ARC-Authentication-Results":"i=1; smtp.subspace.kernel.org;\n dmarc=none (p=none dis=none) header.from=debian.org;\n spf=none smtp.mailfrom=debian.org;\n dkim=pass (2048-bit key) header.d=debian.org header.i=@debian.org\n header.b=icQTJTsS; arc=none smtp.client-ip=82.195.75.108","DKIM-Signature":"v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=debian.org;\n\ts=smtpauto.stravinsky; h=X-Debian-User:Cc:To:Message-Id:\n\tContent-Transfer-Encoding:Content-Type:MIME-Version:Subject:Date:From:\n\tReply-To:Content-ID:Content-Description:In-Reply-To:References;\n\tbh=HcvFXUIAV4OQbqlH4vRJ5Y5Q1or2wmgdX0N00cKRyx0=; b=icQTJTsSdSmhWVsrOw6iMDEkcx\n\t6dkFhyNoWBHaMJ0VLi4G6UlFOPn4sK5QKrI2Ix1ij1JhsJs8wAqvMMoaRuGbyTNyEi/PlpD6SbYnx\n\tm6UmfFzG4L/YvdfpH6HjpSJ6gHoeWWGt98ZgAMSVw8HKlSLaN1zacWR/vXJMZdEcG0O1uGEI1Y399\n\t1RggYcDakrgrFQrTY9pMoIrnm6ynwYrFSsgwFT4x7d9Vpz6ODkT15GIkfay1SU1i54Os2mrzY2qnG\n\tI/FDKlYlmmvvV/ivcWTQjmBsXGw2MZ26TrNtqCtg7PdwXAKCv/EiA9whMVtQQwfs/tkTjhvInwtfP\n\t1VGfMkIA==;","From":"Breno Leitao <leitao@debian.org>","Date":"Wed, 08 Apr 2026 06:45:43 -0700","Subject":"[PATCH] spi: tegra210-quad: Fix false positive WARN on interrupt\n timeout with transfer complete","Precedence":"bulk","X-Mailing-List":"linux-tegra@vger.kernel.org","List-Id":"<linux-tegra.vger.kernel.org>","List-Subscribe":"<mailto:linux-tegra+subscribe@vger.kernel.org>","List-Unsubscribe":"<mailto:linux-tegra+unsubscribe@vger.kernel.org>","MIME-Version":"1.0","Content-Type":"text/plain; charset=\"utf-8\"","Content-Transfer-Encoding":"7bit","Message-Id":"<20260408-tegra_warn-v1-1-669a3bc74d77@debian.org>","X-B4-Tracking":"v=1; b=H4sIAAZc1mkC/yXMQQrCQAwF0KuEv+7AdCxF5ioikqaxxsUomVaF0\n ruLdvk2b0VVN63ItML1ZdUeBZnahiA3LpMGG5EJKaY+dvEYZp2cL2/2EkRlTMIH7tsBDeHperX\n PPzudd9dluKvMvwHb9gUGTwG0bgAAAA==","X-Change-ID":"20260408-tegra_warn-cecd2ca3a61b","To":"Thierry Reding <thierry.reding@kernel.org>,\n Jonathan Hunter <jonathanh@nvidia.com>,\n Sowjanya Komatineni <skomatineni@nvidia.com>,\n Laxman Dewangan <ldewangan@nvidia.com>, Mark Brown <broonie@kernel.org>","Cc":"linux-tegra@vger.kernel.org, linux-spi@vger.kernel.org,\n linux-kernel@vger.kernel.org, song@kernel.org, kernel-team@meta.com,\n Breno Leitao <leitao@debian.org>","X-Mailer":"b4 0.16-dev-453a6","X-Developer-Signature":"v=1; a=openpgp-sha256; l=2822; i=leitao@debian.org;\n h=from:subject:message-id; bh=L2VDqHhN7Ia7l+wKWCkvcm5lCLsUz8HKsNWtCrpGFt0=;\n b=owEBbQKS/ZANAwAIATWjk5/8eHdtAcsmYgBp1lwa0fRGYKAfqmnbOnbUQt23sPW2yEc53EGC1\n 1SJdRgmzL6JAjMEAAEIAB0WIQSshTmm6PRnAspKQ5s1o5Of/Hh3bQUCadZcGgAKCRA1o5Of/Hh3\n bTk4D/9Zpiz9mjkCbo1M5qP26gFrQH6VOr4VwUL0PxpKTWaF5SJiMTM/uCT1s2RV26mwI5L279o\n 5bP3/WfRuDU70jdy721FgOexf3RpqghxM+6x0zN9O71IdHZsGpdqKcRV6mV18rMVz0mM6gnwuaV\n XyZNdsqHPam2ocM3YS2Dc/e2OmLd0R8CVqhKHJAgENK+myawra+B6+aBP2qsYriKZ6wV9PnuZCn\n zeKFRVzi/C/thsR5Ils44MtMXxQsrv+QJFloY9m8dwQ794G6w9a9zfHN3KRXC56oiSFTBqddw+h\n P4bP9fbdPID3JIG5MAmyeimBFfPQH1tJEnyK2RHzbV8961gf+QVrS4oUCgUYAuj0xWI26PScTsb\n Sl+vIBcNmtBO/KV5gDGXFrud9Zhf2/z52qGSd7gz0OfpV3vlkc9D/+PvV5MCwpYIDWim9xNcp1y\n ep4yfYJT1kSTestgmIbuh3sCzd2Dnl//XFGmbqALhg16+3X1pkEoDNuxhfpkzHKfWijGT52wG3t\n XDKjXLW2THn+qVCqtL2Qcnke2BOFAE1+N7wsYL4BJxBmB/Ba+X3t5CeEnnw65lTESZNZvjxrWcX\n SCK7hjuRFM/rxWfPminPsAl80RfrHZEBTVwfx2nQNwjM3PEb6XL0InSuq/aOsVssbD6Ifh4l4FD\n k6KJuFXhF1bU8Sw==","X-Developer-Key":"i=leitao@debian.org; a=openpgp;\n fpr=AC8539A6E8F46702CA4A439B35A3939FFC78776D","X-Debian-User":"leitao"},"content":"The WARN_ON_ONCE/WARN_ON fired unconditionally on any completion\ntimeout, including the recoverable case where the interrupt was lost but\nthe hardware actually finished the transfer. This produced a noisy splat\nwith a full call trace even though the driver successfully recovered via\ntegra_qspi_handle_timeout().\n\nSince tegra210 uses threaded interrupts, the transfer completion can be\nsignaled before the interrupt fires, making this false positive case\ncommon in practice.\n\nAlmost all the hosts I sysadmin in my fleet produce the following splat:\n\n\tWARNING: CPU: 47 PID: 844 at drivers/spi/spi-tegra210-quad.c:1226 tegra_qspi_transfer_one_message+0x8a4/0xba8\n\t....\n\ttegra-qspi NVDA1513:00: QSPI interrupt timeout, but transfer complete\n\nMove WARN_ON_ONCE/WARN_ON to fire only on real unrecoverable timeouts,\ni.e., when tegra_qspi_handle_timeout() confirms the hardware did NOT\ncomplete. This makes the warning actionable instead of just polluting\nthe metrics.\n\nSigned-off-by: Breno Leitao <leitao@debian.org>\n---\n drivers/spi/spi-tegra210-quad.c | 6 ++++--\n 1 file changed, 4 insertions(+), 2 deletions(-)\n\n\n---\nbase-commit: f3e6330d7fe42b204af05a2dbc68b379e0ad179e\nchange-id: 20260408-tegra_warn-cecd2ca3a61b\n\nBest regards,\n--  \nBreno Leitao <leitao@debian.org>","diff":"diff --git a/drivers/spi/spi-tegra210-quad.c b/drivers/spi/spi-tegra210-quad.c\nindex 7cca5578eba31..db28dd556484b 100644\n--- a/drivers/spi/spi-tegra210-quad.c\n+++ b/drivers/spi/spi-tegra210-quad.c\n@@ -1223,7 +1223,7 @@ static int tegra_qspi_combined_seq_xfer(struct tegra_qspi *tqspi,\n \t\t\t\t\t(&tqspi->xfer_completion,\n \t\t\t\t\tQSPI_DMA_TIMEOUT);\n \n-\t\t\tif (WARN_ON_ONCE(ret == 0)) {\n+\t\t\tif (ret == 0) {\n \t\t\t\t/*\n \t\t\t\t * Check if hardware completed the transfer\n \t\t\t\t * even though interrupt was lost or delayed.\n@@ -1232,6 +1232,7 @@ static int tegra_qspi_combined_seq_xfer(struct tegra_qspi *tqspi,\n \t\t\t\tret = tegra_qspi_handle_timeout(tqspi);\n \t\t\t\tif (ret < 0) {\n \t\t\t\t\t/* Real timeout - clean up and fail */\n+\t\t\t\t\tWARN_ON_ONCE(1);\n \t\t\t\t\tdev_err(tqspi->dev, \"transfer timeout\\n\");\n \n \t\t\t\t\t/* Abort transfer by resetting pio/dma bit */\n@@ -1340,7 +1341,7 @@ static int tegra_qspi_non_combined_seq_xfer(struct tegra_qspi *tqspi,\n \n \t\tret = wait_for_completion_timeout(&tqspi->xfer_completion,\n \t\t\t\t\t\t  QSPI_DMA_TIMEOUT);\n-\t\tif (WARN_ON(ret == 0)) {\n+\t\tif (ret == 0) {\n \t\t\t/*\n \t\t\t * Check if hardware completed the transfer even though\n \t\t\t * interrupt was lost or delayed. If so, process the\n@@ -1349,6 +1350,7 @@ static int tegra_qspi_non_combined_seq_xfer(struct tegra_qspi *tqspi,\n \t\t\tret = tegra_qspi_handle_timeout(tqspi);\n \t\t\tif (ret < 0) {\n \t\t\t\t/* Real timeout - clean up and fail */\n+\t\t\t\tWARN_ON(1);\n \t\t\t\tdev_err(tqspi->dev, \"transfer timeout\\n\");\n \n \t\t\t\tif (tqspi->is_curr_dma_xfer)\n","prefixes":[]}