From nobody Thu Oct 2 00:54:12 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 422DD2E613C for ; Wed, 24 Sep 2025 13:18:29 +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=1758719912; cv=none; b=otWRhWnzY/F3DaBXuOPIeEi41rQ1KQhGE9TFHIakKH2kRXRZKOdI5ERUNmxfFok0d6jfNFCbeD/hYq4tC2dzHBgW7TfFEtR1Le0j7iUb1NbeELWA82Q61gJ6xxe2CbMUKAZ4vNV0XkauC281Hvf4sP6XStACnAqB1B9HS/2FPiE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758719912; c=relaxed/simple; bh=olmXmDBxtLIFnmU2LjzKk7iKer4QA63qtGIrHhE3rpA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=aOGbwgiVJLwR7jr1b8oO7IYLo8rdXE3O3gV6luQpIhzwGXSfbVrZFWZRCu3JGefOHh+XTEnV9KCcUcZN5NUHCU4B4zXmDOjvzfmG+UBdP82bEhN3ezeD3ETFd0Fb4VQlZS5JqFiBBgwnWLN0L8PHb4Ar+uPAtDlFOXi+ZFtVZC4= 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=GBi2dQtW; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=mb9kwKPl; 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="GBi2dQtW"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="mb9kwKPl" Received: from phl-compute-03.internal (phl-compute-03.internal [10.202.2.43]) by mailfout.phl.internal (Postfix) with ESMTP id 6B057EC018E; Wed, 24 Sep 2025 09:18:28 -0400 (EDT) Received: from phl-mailfrontend-02 ([10.202.2.163]) by phl-compute-03.internal (MEProxy); Wed, 24 Sep 2025 09:18:28 -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=1758719908; x= 1758806308; bh=yztnsZNz/Ql9CaSufGVYpt4NZipaq0Pnwdmnfv9ujsM=; b=G Bi2dQtWdwuAP9x1fmcj4ISgUIj+7jaM+yDl92s0OKXyZrSWTZ0NchodA+T+pUO2k gpAFaUmmpJ0l9sFULVeikt3+3AJsch19X6BnivBpy1AUP9Zo/prDvtJ8Sj7yP4p7 I2Fw7v0xAgFOVHlDzk+iCdQxmjXzDthokiBQcLzaPV0YZOKufa+Jgywa7iv5/6x0 nYTUVNxyvQwgpII3NOZLd6u4+wu9JU5dqAreqiHMhcYtsS8VOIfk3rnie/01U3PJ uIuOcquFWgk511xIg83bUZEVDyv56dIJlYT7KZGUNe4FpmoZ4uh2sdowvilSzVaq puZa5ESmOO8aoMFVeDIGA== 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=1758719908; x=1758806308; bh=y ztnsZNz/Ql9CaSufGVYpt4NZipaq0Pnwdmnfv9ujsM=; b=mb9kwKPlht1HIuZ6g VIXXxf2leaIMfW/vZvWlW8KjHoGnhcl5Nkq1OKc2Tt28lhbBqQMvhPR9+v+Vz+cD +roZpe/8KrxMQ9Z1Zc4DLvuIwSvBrcoWbMwXxLbYrUYG8mYZBRSszmYlnS/nS+Jp uTRxK5R2sEfGz45AE2cPPEqg67gtdVRWWkaZd+7ZYzDogaCzi0PyXgy0vqwqUDo7 uaYoAramyD8pqI/n7JeDVJxtBlIlmKK15fWyhdgjzT8+Zq7KZzJkEG+/mfDyXMYu hVatCLk78r23jRN3K7mXuA0OmhiLMn+Zpzja36RskJFDUm5a1iGobDNRpVxuSjDW MfBAw== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtdeggdeifeejudcutefuodetggdotefrod 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 09:18:27 -0400 (EDT) From: Takashi Sakamoto To: linux1394-devel@lists.sourceforge.net Cc: linux-kernel@vger.kernel.org Subject: [PATCH v2 1/2] Revert "firewire: core: shrink critical section of fw_card spinlock in bm_work" Date: Wed, 24 Sep 2025 22:18:22 +0900 Message-ID: <20250924131823.262136-2-o-takashi@sakamocchi.jp> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250924131823.262136-1-o-takashi@sakamocchi.jp> References: <20250924131823.262136-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 acquition 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:54:12 2025 Received: from fhigh-a5-smtp.messagingengine.com (fhigh-a5-smtp.messagingengine.com [103.168.172.156]) (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 AA7482FFDE4 for ; Wed, 24 Sep 2025 13:18:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=103.168.172.156 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758719912; cv=none; b=SFnRpoFH7ooM/XNMiJzFzWwb+mXnTVbTgkG5LY4tBR9RGU44UmLQqJG/n5i9rdIfBWfhqI31pd8zvk8/bKi0zuweTb4Ns4vOuqcLhzBRvR1dilntGqY4bqfroyvqZEb72r0PVabwFQDR3eIig9UxjmGMwBuzlgJha0JYjPluSAU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758719912; c=relaxed/simple; bh=2dLPJQsAZ06T7HQwEZ5nIr10frY3csj5jrZWxA5UH5E=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=tagtdcqIIDHljYz6bMkpOoZItLWj/HDexJCA8InrDkZ0KkafR/llZKmCuDRfZ7Zx95gFFPhnCstUsbDc28iWxEbJU+qE4ZqEGFKhwte1AdJyVBGB7rkAHrbSRTPdJPr3UJfNnaWAqfMy/ikVsJuLSg8r8pmHKaUwFgXZRyxpOE0= 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=VpdKojZM; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=FU5wBtC4; arc=none smtp.client-ip=103.168.172.156 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="VpdKojZM"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="FU5wBtC4" Received: from phl-compute-04.internal (phl-compute-04.internal [10.202.2.44]) by mailfhigh.phl.internal (Postfix) with ESMTP id CC7C9140013C; Wed, 24 Sep 2025 09:18:29 -0400 (EDT) Received: from phl-mailfrontend-02 ([10.202.2.163]) by phl-compute-04.internal (MEProxy); Wed, 24 Sep 2025 09:18:29 -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=1758719909; x= 1758806309; bh=YZTE+1HoIfy758ZocvG1+0WaCqinIXSMBBaXpX5YQGs=; b=V pdKojZM5CyqIwc1iAHP7az1rOh3s0Gw91sk7BkBtU8bHP35Jg31h2aFpAwzcSfcR 3rlmmC1GalJOuyabRN3VDc402PyuoSjW79ugVEvKImfmybKCIJN7xY6tvw5W7N6P SW3WZTh/2LEtvwOgjzCEAKJvA09SNb55D32+197AuIzJ785ZDB1ivv77oLsDl991 MT0/Y6OOD36xyMNehz1lOB+mSXmUWaEqhEWMQnionGde/yINLj0blpxKAyD4C1rI aO99TRJanEJcJ+fCqifYHvkb5p9k1FA1IISuVshuFXhKIMy02bso7/rM+wbZeqf7 9CoO+2nkL/D3neZj3nW5g== 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=1758719909; x=1758806309; bh=Y ZTE+1HoIfy758ZocvG1+0WaCqinIXSMBBaXpX5YQGs=; b=FU5wBtC48d0SlKa0E Y+DYx7p7FXxJGnvBFhAu73+RMwXIzR5kRyf4jmHGwSPexFSk7Y8jH8TX5zh8wwzM r1fJL4dgIvlMkA/RjUOaWCvXIwzbU7SNCSn1rMewTHNoojunBEvQi8s/e6LKSKZ/ yiYjw3hNbvP0EfuvHbULfem7LkxHjkXG/xbh84PG+f6XjcBE63GpsSJpW2nnSuOU 4Ht1KFmEqLlWzLfjPpEK3ReAqO1AODqKF1Uh7yXL7MXbCrE91Ht+hJooed+7BqtR 7p+VRkU5C2lZobKHPwguEvBbT4VKd0dxOckrWu4fWGelRpOmq8EoQxaiVpcTav+e NAY0w== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtdeggdeifeejudcutefuodetggdotefrod 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 09:18:28 -0400 (EDT) From: Takashi Sakamoto To: linux1394-devel@lists.sourceforge.net Cc: linux-kernel@vger.kernel.org Subject: [PATCH v2 2/2] Revert "firewire: core: disable bus management work temporarily during updating topology" Date: Wed, 24 Sep 2025 22:18:23 +0900 Message-ID: <20250924131823.262136-3-o-takashi@sakamocchi.jp> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250924131823.262136-1-o-takashi@sakamocchi.jp> References: <20250924131823.262136-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