From nobody Thu Oct 2 00:58:11 2025 Received: from fout-a7-smtp.messagingengine.com (fout-a7-smtp.messagingengine.com [103.168.172.150]) (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 3EB9C1F3BBB for ; Wed, 24 Sep 2025 12:42:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=103.168.172.150 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758717740; cv=none; b=CUfZBFjfu+LfDeLpN9qA+pC9FyjNtW4TVKqRidhpQWujXXXnsbau6zeVQo8OzYTKjuAlPszHQ6R0K8E4ACTw7T4QZmTwpK8zlgPq72DhctA7kDC/TNrFAsoREhAd8u9MuvGSzy7txMHkunnJIyBy4URRT++VRLPIybttH+ysHrI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758717740; c=relaxed/simple; bh=mqsGxS9Bc5rOalsZsBWArfAMRPvcdsFugBeK+zvT0U0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=fNGB/d3EqfDe5inyhLnu9766Hyu+++IYCZZxZvQ3J+DdP5AF1N/L/4WBH0zDzJ7p2rBlOZ1BFeU2Aj6wg0Inl+0ro6oRP5q8z3W/ODOaaUUWvwpJzSTKIw8M2C97qMHLtzh8HQrKkwPtBoHt5iQEApwwck3/OXdFft8ay08ce34= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=sakamocchi.jp; spf=pass smtp.mailfrom=sakamocchi.jp; dkim=pass (2048-bit key) header.d=sakamocchi.jp header.i=@sakamocchi.jp header.b=RoxrR8PD; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=HaMvDc+5; arc=none smtp.client-ip=103.168.172.150 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=sakamocchi.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=sakamocchi.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=sakamocchi.jp header.i=@sakamocchi.jp header.b="RoxrR8PD"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="HaMvDc+5" Received: from phl-compute-03.internal (phl-compute-03.internal [10.202.2.43]) by mailfout.phl.internal (Postfix) with ESMTP id 58A4CEC00D1; Wed, 24 Sep 2025 08:42:17 -0400 (EDT) Received: from phl-mailfrontend-01 ([10.202.2.162]) by phl-compute-03.internal (MEProxy); Wed, 24 Sep 2025 08:42:17 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sakamocchi.jp; h=cc:cc:content-transfer-encoding:content-type:date:date:from :from:in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to; s=fm1; t=1758717737; x= 1758804137; bh=tJZJL2f/Wgzff+5H3R1DLPBavYXVUM/ckHpNqpwJYA8=; b=R oxrR8PDaSB83rmiB7GdcNA+Jpj5WOY3TvtPgwqVxBCWq96bajLIEKiNdldVSNKBe 7pDhoibSnyUNNnvszJHK6hUPENbl/CW02RO2UDGiGzKdU4XIhY5++z12yVTGkAam F08fDanDAxcn16GygYXIB2Ex4GYOnXAdCKtVrO2hb1DXMQqTp6myso0yqdMjfhtF MksxVEAryvwwGtNSGHE935p3godPzCmPs/ZPnp9aTT4Kd6mHCCgg9OJQL7TjMMx/ hV5iQAiQkEX4Krn/y5YDxOPIY1e+ImROQ1dGsPqpIr64JBmUGYy4Plk2NQaLL4Tq HBThXRJuQxizHbC+XhKhA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:date:date:feedback-id:feedback-id:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to:x-me-proxy:x-me-sender :x-me-sender:x-sasl-enc; s=fm1; t=1758717737; x=1758804137; bh=t JZJL2f/Wgzff+5H3R1DLPBavYXVUM/ckHpNqpwJYA8=; b=HaMvDc+5R5bpxN4R1 TRVAzfH6c8OGcAeD9dBv2TcdTnzQhLKr0br3tRC4IuN1rEjwefcn8+WC1SX87pX2 h1cXd5DprMFOXXeBkKUyFreUdVNDWlGtsQnKN/R8/eAz0zNDHqnx/a+cDj8dXLSu PpFzOKIeUcBQ5ilF1deURrqNGrR3Wo6B3tq6jjJ0N8VbATzW80IFrg0YQrBgbVJv D8vtkmtupQfJJeieR67pU4Ow1yg7CtOym1caZTj0V+PTa/5Kc4RUngLzyP9FQb6B gOMLibN35fsFdL4kkIe92Dhr9kgEIK3Li0hSI3v6SyN7MC/HZrmu/wzxrhB+tHXP C70/w== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtdeggdeifeeigecutefuodetggdotefrod ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpuffrtefokffrpgfnqfghnecuuegr ihhlohhuthemuceftddtnecunecujfgurhephffvvefufffkofgjfhgggfestdekredtre dttdenucfhrhhomhepvfgrkhgrshhhihcuufgrkhgrmhhothhouceoohdqthgrkhgrshhh ihesshgrkhgrmhhotggthhhirdhjpheqnecuggftrfgrthhtvghrnhepvdejgfejuedvgf duudekleevtefgtdevhfdtffefiefgveeuteffiedvffekvddtnecuvehluhhsthgvrhfu ihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomhepohdqthgrkhgrshhhihesshgrkh grmhhotggthhhirdhjphdpnhgspghrtghpthhtohepvddpmhhouggvpehsmhhtphhouhht pdhrtghpthhtoheplhhinhhugidufeelgedquggvvhgvlheslhhishhtshdrshhouhhrtg gvfhhorhhgvgdrnhgvthdprhgtphhtthhopehlihhnuhigqdhkvghrnhgvlhesvhhgvghr rdhkvghrnhgvlhdrohhrgh X-ME-Proxy: Feedback-ID: ie8e14432:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Wed, 24 Sep 2025 08:42:16 -0400 (EDT) From: Takashi Sakamoto To: linux1394-devel@lists.sourceforge.net Cc: linux-kernel@vger.kernel.org Subject: [PATCH 1/2] Revert "firewire: core: shrink critical section of fw_card spinlock in bm_work" Date: Wed, 24 Sep 2025 21:42:11 +0900 Message-ID: <20250924124212.231080-2-o-takashi@sakamocchi.jp> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250924124212.231080-1-o-takashi@sakamocchi.jp> References: <20250924124212.231080-1-o-takashi@sakamocchi.jp> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" This reverts commit 582310376d6e9a8d261b682178713cdc4b251af6. The bus manager work has the race condition against fw_destroy_nodes() called by fw_core_remove_card(). The acquisition of spin lock of fw_card is left as is again. Signed-off-by: Takashi Sakamoto --- drivers/firewire/core-card.c | 38 ++++++++++++++++++++++++++++-------- 1 file changed, 30 insertions(+), 8 deletions(-) diff --git a/drivers/firewire/core-card.c b/drivers/firewire/core-card.c index 4a5459696093..e5e0174a0335 100644 --- a/drivers/firewire/core-card.c +++ b/drivers/firewire/core-card.c @@ -299,6 +299,7 @@ enum bm_contention_outcome { }; =20 static enum bm_contention_outcome contend_for_bm(struct fw_card *card) +__must_hold(&card->lock) { int generation =3D card->generation; int local_id =3D card->local_node->node_id; @@ -311,8 +312,11 @@ static enum bm_contention_outcome contend_for_bm(struc= t fw_card *card) bool keep_this_irm =3D false; struct fw_node *irm_node; struct fw_device *irm_device; + int irm_node_id; int rcode; =20 + lockdep_assert_held(&card->lock); + if (!grace) { if (!is_next_generation(generation, card->bm_generation) || card->bm_abd= icate) return BM_CONTENTION_OUTCOME_WITHIN_WINDOW; @@ -338,10 +342,16 @@ static enum bm_contention_outcome contend_for_bm(stru= ct fw_card *card) return BM_CONTENTION_OUTCOME_IRM_COMPLIES_1394_1995_ONLY; } =20 - rcode =3D fw_run_transaction(card, TCODE_LOCK_COMPARE_SWAP, irm_node->nod= e_id, generation, + irm_node_id =3D irm_node->node_id; + + spin_unlock_irq(&card->lock); + + rcode =3D fw_run_transaction(card, TCODE_LOCK_COMPARE_SWAP, irm_node_id, = generation, SCODE_100, CSR_REGISTER_BASE + CSR_BUS_MANAGER_ID, data, sizeof(data)); =20 + spin_lock_irq(&card->lock); + switch (rcode) { case RCODE_GENERATION: return BM_CONTENTION_OUTCOME_AT_NEW_GENERATION; @@ -352,12 +362,10 @@ static enum bm_contention_outcome contend_for_bm(stru= ct fw_card *card) int bm_id =3D be32_to_cpu(data[0]); =20 // Used by cdev layer for "struct fw_cdev_event_bus_reset". - scoped_guard(spinlock, &card->lock) { - if (bm_id !=3D BUS_MANAGER_ID_NOT_REGISTERED) - card->bm_node_id =3D 0xffc0 & bm_id; - else - card->bm_node_id =3D local_id; - } + if (bm_id !=3D BUS_MANAGER_ID_NOT_REGISTERED) + card->bm_node_id =3D 0xffc0 & bm_id; + else + card->bm_node_id =3D local_id; =20 if (bm_id !=3D BUS_MANAGER_ID_NOT_REGISTERED) return BM_CONTENTION_OUTCOME_IRM_HOLDS_ANOTHER_NODE_AS_BM; @@ -389,8 +397,12 @@ static void bm_work(struct work_struct *work) int expected_gap_count, generation; bool stand_for_root =3D false; =20 - if (card->local_node =3D=3D NULL) + spin_lock_irq(&card->lock); + + if (card->local_node =3D=3D NULL) { + spin_unlock_irq(&card->lock); return; + } =20 generation =3D card->generation; =20 @@ -405,6 +417,7 @@ static void bm_work(struct work_struct *work) =20 switch (result) { case BM_CONTENTION_OUTCOME_WITHIN_WINDOW: + spin_unlock_irq(&card->lock); fw_schedule_bm_work(card, msecs_to_jiffies(125)); return; case BM_CONTENTION_OUTCOME_IRM_HAS_LINK_OFF: @@ -415,10 +428,12 @@ static void bm_work(struct work_struct *work) break; case BM_CONTENTION_OUTCOME_AT_NEW_GENERATION: // BM work has been rescheduled. + spin_unlock_irq(&card->lock); return; case BM_CONTENTION_OUTCOME_LOCAL_PROBLEM_AT_TRANSACTION: // Let's try again later and hope that the local problem has gone away = by // then. + spin_unlock_irq(&card->lock); fw_schedule_bm_work(card, msecs_to_jiffies(125)); return; case BM_CONTENTION_OUTCOME_IRM_IS_NOT_CAPABLE_FOR_IRM: @@ -428,7 +443,9 @@ static void bm_work(struct work_struct *work) case BM_CONTENTION_OUTCOME_IRM_HOLDS_ANOTHER_NODE_AS_BM: if (local_id =3D=3D irm_id) { // Only acts as IRM. + spin_unlock_irq(&card->lock); allocate_broadcast_channel(card, generation); + spin_lock_irq(&card->lock); } fallthrough; case BM_CONTENTION_OUTCOME_IRM_HOLDS_LOCAL_NODE_AS_BM: @@ -469,6 +486,7 @@ static void bm_work(struct work_struct *work) if (!root_device_is_running) { // If we haven't probed this device yet, bail out now // and let's try again once that's done. + spin_unlock_irq(&card->lock); return; } else if (!root_device->cmc) { // Current root has an active link layer and we @@ -504,6 +522,8 @@ static void bm_work(struct work_struct *work) if (card->bm_retries++ < 5 && (card->gap_count !=3D expected_gap_count ||= new_root_id !=3D root_id)) { int card_gap_count =3D card->gap_count; =20 + spin_unlock_irq(&card->lock); + fw_notice(card, "phy config: new root=3D%x, gap_count=3D%d\n", new_root_id, expected_gap_count); fw_send_phy_config(card, new_root_id, generation, expected_gap_count); @@ -524,6 +544,8 @@ static void bm_work(struct work_struct *work) } else { struct fw_device *root_device =3D fw_node_get_device(root_node); =20 + spin_unlock_irq(&card->lock); + if (root_device && root_device->cmc) { // Make sure that the cycle master sends cycle start packets. __be32 data =3D cpu_to_be32(CSR_STATE_BIT_CMSTR); --=20 2.48.1 From nobody Thu Oct 2 00:58:11 2025 Received: from fout-a7-smtp.messagingengine.com (fout-a7-smtp.messagingengine.com [103.168.172.150]) (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 95D0F302CAA for ; Wed, 24 Sep 2025 12:42:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=103.168.172.150 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758717741; cv=none; b=dqr37dH/vCugcOwwCLkmv8MVowBgEfIOgBBCzSJLb77EoQkaNlIGDmyJ6aZlqKx4AP34k/4HLUh64GZH8c5b55vzQYtA+emV+x9FxahhSZegSo9whQ4cSKAXEfU9IxFx7gjRImEVb1A4Wwky4ritDiCDtjdbT5fNv/SzlBkqRt4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758717741; c=relaxed/simple; bh=2dLPJQsAZ06T7HQwEZ5nIr10frY3csj5jrZWxA5UH5E=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=k5fTdqaLWYdG3mTR6nzH/zNoMBgfMIVN+XgZOdCJLG4gu2q7zrpukchKJbSRF34uN9B3aQEWd/qsofDGgQae0I8rhIvk0X87oMHCfPBW/TXx4kaqEYnCsMkaW2oNCnZW2yicytJLkuUtBC/VjRyyBB98HQQ4Wea3WUfG83juk5M= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=sakamocchi.jp; spf=pass smtp.mailfrom=sakamocchi.jp; dkim=pass (2048-bit key) header.d=sakamocchi.jp header.i=@sakamocchi.jp header.b=AgJ44/lN; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=Y5YS8ZOy; arc=none smtp.client-ip=103.168.172.150 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=sakamocchi.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=sakamocchi.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=sakamocchi.jp header.i=@sakamocchi.jp header.b="AgJ44/lN"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="Y5YS8ZOy" Received: from phl-compute-03.internal (phl-compute-03.internal [10.202.2.43]) by mailfout.phl.internal (Postfix) with ESMTP id 932CEEC00C5; Wed, 24 Sep 2025 08:42:18 -0400 (EDT) Received: from phl-mailfrontend-01 ([10.202.2.162]) by phl-compute-03.internal (MEProxy); Wed, 24 Sep 2025 08:42:18 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sakamocchi.jp; h=cc:cc:content-transfer-encoding:content-type:date:date:from :from:in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to; s=fm1; t=1758717738; x= 1758804138; bh=YZTE+1HoIfy758ZocvG1+0WaCqinIXSMBBaXpX5YQGs=; b=A gJ44/lNxqEoTfG7Q427T97GekBFqFmkRhZYz7tGIOOJdb3N3fFg6R08UGF7gT0eB Wtp6OdUA2/SKfXUgPDhnPm6Q+iSjTWvzL5PRTNfBXvpDcflt9cvCRhHBydNpwXog gtRMKV5ZdLkTToysgzW99J1TJoKXYjEhyX1if42KVWInfEVQ0n+YeBfbYBJIEkRC 13HrKB3Isn+q+seoyCWWFA4WFnFJbzAowwCnzi6kv1UPuK995Dz0QpN7zAzt6KBQ ZfORzmbrDORAJrgRbu48AXhhMFBB5PdVhRJ8+S96bkKc6v9JwzPdJxdIGzncZ0pl 10uylcnHX1IGyfCt9lA+Q== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:date:date:feedback-id:feedback-id:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to:x-me-proxy:x-me-sender :x-me-sender:x-sasl-enc; s=fm1; t=1758717738; x=1758804138; bh=Y ZTE+1HoIfy758ZocvG1+0WaCqinIXSMBBaXpX5YQGs=; b=Y5YS8ZOyLfisl9D7N rtupkpOEOfR/opLOikqAs3QrQvDh+iS8b4HxIOlIhVFxRvGtb2ktdEXaLkphZEP0 uEIuvEBc7lkmoYA4bx3tB9cLQktHOT/GqRtoItY2/ZcLFfttYH1xskfVj8iDhb/Q pFQJHBRzyYJ8qAyiavtCPmcc5hE9iKaZtAhqsZsmkqoon/6AikxGkZRhL76sRz4C 3UBzWvxChoQMB+3MDw5O5gKcwso6069euliXnalnzjt/aD8PqG2ESTpush8/GcOQ iN76D5sgVzHpc37pONWpvh8XBRdknupHyOADBw7+K3wSB9HfI4w8V5ErvfmoA8iy OsMsQ== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtdeggdeifeeigecutefuodetggdotefrod ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpuffrtefokffrpgfnqfghnecuuegr ihhlohhuthemuceftddtnecunecujfgurhephffvvefufffkofgjfhgggfestdekredtre dttdenucfhrhhomhepvfgrkhgrshhhihcuufgrkhgrmhhothhouceoohdqthgrkhgrshhh ihesshgrkhgrmhhotggthhhirdhjpheqnecuggftrfgrthhtvghrnhepvdejgfejuedvgf duudekleevtefgtdevhfdtffefiefgveeuteffiedvffekvddtnecuvehluhhsthgvrhfu ihiivgepudenucfrrghrrghmpehmrghilhhfrhhomhepohdqthgrkhgrshhhihesshgrkh grmhhotggthhhirdhjphdpnhgspghrtghpthhtohepvddpmhhouggvpehsmhhtphhouhht pdhrtghpthhtoheplhhinhhugidufeelgedquggvvhgvlheslhhishhtshdrshhouhhrtg gvfhhorhhgvgdrnhgvthdprhgtphhtthhopehlihhnuhigqdhkvghrnhgvlhesvhhgvghr rdhkvghrnhgvlhdrohhrgh X-ME-Proxy: Feedback-ID: ie8e14432:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Wed, 24 Sep 2025 08:42:17 -0400 (EDT) From: Takashi Sakamoto To: linux1394-devel@lists.sourceforge.net Cc: linux-kernel@vger.kernel.org Subject: [PATCH 2/2] Revert "firewire: core: disable bus management work temporarily during updating topology" Date: Wed, 24 Sep 2025 21:42:12 +0900 Message-ID: <20250924124212.231080-3-o-takashi@sakamocchi.jp> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250924124212.231080-1-o-takashi@sakamocchi.jp> References: <20250924124212.231080-1-o-takashi@sakamocchi.jp> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" This reverts commit abe7159125702c734e851bc0c52b51cd446298a5. The bus manager work item acquires the spin lock of fw_card again, thus no need to serialize it against fw_core_handle_bus_reset(). Signed-off-by: Takashi Sakamoto --- drivers/firewire/core-topology.c | 8 -------- 1 file changed, 8 deletions(-) diff --git a/drivers/firewire/core-topology.c b/drivers/firewire/core-topol= ogy.c index 90b988035a2a..2f73bcd5696f 100644 --- a/drivers/firewire/core-topology.c +++ b/drivers/firewire/core-topology.c @@ -460,14 +460,8 @@ void fw_core_handle_bus_reset(struct fw_card *card, in= t node_id, int generation, { struct fw_node *local_node; =20 - might_sleep(); - trace_bus_reset_handle(card->index, generation, node_id, bm_abdicate, sel= f_ids, self_id_count); =20 - // Disable bus management work during updating the cache of bus topology,= since the work - // accesses to some members of fw_card. - disable_delayed_work_sync(&card->bm_work); - scoped_guard(spinlock, &card->lock) { // If the selfID buffer is not the immediate successor of the // previously processed one, we cannot reliably compare the @@ -501,8 +495,6 @@ void fw_core_handle_bus_reset(struct fw_card *card, int= node_id, int generation, } } =20 - enable_delayed_work(&card->bm_work); - fw_schedule_bm_work(card, 0); =20 // Just used by transaction layer. --=20 2.48.1