From nobody Thu Sep 24 20:37:49 2026 Received: from fout-a1-smtp.messagingengine.com (fout-a1-smtp.messagingengine.com [103.168.172.144]) (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 E1952265CA8 for ; Mon, 21 Sep 2026 03:19:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=103.168.172.144 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789960778; cv=none; b=NVM6GMmFixlNEZSIsUyB2nJMOha3TACYYVfKweYJJuYn29BicPRj9YFNNUtr3y3RlyqhZNOZKFe+LXM+5HgSyKthoMQCL0T1fqmGd2p6chizG+d9sniIXlq0eVU+Rm6U+kMrreynVySNtg9ReYeVxrMaZYtC4LrAb+TTxK/gK3A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789960778; c=relaxed/simple; bh=xGsAlX5xyIs2CCtLkoHwZNMrnNBjd26PvhmxMLqj+hs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ado1c4VMMNJRAFCHy5CVCDvKiZqglsslqSwfZupSl4JQKqMCY2vEHI76XPtljUfFpXG3+vZ4UBi/5ppgB72+Jv+Pqw7ZR5CH7vw75BKnGFtgwj82iIW47NpRclOxBxanoQMCtkzICGmxVo9kWqSEo/ZjZk/dArJkVDosV0faPkA= 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=OfkN0Up+; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=PUe0A7/8; arc=none smtp.client-ip=103.168.172.144 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="OfkN0Up+"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="PUe0A7/8" Received: from phl-compute-03.internal (phl-compute-03.internal [10.202.2.43]) by mailfout.phl.internal (Postfix) with ESMTP id 2A2B0EC009B; Sun, 20 Sep 2026 23:19:36 -0400 (EDT) Received: from phl-frontend-04 ([10.202.2.163]) by phl-compute-03.internal (MEProxy); Sun, 20 Sep 2026 23:19:36 -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=1789960776; x= 1790047176; bh=zEF/dL+4Ow9v/upWemaVlCMlXJSOnPgWuRLUK9/MEyo=; b=O fkN0Up+rk2WJmVU4Y2Xg6dsD5i2sZCE85c2oMglrWKxuIk3DK5HoDzdW3NFGJDZI tQFRvLs2Gdol0YHMVP94MkgmEHmyeqLU59xT3kaqg4tvUlHSCI+yogz+3cL9zV+K +Tzb6vyFivTmCItlGmRYMAoJ2hNivC84Y7pbbFfxX1eNiGghgypLGC13HsENwv7f YSPBgObRMwsylFqoPKF3wwRhlzighPjC6bD7j9Dv3lhaRdqfjkEuqmKl3Lw0bbI9 7XvRBh2m7e+R/DdBO895psyV0H1ThMtnCfz/hHauvv7ioV1k41MKlLo9lKIIDAr6 G2ovDBYuCpO396nAsBbiw== 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=1789960776; x=1790047176; bh=z EF/dL+4Ow9v/upWemaVlCMlXJSOnPgWuRLUK9/MEyo=; b=PUe0A7/8/DsFzbIBT +s3YIYOXwbIGaffmqxefJ7MQuuhbxtIQrIwbTuUthBCFm/KkOSaDvGVDSVnuA0Cp oXdDFGNLrw8L3KmvL6Kk4QQpXouhBVn3HljFqxXu7YFKinZPb7S/C7vv12iUIBAV r+X49mfFKoMBNza096bxU+AZlmxtzuAGM7EGf+57G8xygxCMinpqdJ2OnwHfmF7g GTQYc965c9sYjDNV2WmlC8+Nz3Dkp/pbhgfGLz/vkY2L94wW2BORaXbGp5bVuhGF cuUoELvMr623ADwZOT8f2AG3MxLHPG6bri+Wsq+M2tv/uJwjtF6Z/OnS2PlQ0uoT wZw1g== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: dmFkZTG4HxcRk5U6N4ypSfJUTdx+6umR7TSQ4g44xSCYOl+LSsOjyHLREsxOw5gpDWjGze ssZLXb8NQxBJAfAUzYHAbyvWaRwsq40mDR3QglpIIDOh4aDtOIlzcZNB62z4mDymKjq8jd UAw+qD5Fd6CAYTpex4syY5GNMZvis2cXIcCo2nhBw5bybLWSYdtPnUCp36inipJE76ak20 d1oH1q9KObfdYrwOh4VrMfNbrg6I9B2GUYo2Bcgfzs4yTgdISuPHc8sFeR8xscqwDa+lNM zTDlL6JavrPbKQ8tH66oqgOWzXA9BieBgfS/eaXHh+GlACm+XjjsELkq75QnzOipCwA3Zo oMq+z2FbW8G29wzBeQzpbzYufj35G3lw5qfW/koDyMKbUP/vmmk9Js/89fUAspXthZ4hX7 m+ERkHS18c3td5FSLpqRfryQB768sP738KQT9abQ5C1MJN+sLT9z74W5L4CWdkXXScmBSi ZxFPl3E9LuQ/BrlxBEAoeDgXQndzeJmFaDOUfQECkB6ttLWMs3hPOUofdP2O1dKDvDAxI9 wCHm3ob+e2E81dI5Z0xfygcaDH6WMzJFr8ue1MnLQzNDWP2EHinM9RgCjCq/nps5djDIkH 4wuiQYaWR+D1PgXx8nMwFu+OQm9hSLZGfdPi13ArDvEh3dgPVNyGJ1CMbcjA X-ME-Proxy: Feedback-ID: ie8e14432:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Sun, 20 Sep 2026 23:19:35 -0400 (EDT) From: Takashi Sakamoto To: linux1394-devel@lists.sourceforge.net Cc: linux-kernel@vger.kernel.org Subject: [PATCH 1/3] firewire: core: refactor invoking transaction callback Date: Mon, 21 Sep 2026 12:19:29 +0900 Message-ID: <20260921031931.287429-2-o-takashi@sakamocchi.jp> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260921031931.287429-1-o-takashi@sakamocchi.jp> References: <20260921031931.287429-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" Two types of transaction callbacks are defined. There are many places where the transaction callback is invoked with conditional branches. Add a helper function to simplify invoking the callback. Signed-off-by: Takashi Sakamoto --- drivers/firewire/core-transaction.c | 69 ++++++++++++----------------- 1 file changed, 28 insertions(+), 41 deletions(-) diff --git a/drivers/firewire/core-transaction.c b/drivers/firewire/core-tr= ansaction.c index a2a8d755ad0a..0cad55763a3e 100644 --- a/drivers/firewire/core-transaction.c +++ b/drivers/firewire/core-transaction.c @@ -52,6 +52,17 @@ static void remove_transaction_entry(struct fw_card *car= d, struct fw_transaction card->transactions.tlabel_mask &=3D ~(1ULL << entry->tlabel); } =20 +static void invoke_callback(struct fw_transaction *t, int rcode, u32 respo= nse_tstamp, void *data, + size_t data_length) +{ + if (!t->with_tstamp) { + t->callback.without_tstamp(t->card, rcode, data, data_length, t->callbac= k_data); + } else { + t->callback.with_tstamp(t->card, rcode, t->packet.timestamp, response_ts= tamp, + data, data_length, t->callback_data); + } +} + // Must be called without holding card->transactions.lock. void fw_cancel_pending_transactions(struct fw_card *card) { @@ -69,14 +80,7 @@ void fw_cancel_pending_transactions(struct fw_card *card) =20 list_for_each_entry_safe(t, tmp, &pending_list, link) { list_del(&t->link); - - if (!t->with_tstamp) { - t->callback.without_tstamp(card, RCODE_CANCELLED, NULL, 0, - t->callback_data); - } else { - t->callback.with_tstamp(card, RCODE_CANCELLED, t->packet.timestamp, 0, - NULL, 0, t->callback_data); - } + invoke_callback(t, RCODE_CANCELLED, 0, NULL, 0); } } =20 @@ -108,12 +112,7 @@ static int close_transaction(struct fw_transaction *tr= ansaction, struct fw_card return -ENOENT; } =20 - if (!t->with_tstamp) { - t->callback.without_tstamp(card, rcode, NULL, 0, t->callback_data); - } else { - t->callback.with_tstamp(card, rcode, t->packet.timestamp, response_tstam= p, NULL, 0, - t->callback_data); - } + invoke_callback(t, rcode, response_tstamp, NULL, 0); =20 return 0; } @@ -166,12 +165,7 @@ static void split_transaction_timeout_callback(struct = timer_list *timer) remove_transaction_entry(card, t); } =20 - if (!t->with_tstamp) { - t->callback.without_tstamp(card, RCODE_CANCELLED, NULL, 0, t->callback_d= ata); - } else { - t->callback.with_tstamp(card, RCODE_CANCELLED, t->packet.timestamp, - t->split_timeout_cycle, NULL, 0, t->callback_data); - } + invoke_callback(t, RCODE_CANCELLED, t->split_timeout_cycle, NULL, 0); } =20 // card->transactions.lock should be acquired in advance for the linked li= st. @@ -385,6 +379,11 @@ void __fw_send_request(struct fw_card *card, struct fw= _transaction *t, int tcode { int tlabel; =20 + t->card =3D card; + t->callback =3D callback; + t->with_tstamp =3D with_tstamp; + t->callback_data =3D callback_data; + /* * Allocate tlabel from the bitmap and put the transaction on * the list while holding the card spinlock. @@ -395,30 +394,23 @@ void __fw_send_request(struct fw_card *card, struct f= w_transaction *t, int tcode scoped_guard(spinlock_irqsave, &card->transactions.lock) tlabel =3D allocate_tlabel(card); if (tlabel < 0) { - if (!with_tstamp) { - callback.without_tstamp(card, RCODE_SEND_ERROR, NULL, 0, callback_data); - } else { - // Timestamping on behalf of hardware. - u32 curr_cycle_time =3D 0; - u32 tstamp; + // Timestamping on behalf of hardware. + u32 curr_cycle_time =3D 0; + u32 tstamp; =20 - (void)fw_card_read_cycle_time(card, &curr_cycle_time); - tstamp =3D cycle_time_to_ohci_tstamp(curr_cycle_time); + (void)fw_card_read_cycle_time(card, &curr_cycle_time); + tstamp =3D cycle_time_to_ohci_tstamp(curr_cycle_time); + + t->packet.timestamp =3D tstamp; + invoke_callback(t, RCODE_SEND_ERROR, tstamp, NULL, 0); =20 - callback.with_tstamp(card, RCODE_SEND_ERROR, tstamp, tstamp, NULL, 0, - callback_data); - } return; } =20 t->node_id =3D destination_id; t->tlabel =3D tlabel; - t->card =3D card; t->is_split_transaction =3D false; timer_setup(&t->split_timeout_timer, split_transaction_timeout_callback, = 0); - t->callback =3D callback; - t->with_tstamp =3D with_tstamp; - t->callback_data =3D callback_data; t->packet.callback =3D transmit_complete_callback; =20 // NOTE: This can be without irqsave when we can guarantee that __fw_send= _request() for @@ -1198,12 +1190,7 @@ void fw_core_handle_response(struct fw_card *card, s= truct fw_packet *p) */ card->driver->cancel_packet(card, &t->packet); =20 - if (!t->with_tstamp) { - t->callback.without_tstamp(card, rcode, data, data_length, t->callback_d= ata); - } else { - t->callback.with_tstamp(card, rcode, t->packet.timestamp, p->timestamp, = data, - data_length, t->callback_data); - } + invoke_callback(t, rcode, p->timestamp, data, data_length); } EXPORT_SYMBOL(fw_core_handle_response); =20 --=20 2.53.0 From nobody Thu Sep 24 20:37:49 2026 Received: from fout-a1-smtp.messagingengine.com (fout-a1-smtp.messagingengine.com [103.168.172.144]) (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 4866931BCAE for ; Mon, 21 Sep 2026 03:19:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=103.168.172.144 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789960779; cv=none; b=Zypvpp0+p7myQR3ggwJ9Qr5wfl+Y1xyxnGbc6in47RlLrmzpCWZpZprqXLYS2IeOYZ46OIpjpE8N7IuKpdaqM9GHuyPKo8vEmRwhZF0PNweAMTfYMfnEM6DXzffwFDd71SvORKy4nqDD45ffZiERGFbksrKxfS3OdY2QXwSCg5Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789960779; c=relaxed/simple; bh=T6EQGFBUsRV/2PMZm8ITyBLZCY4VnZvaQ+tJEEiar2I=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=klRqCZ2sGsmugeQoJ9+Tq/RW0jaVQijNYMvyduiUZ0RlFeQl913lNlLpT5r4/7Q3KuReQKyiNJbN9H5K5oldyP8uJwA/yLxSND8w8lHPEK4c1NZ7aXljqoTNJbUEs8aGmgQHZ3aapnqt33jqSU+DV5uUUBHJzg3Hw2Hwn0dASxc= 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=eYHBeoL4; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=psjsYSyQ; arc=none smtp.client-ip=103.168.172.144 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="eYHBeoL4"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="psjsYSyQ" Received: from phl-compute-03.internal (phl-compute-03.internal [10.202.2.43]) by mailfout.phl.internal (Postfix) with ESMTP id 59AB6EC00CC; Sun, 20 Sep 2026 23:19:37 -0400 (EDT) Received: from phl-frontend-04 ([10.202.2.163]) by phl-compute-03.internal (MEProxy); Sun, 20 Sep 2026 23:19:37 -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=1789960777; x= 1790047177; bh=4j0WGvSLc2ROyYOH698jWE60ScwgFmiTycdvIbV5XOA=; b=e YHBeoL4H85urgm4kCUPsqxYILS3Y4LOi7xoC21KdGbGRkrNGp8kw6l9gd1pBiarI 7WqAa/6m5xxN26hW5AxFnN9vDzkgHOb5T6/nWOPdam9B/JD5UxAo77iZGdoYDkCF 6+mOhw+6KvnVW3nlRkabIz3g8eHwP7TX+sBVYrACvyt2A9PdeOlfr5ooPUUg1RJp FdxbgHmMDTvEo0/sTJ7RY/yrnuTlHyQ8Q5OZNnUHpXugPKCL731dhVKSMHEEEvGt RVMjtSsNXBNVkybPrs69d9bvn6uE9mQrUsGjXnjnxR/Q9IkC7HApcnYfEANILEB4 tqm4Ky0qi/p9PF+w0E4Ew== 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=1789960777; x=1790047177; bh=4 j0WGvSLc2ROyYOH698jWE60ScwgFmiTycdvIbV5XOA=; b=psjsYSyQrx/M9vYYW qSVOyXQIC3v5S4QPAv1LuIFj9LgrqnjFRwCgwgfspBdrVWipZyD/AuTnqG4yzL+n kMxq6MQ/ObhXlB1XdNnQiuUt2iAbcEFGDDD+ZnopvdtavCtfEXTQBofm2sOUwdQn y2fk2/DyY36eOrnPPwnhAidU4/myruRHXlWfhKQP4rhOELXFYoz6ZOvJVoioQ0Ar fFRn+2ydhJjljuh6KfaR2YlrpinzySS4VJIBaSejDYzy8X8FJllNYR1kAsBRAyTK 7jwImUR42t5J3pWTUJkpgKwE02jaQj0srGvH/3V5pAMtltrSh/Epxzytk+OnbyAS EPa4w== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: dmFkZTG4HxcRk5U6N4ypSfJUTdx+6umR7TSQ4g44xSCYOl+LSsOjyHLREsxOw5gpDWjGze ssZLXb8NQxBJAfAUzYHAbyvWaRwsq40mDR3QglpIIDOh4aDtOIlzcZNB62z4mDymKjq8jd UAw+qD5Fd6CAYTpex4syY5GNMZvis2cXIcCo2nhBw5bybLWSYdtPnUCp36inipJE76ak20 d1oH1q9KObfdYrwOh4VrMfNbrg6I9B2GUYo2Bcgfzs4yTgdISuPHc8sFeR8xscqwDa+lNM zTDlL6JavrPbKQ8tH66oqgOWzXA9BieBgfS/eaXHh+GlACm+XjjsELkq75QnzOipCwA3hZ JYejXYkTGBOb7VwcguxXCLqz0QsH5jzzYf+p2Ah4bZoS6ISPHOrcU3VBO19vk/QVREpPmG BnkQ/AKBcIPAllk7NalHfNYLO/RLBjVbuwpW6jYZtSC97zfP2fuFsqJ/as8Qfr+bFDEuWR 8n2o/cWmgFuyycaoostbnmNaQbJzPZhec6ke66nIOpXE6/asOHHY7Z4jjoJFERgEuwtP0l mKploJVoUKR1JZBb/Iro9aa04YEJKMFr2aXtj1ekLflVhgY8Rky8I8iRor2iBE8kNoTnWX GhgZjhdxY/v4OL0YOkN72VOqvNUjacDSbCGd7qh91PFLgtiRGfXKHJ7iyDWQ X-ME-Proxy: Feedback-ID: ie8e14432:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Sun, 20 Sep 2026 23:19:36 -0400 (EDT) From: Takashi Sakamoto To: linux1394-devel@lists.sourceforge.net Cc: linux-kernel@vger.kernel.org Subject: [PATCH 2/3] firewire: core: use workqueue to invoke transaction callback in some error cases Date: Mon, 21 Sep 2026 12:19:30 +0900 Message-ID: <20260921031931.287429-3-o-takashi@sakamocchi.jp> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260921031931.287429-1-o-takashi@sakamocchi.jp> References: <20260921031931.287429-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" Some error paths of __fw_send_request() invoke the transaction callback in the caller's context. Additionally, when a split transaction times out, the callback is invoked in softIRQ context by the timer wheel. These are the only cases where the callback is not guaranteed to be invoked in process context. Use a workqueue to invoke the callback in these cases. This may introduce additional delay when a split transaction times out, but the default timeout is 2 seconds, so the additional delay should be negligible. Signed-off-by: Takashi Sakamoto --- drivers/firewire/core-transaction.c | 22 +++++++++++++++++++--- include/linux/firewire.h | 5 +++++ 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/drivers/firewire/core-transaction.c b/drivers/firewire/core-tr= ansaction.c index 0cad55763a3e..e59b347ff248 100644 --- a/drivers/firewire/core-transaction.c +++ b/drivers/firewire/core-transaction.c @@ -40,7 +40,7 @@ static int try_cancel_split_timeout(struct fw_transaction *t) { if (t->is_split_transaction) - return timer_delete(&t->split_timeout_timer); + return timer_delete(&t->split_timeout_timer) || disable_work(&t->error_w= ork); else return 1; } @@ -154,6 +154,21 @@ int fw_cancel_transaction(struct fw_card *card, } EXPORT_SYMBOL(fw_cancel_transaction); =20 +static void error_callback_work(struct work_struct *work) +{ + struct fw_transaction *t =3D from_work(t, work, error_work); + + invoke_callback(t, t->rcode, t->response_timestamp, NULL, 0); +} + +static void schedule_error_callback(struct fw_transaction *t, int rcode, u= 32 response_timestamp) +{ + t->rcode =3D rcode; + t->response_timestamp =3D response_timestamp; + + queue_work(t->card->async_wq, &t->error_work); +} + static void split_transaction_timeout_callback(struct timer_list *timer) { struct fw_transaction *t =3D timer_container_of(t, timer, split_timeout_t= imer); @@ -165,7 +180,7 @@ static void split_transaction_timeout_callback(struct t= imer_list *timer) remove_transaction_entry(card, t); } =20 - invoke_callback(t, RCODE_CANCELLED, t->split_timeout_cycle, NULL, 0); + schedule_error_callback(t, RCODE_CANCELLED, t->split_timeout_cycle); } =20 // card->transactions.lock should be acquired in advance for the linked li= st. @@ -383,6 +398,7 @@ void __fw_send_request(struct fw_card *card, struct fw_= transaction *t, int tcode t->callback =3D callback; t->with_tstamp =3D with_tstamp; t->callback_data =3D callback_data; + INIT_WORK(&t->error_work, error_callback_work); =20 /* * Allocate tlabel from the bitmap and put the transaction on @@ -402,7 +418,7 @@ void __fw_send_request(struct fw_card *card, struct fw_= transaction *t, int tcode tstamp =3D cycle_time_to_ohci_tstamp(curr_cycle_time); =20 t->packet.timestamp =3D tstamp; - invoke_callback(t, RCODE_SEND_ERROR, tstamp, NULL, 0); + schedule_error_callback(t, RCODE_SEND_ERROR, tstamp); =20 return; } diff --git a/include/linux/firewire.h b/include/linux/firewire.h index 2b065f03565d..a3a3a9ec1b21 100644 --- a/include/linux/firewire.h +++ b/include/linux/firewire.h @@ -362,6 +362,11 @@ struct fw_transaction { union fw_transaction_callback callback; bool with_tstamp; void *callback_data; + + // For some error cases. + struct work_struct error_work; + int rcode; + u32 response_timestamp; }; =20 struct fw_address_handler { --=20 2.53.0 From nobody Thu Sep 24 20:37:49 2026 Received: from fhigh-a1-smtp.messagingengine.com (fhigh-a1-smtp.messagingengine.com [103.168.172.152]) (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 6FB9A327204 for ; Mon, 21 Sep 2026 03:19:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=103.168.172.152 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789960781; cv=none; b=YSZRcqkvvh/khrJwlyPrdHfbPDs72J/i+MCgeTDuq4GZivuGoKRscTOXaguDoV3MVzdS641ydK8rRneH2hCg8kHQPfTH91ijluSmTQduafAfRPIT1Ld2yDqM7mOkWFZsb++6EfoYkO0/zq8Ouya8kdfi4fRkSfAmTWmPYzHkUEk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789960781; c=relaxed/simple; bh=vG+b7uUrrZZ1dKEaVRF9ZS8jpXJrVMS2o1f4mrpGbkY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=GvnRBriU+2UuQIBnI644xgBCwEXoxajLJTRNPrn+Eb4hLpOaSEcRgQrWtsDJVqyElGQemfdBsLugC01ChFz7AEs3Om8/UFRvAkIj506O3vAEbt4agnfXxufSPnY4xRQ7tQrG5H+0hHws7xLj8zBhguLk/Ekk1Kr37ukT5zVggQs= 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=GY58S80L; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=XVN5KdRQ; arc=none smtp.client-ip=103.168.172.152 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="GY58S80L"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="XVN5KdRQ" Received: from phl-compute-06.internal (phl-compute-06.internal [10.202.2.46]) by mailfhigh.phl.internal (Postfix) with ESMTP id 8CB1C14000EE; Sun, 20 Sep 2026 23:19:38 -0400 (EDT) Received: from phl-frontend-04 ([10.202.2.163]) by phl-compute-06.internal (MEProxy); Sun, 20 Sep 2026 23:19:38 -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=1789960778; x= 1790047178; bh=7m9I0Ngy8V1GFZX6yxe0c/I+uj9r+qy29sHS1jouhp8=; b=G Y58S80LTMyB2gDYbenrJP0jNbbPCk0XSiNYCR7p/AUfgaETnt3kAeQkkMuyZo2z7 cyENd8iLbshlagphUzAm96Y5BZ75B4tSBhbD+1YMkDviLHAr20s9saYiwTz1Vc+B X9NFD2S1aGBTZLe5szMZjTZGOJDanOppZ0iKiWur74vq6GhYtk2OSNtGG651hjrc zG65LbW8z0sDxj+ChuZ5y7mbW/pSDxbR8ERoUYxHB5/howgu5DP6iXtg82Gr9Bi4 5XjfRh2BWu7KmNpg29Q77ctalXR75XJDcBlRrcesIXmlreFT9EJNp3LVj6EeyhA9 hq2qKmJROPgsW80/bVflw== 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=1789960778; x=1790047178; bh=7 m9I0Ngy8V1GFZX6yxe0c/I+uj9r+qy29sHS1jouhp8=; b=XVN5KdRQTczL48ejY x6E7c12ggSfFwdIb60KuQIuF0FW79jWujNRxkGU6WRgEhIHYSjHKKcuqaq4MPSPM cfQqg0pr1rC0lcE1xu5z15H4oaO9KTGaY20fiF/zABGjFNUqKHvAeEQ+mejljcZN 71S+hnRJftMNttJrZ91qQEQexKBqE3GUl66aE7nj/dI68Sh2R2e/UWcUY4KpcGH3 MGmgyr8sIulAl5SDl6L6twvT7/wS09NvqxrEHPRpLmtu23XUA6KNME7bMNUEM9ir MMVCpN8okwv/VeBtm1ifXlBhHRNwYH3M/Jd6Hj4GUuEu0FhovYVRx1fctKy0EcnZ w8mKg== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: dmFkZTG4HxcRk5U6N4ypSfJUTdx+6umR7TSQ4g44xSCYOl+LSsOjyHLREsxOw5gpDWjGze ssZLXb8NQxBJAfAUzYHAbyvWaRwsq40mDR3QglpIIDOh4aDtOIlzcZNB62z4mDymKjq8jd UAw+qD5Fd6CAYTpex4syY5GNMZvis2cXIcCo2nhBw5bybLWSYdtPnUCp36inipJE76ak20 d1oH1q9KObfdYrwOh4VrMfNbrg6I9B2GUYo2Bcgfzs4yTgdISuPHc8sFeR8xscqwDa+lNM zTDlL6JavrPbKQ8tH66oqgOWzXA9BieBgfS/eaXHh+GlACm+XjjsELkq75QnzOipCwA3qu Z9fhmmM/mcQX/r/ym9pfBLISOgVMcy0pCONDvLCpswYJrI0ZtoG3QOO7kl9NruNV5wxNHK OhvVe4pgcziHqspLjS3C8jfGSFHh4UBiAIXhGSE4BVgfRf0o/O62ToErMfNoa7AbT+dZxv H17H6e+ENq04veNkqDPQnlFppggwna4hwt97+vMpCyjftoJFFImD7+GYBgiIOxYcEyQYt2 WEvP6aGHdjDlA4AdYkddCRXayOJGwRjCZZxf2NmnyCWTDcjJybWyocDXLYi+uqzvOginAx ByETO/rnDoohj22hBgYabm03PQossoM3a6sGt2+w4JQzfizp0YNqdEPuuZEA X-ME-Proxy: Feedback-ID: ie8e14432:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Sun, 20 Sep 2026 23:19:37 -0400 (EDT) From: Takashi Sakamoto To: linux1394-devel@lists.sourceforge.net Cc: linux-kernel@vger.kernel.org Subject: [PATCH 3/3] firewire: core: update kerneldoc for fw_send_request() and its variants Date: Mon, 21 Sep 2026 12:19:31 +0900 Message-ID: <20260921031931.287429-4-o-takashi@sakamocchi.jp> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260921031931.287429-1-o-takashi@sakamocchi.jp> References: <20260921031931.287429-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" Some error paths invoke the transaction callback in process context using a workqueue. All transaction callbacks are now invoked in process context. Update kerneldoc to reflect this behavior. Signed-off-by: Takashi Sakamoto --- drivers/firewire/core-transaction.c | 4 ++-- include/linux/firewire.h | 10 ++++------ 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/drivers/firewire/core-transaction.c b/drivers/firewire/core-tr= ansaction.c index e59b347ff248..8ef04d84011b 100644 --- a/drivers/firewire/core-transaction.c +++ b/drivers/firewire/core-transaction.c @@ -374,8 +374,8 @@ __must_hold(&card->transactions.lock) * * In case of request types without payload, @data is NULL and @length is = 0. * - * After the transaction is completed successfully or unsuccessfully, the - * @callback will be called. Among its parameters is the response code wh= ich + * After the transaction is completed successfully or unsuccessfully, the = @callback will be called + * in process context. Among its parameters is the response code which * is either one of the rcodes per IEEE 1394 or, in case of internal error= s, * the firewire-core specific %RCODE_SEND_ERROR. The other firewire-core * specific rcodes (%RCODE_CANCELLED, %RCODE_BUSY, %RCODE_GENERATION, diff --git a/include/linux/firewire.h b/include/linux/firewire.h index a3a3a9ec1b21..eebadebe5936 100644 --- a/include/linux/firewire.h +++ b/include/linux/firewire.h @@ -419,9 +419,8 @@ void __fw_send_request(struct fw_card *card, struct fw_= transaction *t, int tcode * A variation of __fw_send_request() to generate callback for response su= baction without time * stamp. * - * The callback is invoked in the workqueue context in most cases. However= , if an error is detected - * before queueing or the destination address refers to the local node, it= is invoked in the - * current context instead. + * After the transaction is completed successfully or unsuccessfully, the = @callback will be called + * in process context. */ static inline void fw_send_request(struct fw_card *card, struct fw_transac= tion *t, int tcode, int destination_id, int generation, int speed, @@ -452,9 +451,8 @@ static inline void fw_send_request(struct fw_card *card= , struct fw_transaction * * * A variation of __fw_send_request() to generate callback for response su= baction with time stamp. * - * The callback is invoked in the workqueue context in most cases. However= , if an error is detected - * before queueing or the destination address refers to the local node, it= is invoked in the current - * context instead. + * After the transaction is completed successfully or unsuccessfully, the = @callback will be called + * in process context. */ static inline void fw_send_request_with_tstamp(struct fw_card *card, struc= t fw_transaction *t, int tcode, int destination_id, int generation, int speed, unsigned long l= ong offset, --=20 2.53.0