Received: by 2002:ab2:6857:0:b0:1ef:ffd0:ce49 with SMTP id l23csp2682619lqp; Mon, 25 Mar 2024 06:35:05 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCWJSpQoBV2iDe8ZvQZKZntChCWUSSNOUZih8d8z5RiREWtkD7nnIUICQlV6fcgsaw6V2SxtuwvS4oUtu4l3isRsIVJX65woml2y9DdQcg== X-Google-Smtp-Source: AGHT+IFvIJ+V2L6yeeXOfG1iKzg+UkJzD+jJMIsviU28rccq6OjpzhcC7qdtUpR/w8pKh8SEKlXE X-Received: by 2002:a05:6871:3426:b0:22a:5423:45ff with SMTP id nh38-20020a056871342600b0022a542345ffmr823491oac.40.1711373705517; Mon, 25 Mar 2024 06:35:05 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1711373705; cv=pass; d=google.com; s=arc-20160816; b=heag1cmDBTb6j6E0RnLavssTyu+jhHo9X2unwXAPgNSZGe9CmXuRSmAkkRlQL2mD0e I4pRyuQtpJFv8EKhIrhmkx3iYnlJKbMk0QP2gbVstFm7iZ3gik6YHvJtNJnxhAcdGNfT 8F15rCC1xEwg+hBZeGs25mtpg2C9cBMOwiWOdbvBZ51n1nFmX8pXn7A6RgO27EupYezA 17OGYAE2x7jfVwzIvDKINSmKELiZYvrJpL2skUBOj9faWFbQRxv2Jdi5smzjFQc7ebej m5xt/rd4P/4ISnUeanpt3z+qUdzCLFu/n82+MhX41bO8hJcxnxU1TKorDZGU0a+fx/UN r+fA== 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; bh=3kuWEx7RbAaObUWbq+kmhvXylilB92M2KfkEbwjNqxE=; fh=FUJ31+7wm/lsAjQLPGsshg0GwF/LrZd9HYdeGt+rGY8=; b=O6ifDzm44qE9NKtBBOxlc1meVMLncfzMo4E9u5nOxlib3PXAQ6IlkQ527MgHjy7qnY PnBHVQWnogsq+/GTBvcLkjN5JOVV8jw0wVBUolKVPgIEYct2EjQzgyMowZq/PVHQ6O9H Woy4y/z/3qt5whR/vpcmdH/vGcJatRa+jY6Rm7A7A/WPIazqiY83KCTex/ba4+k30MnF CbZ9W75ZaOwq5fOomZKLXm3wBicjtnQNzlG+r5zNTKuqBTYb70bF0ZMdQjBPmxOx+QWM hR9iYKyaay+j8+qnDMibF6Ja5Z3C9+69gUzKbRcXixdnYnXkoQr3rt7otN8OUJFs5Wx1 XawA==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=eSWFcCfD; arc=pass (i=1 dkim=pass dkdomain=kernel.org); spf=pass (google.com: domain of linux-kernel+bounces-116310-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.48.161 as permitted sender) smtp.mailfrom="linux-kernel+bounces-116310-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org. [147.75.48.161]) by mx.google.com with ESMTPS id bn1-20020a056a02030100b005e42b4c97f2si4415779pgb.289.2024.03.25.06.35.04 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 25 Mar 2024 06:35:05 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-116310-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.48.161 as permitted sender) client-ip=147.75.48.161; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=eSWFcCfD; arc=pass (i=1 dkim=pass dkdomain=kernel.org); spf=pass (google.com: domain of linux-kernel+bounces-116310-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.48.161 as permitted sender) smtp.mailfrom="linux-kernel+bounces-116310-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org 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 sy.mirrors.kernel.org (Postfix) with ESMTPS id 1F95EB3CE2C for ; Mon, 25 Mar 2024 12:03:11 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 43A223D1630; Mon, 25 Mar 2024 03:39:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="eSWFcCfD" 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 AFED81836E2; Sun, 24 Mar 2024 23:50:25 +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=1711324225; cv=none; b=GfBoURjzNn5E2dhtsHHv2pCAjtPBRK3dyfr+DPxee7FCXSDhUjzt3bYvtmxCpVhA/LWtrdgVYIme+jtgWvppSeOPXbcggc+nwnSdXeGkRr0V8F3D6IUciqRFzPgIYhdXMQF7fBisOWF98D/tbY1mQUEnCdyeuH6rGPlYQAFU0TI= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711324225; c=relaxed/simple; bh=kXACYfDvNXWJZ25333pEuC5/kN5XG42wdVPy74Tagjk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=rorfKXsR34Dmfea03qdyGecbcDlRhwcnJzSYG7m6LkIv8odfbkko1na8ltx1MP9HcbuLcejH4+6ssPskCW5uQv/iKLDDyGyvBnFrY58zsMX5ZaoKg/odFFcpkTEVsV+NGI1Q12ZPs2MKPnqC00F8WB3eJ0wiI8BCtHdx4MKXlps= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=eSWFcCfD; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id E0245C433F1; Sun, 24 Mar 2024 23:50:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1711324225; bh=kXACYfDvNXWJZ25333pEuC5/kN5XG42wdVPy74Tagjk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=eSWFcCfDf3bKEQJ3iIXarHSBXTtAndjU/unFTz2roxrV2TeGAQ2VjrjRQRYRKV/I2 fz9Fskyo/bRQ/ajUJLrYQq79juV1yvzafWL5glyb/T8vTqmgqmiIQWbOYmEHGBECxF Ri0ztMBGsIdrsSUz+EmF659TAc2crQ3d9Kogqr5Yg5Uld2AhvP8aQOlXB//1z4V+dC cx1OrMxWOJOQcNGpuZ9ocqbbKM/29CwPcSXb/HWEHijBX6/oB9BTXJv2zuVsxQX45G gDt02/0t1L+qHXJqwdtMmi1HRzQVBQ1cU5Kt904mT6g+QtLLrtFL1EGRsfvbqrc8PQ BV0yNAxKCsqJQ== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Takashi Sakamoto , Adam Goldman , Sasha Levin Subject: [PATCH 4.19 009/148] firewire: core: use long bus reset on gap count error Date: Sun, 24 Mar 2024 19:47:53 -0400 Message-ID: <20240324235012.1356413-10-sashal@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240324235012.1356413-1-sashal@kernel.org> References: <20240324235012.1356413-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit From: Takashi Sakamoto [ Upstream commit d0b06dc48fb15902d7da09c5c0861e7f042a9381 ] When resetting the bus after a gap count error, use a long rather than short bus reset. IEEE 1394-1995 uses only long bus resets. IEEE 1394a adds the option of short bus resets. When video or audio transmission is in progress and a device is hot-plugged elsewhere on the bus, the resulting bus reset can cause video frame drops or audio dropouts. Short bus resets reduce or eliminate this problem. Accordingly, short bus resets are almost always preferred. However, on a mixed 1394/1394a bus, a short bus reset can trigger an immediate additional bus reset. This double bus reset can be interpreted differently by different nodes on the bus, resulting in an inconsistent gap count after the bus reset. An inconsistent gap count will cause another bus reset, leading to a neverending bus reset loop. This only happens for some bus topologies, not for all mixed 1394/1394a buses. By instead sending a long bus reset after a gap count inconsistency, we avoid the doubled bus reset, restoring the bus to normal operation. Signed-off-by: Adam Goldman Link: https://sourceforge.net/p/linux1394/mailman/message/58741624/ Signed-off-by: Takashi Sakamoto Signed-off-by: Sasha Levin --- drivers/firewire/core-card.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/drivers/firewire/core-card.c b/drivers/firewire/core-card.c index 0e6f96c0e3957..6c464c75ac9d5 100644 --- a/drivers/firewire/core-card.c +++ b/drivers/firewire/core-card.c @@ -513,7 +513,19 @@ static void bm_work(struct work_struct *work) fw_notice(card, "phy config: new root=%x, gap_count=%d\n", new_root_id, gap_count); fw_send_phy_config(card, new_root_id, generation, gap_count); - reset_bus(card, true); + /* + * Where possible, use a short bus reset to minimize + * disruption to isochronous transfers. But in the event + * of a gap count inconsistency, use a long bus reset. + * + * As noted in 1394a 8.4.6.2, nodes on a mixed 1394/1394a bus + * may set different gap counts after a bus reset. On a mixed + * 1394/1394a bus, a short bus reset can get doubled. Some + * nodes may treat the double reset as one bus reset and others + * may treat it as two, causing a gap count inconsistency + * again. Using a long bus reset prevents this. + */ + reset_bus(card, card->gap_count != 0); /* Will allocate broadcast channel after the reset. */ goto out; } -- 2.43.0