Received: by 2002:ab2:3319:0:b0:1ef:7a0f:c32d with SMTP id i25csp102861lqc; Thu, 7 Mar 2024 11:30:31 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCUJN7s2yS7LNnU/UjnvsP+rn7LGL2f/pLYn3cVwKpoXFWd1NUbfjNJEVuHrJSCYYD6Yxb56NLQMS7hBaUajCreeJcXrFJZXHj2V/q5oqg== X-Google-Smtp-Source: AGHT+IGL0X/LYG86SEoCHLo+qJ4djD9Cehxach8GEu7Jd5CmKN/VtVFRDOY+0/19Cus18n9iZzuD X-Received: by 2002:a17:906:4f0a:b0:a45:46f8:a181 with SMTP id t10-20020a1709064f0a00b00a4546f8a181mr8632697eju.46.1709839831340; Thu, 07 Mar 2024 11:30:31 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1709839831; cv=pass; d=google.com; s=arc-20160816; b=bqbGyQ+Y8vVwi5Dnsd91H2Tz67tMx1xaikK1X/8z1OdtPIBB4q13kUMCcbwo/Gm4PN Y3Ty3D/9wbhZKBB9t8Hi1PiFVD+WF8TYRKXpOK6PIzub+ngqnC7GRp3rkIG51B3HZQVh s6IaVd14DVLnlUDXl79twr/UdboO/HoR5QwmPsRfm5sXY+KgEB06GE6pOnr76lZ7rKAc Phbo5fa4RVh6CWumi/fv+0EXqru0mFbyn4q2ynJK/EYMvu6vwLNI+jIr0eFXt/BKwexO JiNX+L5qSeLaIUMF+nQMM7yXF/WeWfhLe3tiE5nxKlxAvgEs7nJLxLWDH0peOB5hJ2uf uG9A== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature:dkim-filter; bh=Z/EwTR6D35g92Wec7PEGA76AhuZqJRXnFKwyExQsYQM=; fh=JBH4xoAqU+QnblKa21BUCNwDoqYIhtDQiRUeFKc8nFo=; b=a+WfqPbRATwTghB+UgGmiK0xMijdy7NEani8PYqeyTcbqlL3l6cwmkFIdL5d9+LmTe xfDmIaCq2QrZEiBCCw0NGG/jCq4Z5ScDgFU98udMtu3p9/nlPUINAH1WWIfBXVbK50Mb Vr+xFFb7lsKbslOjxmBRg3JaxgphL7A50/ozab1anA5pUbNVJON3pLR4Y5SN4jJE8z2b +sao4x8LTP8yXbXiN4ewni3pduyDfM6zdNMuvxAx3I2l81eK+C02C+pKCpR+YQiVFAI5 Kvkrt+IDeJtuvjUHW0J/Ky2DAl5f66wR7VpO2yODLMj6x5y12u9xEiQO6AWUFbMQJr3a /EZw==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@candelatech.com header.s=default header.b=Lch9Qr2v; arc=pass (i=1 spf=pass spfdomain=candelatech.com dkim=pass dkdomain=candelatech.com dmarc=pass fromdomain=candelatech.com); spf=pass (google.com: domain of linux-wireless+bounces-4472-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) smtp.mailfrom="linux-wireless+bounces-4472-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=candelatech.com Return-Path: Received: from am.mirrors.kernel.org (am.mirrors.kernel.org. [2604:1380:4601:e00::3]) by mx.google.com with ESMTPS id b20-20020a170906709400b00a3e0e68b70csi6897816ejk.718.2024.03.07.11.30.31 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Mar 2024 11:30:31 -0800 (PST) Received-SPF: pass (google.com: domain of linux-wireless+bounces-4472-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) client-ip=2604:1380:4601:e00::3; Authentication-Results: mx.google.com; dkim=pass header.i=@candelatech.com header.s=default header.b=Lch9Qr2v; arc=pass (i=1 spf=pass spfdomain=candelatech.com dkim=pass dkdomain=candelatech.com dmarc=pass fromdomain=candelatech.com); spf=pass (google.com: domain of linux-wireless+bounces-4472-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) smtp.mailfrom="linux-wireless+bounces-4472-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=candelatech.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id E4F961F256CE for ; Thu, 7 Mar 2024 19:30:30 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 6CC8B1369B5; Thu, 7 Mar 2024 19:30:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=candelatech.com header.i=@candelatech.com header.b="Lch9Qr2v" X-Original-To: linux-wireless@vger.kernel.org Received: from dispatch1-us1.ppe-hosted.com (dispatch1-us1.ppe-hosted.com [67.231.154.183]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 921531369A5 for ; Thu, 7 Mar 2024 19:30:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=67.231.154.183 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709839809; cv=none; b=sgfxBLTQ86BhN9RDCBLWQd5aCnVKtQi3sCRV72M7bYLL/GNIXYr/pegXNZqyYBtA8yPZmABgyvwpvDJKmpBcEHQfndl5thR6qxXnJa+ek9vP41Xw63zVUHMkq+UojgrPip917sWsWlpjKNGkgufOeodK+jrDnRkVuKskyAViwZs= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709839809; c=relaxed/simple; bh=rz0UWo4M0Y/5XqRmFHUvTF57ACW4KzUMAQaLJ/wXVi4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Tdbnd+EqzqCDpEOphzXaJU3H5tim8NHeuMvDQFnQLIY+UHaD8QbtmT7jcDM1D9B58hQjtsBHCicg0oNgWkjtzTuG0f6tbb1Jk5YtGnXdgC1ieqKW0V9wVJApNuaIHgh6O88BdGEsFe0843DeVjTax6Zkvrfa+qTE+7sDN42Wqx8= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=candelatech.com; spf=pass smtp.mailfrom=candelatech.com; dkim=pass (1024-bit key) header.d=candelatech.com header.i=@candelatech.com header.b=Lch9Qr2v; arc=none smtp.client-ip=67.231.154.183 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=candelatech.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=candelatech.com Received: from dispatch1-us1.ppe-hosted.com (ip6-localhost [127.0.0.1]) by dispatch1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTP id B63CF503545 for ; Thu, 7 Mar 2024 19:30:06 +0000 (UTC) X-Virus-Scanned: Proofpoint Essentials engine Received: from mail3.candelatech.com (mail2.candelatech.com [208.74.158.173]) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTP id 67E318C006C for ; Thu, 7 Mar 2024 19:29:59 +0000 (UTC) Received: from ben-dt5.candelatech.com (unknown [50.251.239.81]) by mail3.candelatech.com (Postfix) with ESMTP id EEA5913C2B4; Thu, 7 Mar 2024 11:29:58 -0800 (PST) DKIM-Filter: OpenDKIM Filter v2.11.0 mail3.candelatech.com EEA5913C2B4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=candelatech.com; s=default; t=1709839799; bh=rz0UWo4M0Y/5XqRmFHUvTF57ACW4KzUMAQaLJ/wXVi4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Lch9Qr2vb0iXdHMdiJJHcBup2rVm7Y9yAK36RGCUcDnovjp0J8DiRUS9Gy+QWMLsY 4jpEoKMZJSmtUPGfMT2Z9VVDohWwoWGYTVS7fQzfnlm/bPdbkGzlqLNNd/AV5BpHrM 1uBq+64mdBKAoXRrcjbiHulvQeQ9St6BZYFsUNLU= From: greearb@candelatech.com To: linux-wireless@vger.kernel.org Cc: Ben Greear Subject: [PATCH 4/6] wifi: mt76: mt7915: Mitigate mcu communication loss. Date: Thu, 7 Mar 2024 11:29:49 -0800 Message-ID: <20240307192951.3271156-4-greearb@candelatech.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20240307192951.3271156-1-greearb@candelatech.com> References: <20240307192951.3271156-1-greearb@candelatech.com> Precedence: bulk X-Mailing-List: linux-wireless@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-MDID: 1709839800-eh3T4hxW4-xa X-MDID-O: us5;at1;1709839800;eh3T4hxW4-xa;;f7146c1849a4b08a52804beb1c1cdf45 From: Ben Greear Many calls that end up sending mcu messages to the firmware hold RTNL or other important locks. So when radio stops answering, the entire system becomes very sluggish. Add timeout counter, and if radio times out 3 times in a row, consider it dead and no longer attempt to talk to it. Signed-off-by: Ben Greear --- drivers/net/wireless/mediatek/mt76/dma.c | 14 ++++++++++++++ drivers/net/wireless/mediatek/mt76/mt76.h | 3 +++ drivers/net/wireless/mediatek/mt76/mt7915/mcu.c | 2 ++ 3 files changed, 19 insertions(+) diff --git a/drivers/net/wireless/mediatek/mt76/dma.c b/drivers/net/wireless/mediatek/mt76/dma.c index 00230f106294..4d1426093e1e 100644 --- a/drivers/net/wireless/mediatek/mt76/dma.c +++ b/drivers/net/wireless/mediatek/mt76/dma.c @@ -510,6 +510,20 @@ mt76_dma_tx_queue_skb_raw(struct mt76_dev *dev, struct mt76_queue *q, if (test_bit(MT76_MCU_RESET, &dev->phy.state)) goto error; + /* Check for non responsive radios. Better to just stop sending it messages + * than continuously block the OS (since rtnl and similar are often held while + * the timeout is happening). + */ + if (dev->mcu_timeouts > MAX_MCU_TIMEOUTS) { + static unsigned long last_log; + + if (time_after(jiffies, last_log + 5 * HZ)) { + last_log = jiffies; + mtk_dbg(dev, WRN, "mt76-dma-tx-queue-skb-raw, too many timeouts, msg is dropped.\n"); + } + goto error; + } + if (q->queued + 1 >= q->ndesc - 1) goto error; diff --git a/drivers/net/wireless/mediatek/mt76/mt76.h b/drivers/net/wireless/mediatek/mt76/mt76.h index dd8a24cda48a..b052a9c24c73 100644 --- a/drivers/net/wireless/mediatek/mt76/mt76.h +++ b/drivers/net/wireless/mediatek/mt76/mt76.h @@ -832,6 +832,9 @@ struct mt76_dev { struct mt76_mcu mcu; u32 first_failed_mcu_cmd; /* for debugging */ u32 last_successful_mcu_cmd; /* for debugging */ + u32 mcu_timeouts; /* sequential timeout counter */ + #define MAX_MCU_TIMEOUTS 3 + struct net_device napi_dev; struct net_device tx_napi_dev; diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c index c67c4f6ca2aa..f3e60fba48b2 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c +++ b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c @@ -161,11 +161,13 @@ mt7915_mcu_parse_response(struct mt76_dev *mdev, int cmd, int ret = 0; if (!skb) { + mdev->mcu_timeouts++; dev_err(mdev->dev, "Message %08x (seq %d) timeout\n", cmd, seq); return -ETIMEDOUT; } + mdev->mcu_timeouts = 0; rxd = (struct mt76_connac2_mcu_rxd *)skb->data; if (seq != rxd->seq && !(rxd->eid == MCU_CMD_EXT_CID && -- 2.42.0