From nobody Thu Sep 24 22:21:46 2026 Received: from fhigh-b2-smtp.messagingengine.com (fhigh-b2-smtp.messagingengine.com [202.12.124.153]) (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 B957B481A93 for ; Sat, 19 Sep 2026 11:50:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=202.12.124.153 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789818628; cv=none; b=FV0GnKtp6IOoXkCIyhEGXdu7pKNR14tx+zePuDmyfy8o1m7+6IVZ9mssbncadFj7FqBxoBi88rye7uhPVeI8aHQyKKFFdwMm72KSVAJZf4OxeD6Ac3qpVVWjqdJRLpY6RMSzQaLqgCB0+xhn/xEF0u6R/gIeh9BXafQAPI/ITqw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789818628; c=relaxed/simple; bh=MvtFkG6xtHxkNHPTqFa0InscQxy/aGh54JcvjKOoIlo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Zf43G57Zydqjs2gKDbuoj0kbrErF2mnaq38cB0Lo5oPeMYEUXA8jKlkN5XJmK0DahJtIJfDcMSqvx22yJgOEa26/LSHRDrY/gehAIpJIdQTHsyeqkiW3p/BS5asFO/mSPEZls5pMWbNnEhj4i2dtqys7Vx0PgLhfcdbsqX788jk= 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=OcBRvPRn; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=jVgNLkV2; arc=none smtp.client-ip=202.12.124.153 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="OcBRvPRn"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="jVgNLkV2" Received: from phl-compute-06.internal (phl-compute-06.internal [10.202.2.46]) by mailfhigh.stl.internal (Postfix) with ESMTP id A93467A0127; Sat, 19 Sep 2026 07:50:23 -0400 (EDT) Received: from phl-frontend-04 ([10.202.2.163]) by phl-compute-06.internal (MEProxy); Sat, 19 Sep 2026 07:50:23 -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=1789818623; x= 1789905023; bh=NRXX2GFWYuxB/V9mP0IUlSvSK2buODEjC+n25rtlACs=; b=O cBRvPRnUlqo5ZtS+gughzDke9NEyDXJVOIyKvXKgPoc+iKp4fFLU0rnpkMjIsy9o RDm5AjANzh4BkV5GH4MfqH+EEKLK9+Nl1XOER4R4lGMzN4i+DiqFT242QXC6fwoc ed8iQI+/C4vXZVnEeXsNUF1azlhjmdfOw15DyUw0zvM8LRuDfUachSnXW+sD9AwL zSo/TYCILvQlLH/C39bOxbU9Ee9rOaPRZZawVrLuaV40OczJLjpz8lcLWpclGlgB 5zDgXL+JZx3eXmG52X77o/ifBu7rcXv9kTnQWinGtPkPjQDKsfTay1bDhNzeRIz3 ii9SgE7qj1pyFRcCYCR5Q== 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=1789818623; x=1789905023; bh=N RXX2GFWYuxB/V9mP0IUlSvSK2buODEjC+n25rtlACs=; b=jVgNLkV2ogv9oxthB DXBgj/qIOTSGNVS61pkJAt1EJiRxLso4rPtEMvzitga8qptQopu+pX9hOZwWWspc 39CKcPR3tDPGvbJZOICkzcX2GjSCwpglQmX6HXzEp5sYgxXJ/9DOvjpo7gyWFvXC KeEgPP2MLSDcN1QVOntkBLpYiXq7rGm4824tG2v8RIzxrgR+fOxCtRVRtP/nUrp6 2/qv+5K4SquubzE0Ppf10u1JesDNNf7hILzIStnsn1ttPqwgN/4MCUyL+KWLBtIO C9ALGL6j5t8dVGEEAdn1zGt78JWRhDkpujCYVlCd0e5w0pBMHqYX7wNe/EeOIXfm 5w0vw== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: dmFkZTF89Q54GLsKvm4RbZqlKDuUewYy1TCjGEnhC1YTwWhDVU1Gg8XUBhEJm2TFxVZvvI zZEWEbHGf2ZL/pZjpc45k/hrCyAQtJRuufvPYfjuTBfotRHi0VhVl9zEH589EBWb5B7mV/ tfUd2RmdbhW/gTVcrpgviK+UD+Y5c9VHkMn0OFtbpmRapD9LbA6ckmj6VMUOy2adwzCJaQ BezE15MGm6MTQkkQRzD5EoBdxPXwsaCP1b5MkvdulSTaCPXedkrrOZFrvrHQtWUmA/MQcg pYWPbDXBkfElLnA8ESdXyHxJfOUX3+Xp1s4Nd0Jf5roMulsmIdACOHs9ds8uKd54CVcFTY OzqJd0lw2W/2+wx8Vt5bEVoPffsgz3irlqjanqRUANd3xH6awAqG2vIpUc4j8yuko3iY+r Cqw3ak+YmnLRuePcu+voYOU/fG7JE3cXQmneGG3aD62mv1V2Vn8jXl2EQ1ZVWwUg7FRpfA uol5FAPR2aiAn8Sj768VYHB/Ro1IcQYB1CEb7weJ3BP4N8vhqV0USel6mfYk7qaVXv59G7 2EyIvBeLBAIWbVc1MfWbu7zStAfop7z3wspf+cGNV9C2CtDsjae5+CGWcxbMRzTQZYNl0c mThW5rQEoP7Czkl4TZCJrIVCkIdAJZtuqZp9wPsyMzT65FiSsw3tlFO7c9NQ X-ME-Proxy: Feedback-ID: ie8e14432:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Sat, 19 Sep 2026 07:50:22 -0400 (EDT) From: Takashi Sakamoto To: linux1394-devel@lists.sourceforge.net Cc: linux-kernel@vger.kernel.org Subject: [PATCH 1/5] firewire: ohci: use workqueue to handle error case of AT request/response packet queueing Date: Sat, 19 Sep 2026 20:50:13 +0900 Message-ID: <20260919115017.859169-2-o-takashi@sakamocchi.jp> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260919115017.859169-1-o-takashi@sakamocchi.jp> References: <20260919115017.859169-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" When a packet cannot be queued to an AT context, the packet callback is invoked to report the error to the caller. Since the callback runs in the caller's context, its execution context depends on where the packet was submitted. This makes the callback context inconsistent between successful and failed subactions. Use a workqueue to handle the error cases. Signed-off-by: Takashi Sakamoto --- drivers/firewire/core-card.c | 7 +-- drivers/firewire/ohci.c | 90 +++++++++++++++++++++++++++++++++--- include/linux/firewire.h | 3 ++ 3 files changed, 91 insertions(+), 9 deletions(-) diff --git a/drivers/firewire/core-card.c b/drivers/firewire/core-card.c index 23749434d900..be6f18d67ece 100644 --- a/drivers/firewire/core-card.c +++ b/drivers/firewire/core-card.c @@ -643,11 +643,12 @@ int fw_card_add(struct fw_card *card, u32 max_receive= , u32 link_speed, u64 guid, // * =3D=3D WQ_FREEZABLE The target device would not be available when = being freezed. // * =3D=3D WQ_HIGHPRI High priority to process semi-realtime timestamp= ed data. // * =3D=3D WQ_SYSFS Parameters are available via sysfs. - // * max_active =3D=3D 4 A hardIRQ could notify events for a pair of re= quests and - // response AR/AT contexts. + // * max_active =3D=3D 4 + 2 A hardIRQ could notify events for a pair of= requests and + // response AR/AT contexts. Additional 2 capacity are for the + // internal handling of local AT request and response packets. async_wq =3D alloc_workqueue("firewire-async-card%u", WQ_UNBOUND | WQ_MEM_RECLAIM | WQ_FREEZABLE | WQ_HIGHPRI | WQ_SYSFS, - 4, card->index); + 6, card->index); if (!async_wq) return -ENOMEM; =20 diff --git a/drivers/firewire/ohci.c b/drivers/firewire/ohci.c index bd3e01b2f450..45f03095a196 100644 --- a/drivers/firewire/ohci.c +++ b/drivers/firewire/ohci.c @@ -164,6 +164,13 @@ struct at_context { struct work_struct work; }; =20 +// The local-to-local transaction is handled by the work item in the follo= wing structure. +struct at_local { + struct list_head list; + spinlock_t lock; + struct work_struct work; +}; + struct iso_context { struct fw_iso_context base; struct context context; @@ -216,6 +223,9 @@ struct fw_ohci { struct at_context at_request_ctx; struct at_context at_response_ctx; =20 + struct at_local at_request_local; + struct at_local at_response_local; + u32 it_context_support; u32 it_context_mask; /* unoccupied IT contexts */ struct iso_context *it_context_list; @@ -1579,6 +1589,51 @@ static void handle_local_at_response_packet(struct f= w_ohci *ohci, struct fw_pack packet->callback(packet, &ohci->card, packet->ack); } =20 +static void handle_at_local_packets(struct at_local *local, struct fw_ohci= *ohci) +{ + struct fw_packet *packet; + + spin_lock(&local->lock); + + while ((packet =3D list_first_entry_or_null(&local->list, typeof(*packet)= , link_for_local))) { + list_del(&packet->link_for_local); + spin_unlock(&local->lock); + + if (unlikely(packet->ack !=3D 0)) { + // This case is active when the call of at_context_queue_packet() retur= ns + // error in at_context_transmit(). + packet->callback(packet, &ohci->card, packet->ack); + } + + spin_lock(&local->lock); + } + + spin_unlock(&local->lock); +} + +static void at_request_local_work(struct work_struct *work) +{ + struct at_local *local =3D from_work(local, work, work); + struct fw_ohci *ohci =3D container_of(local, struct fw_ohci, at_request_l= ocal); + + handle_at_local_packets(local, ohci); +} + +static void at_response_local_work(struct work_struct *work) +{ + struct at_local *local =3D from_work(local, work, work); + struct fw_ohci *ohci =3D container_of(local, struct fw_ohci, at_response_= local); + + handle_at_local_packets(local, ohci); +} + +static void at_local_init(struct at_local *local, work_func_t func) +{ + spin_lock_init(&local->lock); + INIT_LIST_HEAD(&local->list); + INIT_WORK(&local->work, func); +} + static bool destination_is_local(const struct fw_packet *packet, const str= uct fw_ohci *ohci) __must_hold(&ohci->lock) { @@ -1588,6 +1643,24 @@ __must_hold(&ohci->lock) ohci->generation =3D=3D packet->generation); } =20 +static void queue_work_for_at_local_packet(struct at_context *ctx, struct = fw_packet *packet, + struct fw_ohci *ohci) +{ + struct at_local *local; + + if (ctx =3D=3D &ohci->at_request_ctx) + local =3D &ohci->at_request_local; + else + local =3D &ohci->at_response_local; + + // Timestamping on behalf of the hardware. + packet->timestamp =3D cycle_time_to_ohci_tstamp(get_cycle_time(ohci)); + + scoped_guard(spinlock_irqsave, &local->lock) + list_add_tail(&packet->link_for_local, &local->list); + queue_work(ohci->card.async_wq, &local->work); +} + static void at_context_transmit(struct at_context *ctx, struct fw_packet *= packet) { struct fw_ohci *ohci =3D ctx->context.ohci; @@ -1612,12 +1685,8 @@ static void at_context_transmit(struct at_context *c= tx, struct fw_packet *packet ret =3D at_context_queue_packet(ctx, packet); spin_unlock_irqrestore(&ohci->lock, flags); =20 - if (ret < 0) { - // Timestamping on behalf of the hardware. - packet->timestamp =3D cycle_time_to_ohci_tstamp(get_cycle_time(ohci)); - - packet->callback(packet, &ohci->card, packet->ack); - } + if (ret < 0) + queue_work_for_at_local_packet(ctx, packet, ohci); } =20 static void detect_dead_context(struct fw_ohci *ohci, @@ -2474,6 +2543,9 @@ static void ohci_disable(struct fw_card *card) flush_work(&ohci->at_request_ctx.work); flush_work(&ohci->at_response_ctx.work); =20 + flush_work(&ohci->at_request_local.work); + flush_work(&ohci->at_response_local.work); + for (i =3D 0; i < ohci->n_ir; ++i) { if (!(ohci->ir_context_mask & BIT(i))) flush_work(&ohci->ir_context_list[i].base.work); @@ -2485,6 +2557,9 @@ static void ohci_disable(struct fw_card *card) =20 at_context_flush(&ohci->at_request_ctx); at_context_flush(&ohci->at_response_ctx); + + at_request_local_work(&ohci->at_request_local.work); + at_response_local_work(&ohci->at_response_local.work); } =20 static int ohci_set_config_rom(struct fw_card *card, @@ -3684,6 +3759,9 @@ static int pci_probe(struct pci_dev *dev, return err; INIT_WORK(&ohci->at_response_ctx.work, ohci_at_context_work); =20 + at_local_init(&ohci->at_request_local, at_request_local_work); + at_local_init(&ohci->at_response_local, at_response_local_work); + reg_write(ohci, OHCI1394_IsoRecvIntMaskSet, ~0); ohci->ir_context_channels =3D ~0ULL; ohci->ir_context_support =3D reg_read(ohci, OHCI1394_IsoRecvIntMaskSet); diff --git a/include/linux/firewire.h b/include/linux/firewire.h index cbe59a18162e..1c71ff69c42f 100644 --- a/include/linux/firewire.h +++ b/include/linux/firewire.h @@ -329,6 +329,9 @@ struct fw_packet { bool payload_mapped; u32 timestamp; =20 + // Used to handle the local-to-local packets in the AT request/response c= ontexts. + struct list_head link_for_local; + /* * This callback is called when the packet transmission has completed. * For successful transmission, the status code is the ack received --=20 2.53.0 From nobody Thu Sep 24 22:21:46 2026 Received: from fhigh-b2-smtp.messagingengine.com (fhigh-b2-smtp.messagingengine.com [202.12.124.153]) (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 85C07335064 for ; Sat, 19 Sep 2026 11:50:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=202.12.124.153 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789818629; cv=none; b=VkrhfuR7FWLlzjNuSNPDwwraci1lDFWej9yiTpy4X35gmDhn/9i+7uAz8iuwAQusLody8WSASb5FnnIpAQ6dkUB9Gae8EFKalFaLehQEZ6SIrFqAPpOMBIybycelbJPa6R7HKC+SJSOgwrNIgCZ5e/d/Lg32li49V0fjTnkZolQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789818629; c=relaxed/simple; bh=3cZjN3yQWi7doSaFJGraeLsMsPT29701VUpPaVVbfVI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=BkIe6EMKmTzctdnFsplpZqwOl2HtDaV9KCEgZbnMiJe39VVdwJc761g07ivVLJkxjEfC64M3upPyWr7tQQSKt2rJ5UF9UaAF7657SY6hORtU4Z8IKcPDlKakU9iuPwHnO6MLzotZ+AJab3ByDkAr1oW4jvZFQ1EURuf59wOdPqk= 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=SznTRBWI; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=XyCPmR50; arc=none smtp.client-ip=202.12.124.153 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="SznTRBWI"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="XyCPmR50" Received: from phl-compute-04.internal (phl-compute-04.internal [10.202.2.44]) by mailfhigh.stl.internal (Postfix) with ESMTP id 0E2037A0124; Sat, 19 Sep 2026 07:50:25 -0400 (EDT) Received: from phl-frontend-04 ([10.202.2.163]) by phl-compute-04.internal (MEProxy); Sat, 19 Sep 2026 07:50:25 -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=1789818624; x= 1789905024; bh=jv4mHr9IO9W+MZ2jxoce2Milt9A6D3iiEQBMAcivPhA=; b=S znTRBWI8kU6nqGUb63/HivVV+Gy6TnhnmSvKsLz0DnMFaXIitjf8FWj8oIZMnE/V EFpguUgzRyXus8hxMl2HOj7SapHU7huIz8OTcpEw1tafiWeeZM2akZZJgZiIuasD E61JSwIneAg9m8P0m15OTT7bgUkyqveQ9URR2POGl2350wwMbOZLn/eLvUx6eSRd uoWAk8/NV2WMnRj44wJVh7VjrO+KP+fZh5xjnSVyNko5Qc8cNgaWlCpyhrMxeEOy 26Mht1C238txtsuPZoyfZq7ElvPiPwYdmPn3M6Z35enOlfMl4hGVr7MepFOayyf8 uKLgwW7B3agGsuLzxYv1Q== 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=1789818624; x=1789905024; bh=j v4mHr9IO9W+MZ2jxoce2Milt9A6D3iiEQBMAcivPhA=; b=XyCPmR506goUkQgnk /Sx9oIK6aew4UFvKwFqrTYFICvhcAWVpD8XDTTk/WuHfs3CMUWd/fh2yys1jt4fH C/DlyHNQIEBT+brfbDW/DXNIuSdXEogHXczMXieI9nDMHLBwXAi6JheCXxciLWOz uoFXUtwTLfd72+tjs5y72IcHOT1hQXcx4lWo5kW8Zd4CpQZV08PilHNvop4Rc1OO SCVPytme47x3uWWA1LP5SJ2CBTiQLH6Hz9fq8KL+F4QHSu2a/LKl4Vq1Fdtf8bs8 9+06OMAppLDAR+DkgwyrRTKagYLKRjo5zzozWArJe3Xjsjce8Iq30hpvuvozzu9z j/ezQ== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: dmFkZTF89Q54GLsKvm4RbZqlKDuUewYy1TCjGEnhC1YTwWhDVU1Gg8XUBhEJm2TFxVZvvI zZEWEbHGf2ZL/pZjpc45k/hrCyAQtJRuufvPYfjuTBfotRHi0VhVl9zEH589EBWb5B7mV/ tfUd2RmdbhW/gTVcrpgviK+UD+Y5c9VHkMn0OFtbpmRapD9LbA6ckmj6VMUOy2adwzCJaQ BezE15MGm6MTQkkQRzD5EoBdxPXwsaCP1b5MkvdulSTaCPXedkrrOZFrvrHQtWUmA/MQcg pYWPbDXBkfElLnA8ESdXyHxJfOUX3+Xp1s4Nd0Jf5roMulsmIdACOHs9ds8uKd54CVcFsT koyDEYOTx21vvEXFaP/RefA6E0WkPbJIs/6G7TIihgjLKpKmHM2iXpzeSDISN+Xmu6VBCm Zw2ajynrz5q5vwvRhGC4O0aw/2/76ffv+/q5B+0Zk0D1XCuckB+MbjyFs7F5EGG56PpVCk kNgJppF/QyYcaMx+YQE5LzZHiKoeYZs3e8eopTQvEk4uFMOHh/o03WZT2q1p15tq8EmS0h gBgCTNn7q4EinGk3BSONNo/PMK9mhFF13xEPmuJd3nAubmHAOs8FrifE/kOW1SFxGnpvU2 Yki4Ps8MQ5Ekk3LprvyEuHeXP99gbsrG60+iLEr8I2xkvPv78eLCGoAgkK/w X-ME-Proxy: Feedback-ID: ie8e14432:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Sat, 19 Sep 2026 07:50:23 -0400 (EDT) From: Takashi Sakamoto To: linux1394-devel@lists.sourceforge.net Cc: linux-kernel@vger.kernel.org Subject: [PATCH 2/5] firewire: ohci: use workqueue to handle local AT request/response packets Date: Sat, 19 Sep 2026 20:50:14 +0900 Message-ID: <20260919115017.859169-3-o-takashi@sakamocchi.jp> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260919115017.859169-1-o-takashi@sakamocchi.jp> References: <20260919115017.859169-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" Local-to-local asynchronous transactions are currently handled in the initiator's context. This requires the request handlers to support any context in which the initiator may run. Use workqueue to handle the AT request and response packets targeting local address offsets, so that the request handler always runs in process context. Signed-off-by: Takashi Sakamoto --- drivers/firewire/ohci.c | 21 +++++++++------------ include/linux/firewire.h | 2 +- 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/drivers/firewire/ohci.c b/drivers/firewire/ohci.c index 45f03095a196..dddb08dbb45f 100644 --- a/drivers/firewire/ohci.c +++ b/drivers/firewire/ohci.c @@ -1546,7 +1546,7 @@ static bool in_bus_management_csr_registers(u64 offse= t) return in_range(offset, CSR_BUS_MANAGER_ID, 0x22c - CSR_BUS_MANAGER_ID); } =20 -static void handle_local_at_request_packet(struct fw_ohci *ohci, struct fw= _packet *packet) +static void handle_at_request_local_packet(struct fw_ohci *ohci, struct fw= _packet *packet) { // Emulate split transaction. packet->ack =3D ACK_PENDING; @@ -1574,7 +1574,7 @@ static void handle_local_at_request_packet(struct fw_= ohci *ohci, struct fw_packe } } =20 -static void handle_local_at_response_packet(struct fw_ohci *ohci, struct f= w_packet *packet) +static void handle_at_response_local_packet(struct fw_ohci *ohci, struct f= w_packet *packet) { u64 csr_offset =3D async_header_get_offset(packet->header) - CSR_REGISTER= _BASE; =20 @@ -1589,7 +1589,8 @@ static void handle_local_at_response_packet(struct fw= _ohci *ohci, struct fw_pack packet->callback(packet, &ohci->card, packet->ack); } =20 -static void handle_at_local_packets(struct at_local *local, struct fw_ohci= *ohci) +static void handle_at_local_packets(struct at_local *local, struct fw_ohci= *ohci, + void (*handle_at_local_packet)(struct fw_ohci *, struct fw_packet *)) { struct fw_packet *packet; =20 @@ -1603,6 +1604,8 @@ static void handle_at_local_packets(struct at_local *= local, struct fw_ohci *ohci // This case is active when the call of at_context_queue_packet() retur= ns // error in at_context_transmit(). packet->callback(packet, &ohci->card, packet->ack); + } else { + handle_at_local_packet(ohci, packet); } =20 spin_lock(&local->lock); @@ -1616,7 +1619,7 @@ static void at_request_local_work(struct work_struct = *work) struct at_local *local =3D from_work(local, work, work); struct fw_ohci *ohci =3D container_of(local, struct fw_ohci, at_request_l= ocal); =20 - handle_at_local_packets(local, ohci); + handle_at_local_packets(local, ohci, handle_at_request_local_packet); } =20 static void at_response_local_work(struct work_struct *work) @@ -1624,7 +1627,7 @@ static void at_response_local_work(struct work_struct= *work) struct at_local *local =3D from_work(local, work, work); struct fw_ohci *ohci =3D container_of(local, struct fw_ohci, at_response_= local); =20 - handle_at_local_packets(local, ohci); + handle_at_local_packets(local, ohci, handle_at_response_local_packet); } =20 static void at_local_init(struct at_local *local, work_func_t func) @@ -1672,13 +1675,7 @@ static void at_context_transmit(struct at_context *c= tx, struct fw_packet *packet if (destination_is_local(packet, ohci)) { spin_unlock_irqrestore(&ohci->lock, flags); =20 - // Timestamping on behalf of the hardware. - packet->timestamp =3D cycle_time_to_ohci_tstamp(get_cycle_time(ohci)); - - if (ctx =3D=3D &ohci->at_request_ctx) - handle_local_at_request_packet(ohci, packet); - else - handle_local_at_response_packet(ohci, packet); + queue_work_for_at_local_packet(ctx, packet, ohci); return; } =20 diff --git a/include/linux/firewire.h b/include/linux/firewire.h index 1c71ff69c42f..2b065f03565d 100644 --- a/include/linux/firewire.h +++ b/include/linux/firewire.h @@ -337,7 +337,7 @@ struct fw_packet { * For successful transmission, the status code is the ack received * from the destination. Otherwise it is one of the juju-specific * rcodes: RCODE_SEND_ERROR, _CANCELLED, _BUSY, _GENERATION, _NO_ACK. - * The callback can be called from workqueue and thus must never block. + * The callback is called from a workqueue. It is not preferable to block= it so long. */ fw_packet_callback_t callback; int ack; --=20 2.53.0 From nobody Thu Sep 24 22:21:46 2026 Received: from fout-b7-smtp.messagingengine.com (fout-b7-smtp.messagingengine.com [202.12.124.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 3EC4047D460 for ; Sat, 19 Sep 2026 11:50:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=202.12.124.150 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789818631; cv=none; b=sL0GdtUfAOyxIoeqxyoeJtinsF/MFP8l6MVlrUtU5gSCKCVxCqYFbFaQOHj2AFAba5orJY14D215rFwUrtUyTZVHj0tFPbFqjhy4sN/Ew8exPMJJ9DS1wML/z+i4Vj/HoYOLswhTbmEh148Y5R2zS1QDUpGXuDx/889dc+jP4VI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789818631; c=relaxed/simple; bh=3sU7FHne6Ujbz24+0q3MMiyp++APGuJer5ZTELgQGzw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=lXWaqAogXjrvUO07pIdtOzXvK9QnVd3v/fZDSjwUQatgRSjbOebv4SoZ5b2VsC3AA/tULfU0q60WQDsKfapKndNUHuMS+F1jfe2Cd0nbrcgE8BedUDhR4iLoNtgm4v8Zlm5PSicKugrCysQlK1mT7nlnojczi4F6BdYQRAUpn/o= 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=6qP6WbDP; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=i4v5Nn4r; arc=none smtp.client-ip=202.12.124.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="6qP6WbDP"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="i4v5Nn4r" Received: from phl-compute-03.internal (phl-compute-03.internal [10.202.2.43]) by mailfout.stl.internal (Postfix) with ESMTP id 7548B1D000FB; Sat, 19 Sep 2026 07:50:26 -0400 (EDT) Received: from phl-frontend-04 ([10.202.2.163]) by phl-compute-03.internal (MEProxy); Sat, 19 Sep 2026 07:50:26 -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=1789818626; x= 1789905026; bh=zIiTSPIMnM3VniafWsB+2trRFTNSk43qE18Ut0enLXc=; b=6 qP6WbDPy+YvmwjnLDdzLSng1Oz7zmoqiSdIuskQsINun7Yw97mgDs29NnMtSGAfC 5HazREhbJpmuTgnM6O9EJk0bvzQ2gI4OztmksjbH/DEgli6TV8gyxlZzBlOrZqbM nYqSVOku3MUPIfWOF0KGFHz+0ZkFPbC4JOjFztdW1xrTVuOLWZtpg2gAFklozcxV xPq7cM6a+czmeYYGkG9O1SbjfnnxzZRZNocuiVKzAN0Cp5tOz0A7Ufu3yQfwU/g6 oz/pxLO0oIebMlTU4Oep30S5eAbn4uHulVQqQ78ili2wBICra4PN1OJadPYwOQdu ihjwfeQ/CYUmU4Lo3RFJw== 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=1789818626; x=1789905026; bh=z IiTSPIMnM3VniafWsB+2trRFTNSk43qE18Ut0enLXc=; b=i4v5Nn4r9i0i3oeNA 6j/nU/zLumZvfjHDTZCLyxpEkv55hyxgu7i8bL78CA0inqW9yb5Qbx7WvYYQZd7F Q93ImGlbWki9K1B6BvZK8XpfVcTbK3V/bp0/YBJmjuKdnD9qjtp8zhggAJ4ydvum CUiO7TPWYbG+TeteXMxo9Uq7zAwZJiviE2wIfrLlME9GHEQpar1Klmrep4u/nb/Q nJlIvpCBxrNHaJTbkA0BdfwEl4EKwa80TyAye15vMPq0V8jKB5ETfEQVzLJDO4TV sRHUunfVv+ralC5/SAYUeh/9a4AmWeqUoZOy8YQr24nmiJagSpJCPOj2RXa1g9Ap ILBFg== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: dmFkZTF89Q54GLsKvm4RbZqlKDuUewYy1TCjGEnhC1YTwWhDVU1Gg8XUBhEJm2TFxVZvvI zZEWEbHGf2ZL/pZjpc45k/hrCyAQtJRuufvPYfjuTBfotRHi0VhVl9zEH589EBWb5B7mV/ tfUd2RmdbhW/gTVcrpgviK+UD+Y5c9VHkMn0OFtbpmRapD9LbA6ckmj6VMUOy2adwzCJaQ BezE15MGm6MTQkkQRzD5EoBdxPXwsaCP1b5MkvdulSTaCPXedkrrOZFrvrHQtWUmA/MQcg pYWPbDXBkfElLnA8ESdXyHxJfOUX3+Xp1s4Nd0Jf5roMulsmIdACOHs9ds8uKd54CVcFWm y61BwCodlfJLgZGzFJjNxMJ7Cb7vYM5v4dKceqXpPk1lyxIduMqyZurmAdqgGIlttl9Uem evhsTpIXA+vuuxbI69sKmTsHDM2ap+A95kGAsEg4o5xf3e01t8mOd7fpH4TIg58ll6GBbO ybSGOVUgD5oZssoyJnLXDn1L/+w/XJV6qoSfmGLBBFNk0m8puasrsnQrVn//URNuw7Zalt sGWIiY45dVf5sGxBW21EZ2TM1fUnQTZuaBdvFQUDUbDw6XwAiUmPoFA0eIWdJBEL0P0qHj f0NvLZWKXLKdxF5rPoU+AOKj0Pj5uXeQ1qb8Mgr+7hnDU5NayMYHhiFbDX4w X-ME-Proxy: Feedback-ID: ie8e14432:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Sat, 19 Sep 2026 07:50:25 -0400 (EDT) From: Takashi Sakamoto To: linux1394-devel@lists.sourceforge.net Cc: linux-kernel@vger.kernel.org Subject: [PATCH 3/5] firewire: ohci: refactor branches in at_context_transmit() Date: Sat, 19 Sep 2026 20:50:15 +0900 Message-ID: <20260919115017.859169-4-o-takashi@sakamocchi.jp> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260919115017.859169-1-o-takashi@sakamocchi.jp> References: <20260919115017.859169-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" Refactor the branches to consolidate the handling of local requests and responses, as well as hardware queueing errors. Signed-off-by: Takashi Sakamoto --- drivers/firewire/ohci.c | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/drivers/firewire/ohci.c b/drivers/firewire/ohci.c index dddb08dbb45f..710640b759e4 100644 --- a/drivers/firewire/ohci.c +++ b/drivers/firewire/ohci.c @@ -1667,22 +1667,16 @@ static void queue_work_for_at_local_packet(struct a= t_context *ctx, struct fw_pac static void at_context_transmit(struct at_context *ctx, struct fw_packet *= packet) { struct fw_ohci *ohci =3D ctx->context.ohci; - unsigned long flags; - int ret; - - spin_lock_irqsave(&ohci->lock, flags); + bool use_work =3D true; =20 - if (destination_is_local(packet, ohci)) { - spin_unlock_irqrestore(&ohci->lock, flags); - - queue_work_for_at_local_packet(ctx, packet, ohci); - return; + scoped_guard(spinlock_irqsave, &ohci->lock) { + if (!destination_is_local(packet, ohci)) { + if (!at_context_queue_packet(ctx, packet)) + use_work =3D false; + } } =20 - ret =3D at_context_queue_packet(ctx, packet); - spin_unlock_irqrestore(&ohci->lock, flags); - - if (ret < 0) + if (use_work) queue_work_for_at_local_packet(ctx, packet, ohci); } =20 --=20 2.53.0 From nobody Thu Sep 24 22:21:46 2026 Received: from fhigh-b2-smtp.messagingengine.com (fhigh-b2-smtp.messagingengine.com [202.12.124.153]) (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 6B14B483BC3 for ; Sat, 19 Sep 2026 11:50:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=202.12.124.153 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789818634; cv=none; b=YH7lbdxufXXY8yn4tkzJYk+FB/Z8Ng7XJynehxr8BiO0BQ72DwOH0Wd5NwEYR2tTKzgOwvzwkNL8GIaZAXO8vMGdh7QenCfANS8CtxSgqyq2jXyw7t2bDAuWxYeWO4gFbah7+NazvWZMqJTT7FnGYCNkRVtKgoojfHLhOkpxxa0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789818634; c=relaxed/simple; bh=QBW2WJom6F96um8zbRdUAfViZkPtHjygaPiegFuqIQI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=MwGkNuxv1R3uITWIX3Oto5iMc5JDIRRc5PmLdRgqhrjw+hBItJSr8cOMtxd2amHDKjcRjWKZQzJ+ehtzqnXUBjL9IAYMbMmWki+2U6viYnmKyEGVUoG4j/MIz2v+NxiFN2uVbq/MLcH2nYZnTmI0sdzpt2X3rojLcGyRnKGxOj8= 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=IkQ2XvnF; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=XGibccYb; arc=none smtp.client-ip=202.12.124.153 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="IkQ2XvnF"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="XGibccYb" Received: from phl-compute-04.internal (phl-compute-04.internal [10.202.2.44]) by mailfhigh.stl.internal (Postfix) with ESMTP id CAA697A00F9; Sat, 19 Sep 2026 07:50:27 -0400 (EDT) Received: from phl-frontend-04 ([10.202.2.163]) by phl-compute-04.internal (MEProxy); Sat, 19 Sep 2026 07:50:27 -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=1789818627; x= 1789905027; bh=8Gthif1Xa3IhwFp5gzEkpwzQMdkp7XiwGWHZs5Cd9eo=; b=I kQ2XvnFI7VaYdwAua5FhW7Bnry8cw12THX4FmSkOYhkvD5QnCY/Ba/+cyOYHPszz 1yRdo3Fl5Fn09Ksa5Be3AOmXBNdkjj39kUDgaxxz4wVTm/G/GuXNVSAwcN80MQBj 0kqwcU6DUrlgG1QyjesDsCqCSmPVS97wfnADAlu3quA8CE2Z6Kpfjq61zDfOssBu 5yiZA4TjofnVG4AZFKn8aUXLnVTXPNHtmb2rB2hkTFLUU8gql4s13wboJE1g0Ixk fIxrw/yvDlAKNNaskUwWasVg09fjxqfn8guTfAJ93VQDTDTsvhXGEaNOeLIVkDfb BHxllqfOD64ha9pHd68sQ== 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=1789818627; x=1789905027; bh=8 Gthif1Xa3IhwFp5gzEkpwzQMdkp7XiwGWHZs5Cd9eo=; b=XGibccYbtjjiHQX2g G5aluT9VA2jwbWhULbTOybORnI1g1mNL1tBPlRlhsP3sBRXCO0BrIlZo5hHnCs0o D89JMdkfwzcb8i1j4N8RYPZLguuCJj6o9PJ9Zxnb/wQEEDo6KfxVGhLwPl5Xfuuk YVyj1aEE+Jw53cWLYsNwqqLndwpAkWoCBWKlzSzReN9dC+HR7UofjsBhKG8oMTek ZROYjJqeXOMXHlEteSqfmpD3Kda0gYMa1KIrnGaVjeTmq7Y+6LsRd4wbLwfpGD2J Couigwg0RC/1CTK51gd50Y5wRI8kmT73qkDY3sSva2dJ9SpkJHr623LyqNx/yHh1 1BRUg== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: dmFkZTF89Q54GLsKvm4RbZqlKDuUewYy1TCjGEnhC1YTwWhDVU1Gg8XUBhEJm2TFxVZvvI zZEWEbHGf2ZL/pZjpc45k/hrCyAQtJRuufvPYfjuTBfotRHi0VhVl9zEH589EBWb5B7mV/ tfUd2RmdbhW/gTVcrpgviK+UD+Y5c9VHkMn0OFtbpmRapD9LbA6ckmj6VMUOy2adwzCJaQ BezE15MGm6MTQkkQRzD5EoBdxPXwsaCP1b5MkvdulSTaCPXedkrrOZFrvrHQtWUmA/MQcg pYWPbDXBkfElLnA8ESdXyHxJfOUX3+Xp1s4Nd0Jf5roMulsmIdACOHs9ds8uKd54CVcFEH 1MFdCDZRNW3BCkNx89Cr+TxiGR3g63vFoR5pCOF0lI3k3X3rZ7Dsv3+FHYjkEUGKJ6pWxh bxffBfEfywV9ahZl9WD5yLK0j4zJt87qJioXp2fOk/YaSWwxwR5LZRlE0PDQxu88w0IHAI Hmi8JQ49BX9q3yhDmVScuZf9D1ZMsZpbjk/31vbYKXJv0/FCEKsmU1F9sF/FYA8WybLnkP QsOp+QHhpNRqy6ip1WYfQAL/M2n44O04Od7YXxta/BD0zO9NHBP+6ZQ2ALAM7yi0CgIKvr 7NBUbFKJsaCJByDTjhdVWi+NU+itT2ZtXqLt1NFPXfwiwR7x55uGNOUWeSwg X-ME-Proxy: Feedback-ID: ie8e14432:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Sat, 19 Sep 2026 07:50:26 -0400 (EDT) From: Takashi Sakamoto To: linux1394-devel@lists.sourceforge.net Cc: linux-kernel@vger.kernel.org Subject: [PATCH 4/5] firewire: core: use spinlock without irqsave for card split_timeout member Date: Sat, 19 Sep 2026 20:50:16 +0900 Message-ID: <20260919115017.859169-5-o-takashi@sakamocchi.jp> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260919115017.859169-1-o-takashi@sakamocchi.jp> References: <20260919115017.859169-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" Asynchronous packet callbacks are now always invoked in process context. Therefore, the split_timeout member is not accessed from IRQ context. Use spin_lock() for the split_timeout member since disabling local IRQs is unnecessary. Signed-off-by: Takashi Sakamoto --- drivers/firewire/core-transaction.c | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/drivers/firewire/core-transaction.c b/drivers/firewire/core-tr= ansaction.c index 995c2001bee0..91ed85b7aa22 100644 --- a/drivers/firewire/core-transaction.c +++ b/drivers/firewire/core-transaction.c @@ -204,9 +204,7 @@ static void transmit_complete_callback(struct fw_packet= *packet, { unsigned int delta; =20 - // NOTE: This can be without irqsave when we can guarantee that __fw_sen= d_request() for - // local destination never runs in any type of IRQ context. - scoped_guard(spinlock_irqsave, &card->split_timeout.lock) { + scoped_guard(spinlock, &card->split_timeout.lock) { t->split_timeout_cycle =3D compute_split_timeout_timestamp(card, packet->timestamp) & 0xffff; delta =3D card->split_timeout.jiffies; @@ -900,9 +898,7 @@ static struct fw_request *allocate_request(struct fw_ca= rd *card, return NULL; kref_init(&request->kref); =20 - // NOTE: This can be without irqsave when we can guarantee that __fw_send= _request() for - // local destination never runs in any type of IRQ context. - scoped_guard(spinlock_irqsave, &card->split_timeout.lock) + scoped_guard(spinlock, &card->split_timeout.lock) request->response.timestamp =3D compute_split_timeout_timestamp(card, p-= >timestamp); =20 request->response.speed =3D p->speed; @@ -1340,10 +1336,7 @@ static void handle_registers(struct fw_card *card, s= truct fw_request *request, if (tcode =3D=3D TCODE_READ_QUADLET_REQUEST) { *data =3D cpu_to_be32(card->split_timeout.hi); } else if (tcode =3D=3D TCODE_WRITE_QUADLET_REQUEST) { - // NOTE: This can be without irqsave when we can guarantee that - // __fw_send_request() for local destination never runs in any type of = IRQ - // context. - scoped_guard(spinlock_irqsave, &card->split_timeout.lock) { + scoped_guard(spinlock, &card->split_timeout.lock) { card->split_timeout.hi =3D be32_to_cpu(*data) & 7; update_split_timeout(card); } @@ -1356,10 +1349,7 @@ static void handle_registers(struct fw_card *card, s= truct fw_request *request, if (tcode =3D=3D TCODE_READ_QUADLET_REQUEST) { *data =3D cpu_to_be32(card->split_timeout.lo); } else if (tcode =3D=3D TCODE_WRITE_QUADLET_REQUEST) { - // NOTE: This can be without irqsave when we can guarantee that - // __fw_send_request() for local destination never runs in any type of = IRQ - // context. - scoped_guard(spinlock_irqsave, &card->split_timeout.lock) { + scoped_guard(spinlock, &card->split_timeout.lock) { card->split_timeout.lo =3D be32_to_cpu(*data) & 0xfff80000; update_split_timeout(card); } --=20 2.53.0 From nobody Thu Sep 24 22:21:46 2026 Received: from fout-b7-smtp.messagingengine.com (fout-b7-smtp.messagingengine.com [202.12.124.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 132E44825BE for ; Sat, 19 Sep 2026 11:50:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=202.12.124.150 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789818634; cv=none; b=ePOMpDNAaI7lmSd7/iIAG3UEo5NZcLEZsL/Na9sM5F2VL1HNNY7GbGGNEWTatmiBMz0X0+yMbv+K+q4wWLEO2+Dn2R9hfPSSSOtiI74q4M49AumDcVVz3UaVJ8+2FNwmFJPh9xHFxpJBZWEdVn27N1MoVGJOZ9lN5eLgtUU9VPI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789818634; c=relaxed/simple; bh=kcESpH6Gk72nmmcCt8rzAGINYkEgp40365wJbVz4BD8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=d/30sMx+fAnAbZ03tctDLQ8Q5aTaL1Z5UBFg01553hc+C6V2C1OgqzSghE2uzEUJQbUAJ2c0ScC6A6oEwsQnt6KBuK5zQntBqQgkIs+hohZl7SSSh6hevNf8A+4BdglkIvjiP/GOkxr6rGxTnvDLOVzZkaC+vrWPDi5QJIEBbVU= 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=OdTkaEgy; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=b+9pJFAi; arc=none smtp.client-ip=202.12.124.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="OdTkaEgy"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="b+9pJFAi" Received: from phl-compute-02.internal (phl-compute-02.internal [10.202.2.42]) by mailfout.stl.internal (Postfix) with ESMTP id 393421D00109; Sat, 19 Sep 2026 07:50:29 -0400 (EDT) Received: from phl-frontend-04 ([10.202.2.163]) by phl-compute-02.internal (MEProxy); Sat, 19 Sep 2026 07:50: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=1789818629; x= 1789905029; bh=4UTrVd1X6t7D1cKSN/r61DTTtOPeoTFTUu+eVFl26JI=; b=O dTkaEgy1tt+NgZKAU1a7YNevdyHOL5JM+cGWE+5C674m3a32IvVXYpfzpvwRr+Q+ v+DA9gI8gfZZu1l082fg1B+qIHXH2y5xOH8aOKGtwPMi7dN/X87BqbvMnOUl3IHL k38hUq3iI7NyaI8ahlFUFIKnzCr/ulbExwWnzHFnbiPXLLBFd9CLeOM4ODA/yvGH JaQMM0a8Gkz8GNPGc0o6jh9yLuftWkM6kVafV6k41lQ+xWkcQN9SKHQr9+Uy81q6 dyiR5P1e65aC/qzxlwf6QzkiNHxEvSW7YU8NzxN9K7daBi8njylrX95wYBytW2J2 BF/Ho6RcTWmkCu0d38pkg== 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=1789818629; x=1789905029; bh=4 UTrVd1X6t7D1cKSN/r61DTTtOPeoTFTUu+eVFl26JI=; b=b+9pJFAiH/afjhMen wsFr0P1Sev3kZbe7sNJAHaEofrcOD9VmeTVRN7J1vdcZTeNG9i5768P9YmnLmLMJ tUPnpDXfssuVFmwwozHTTPdqPCzrIdCM5XQFprfWoJnTPHMKF75rc1Wc6amiLTK4 7bSkdZYzHge2PjmxoaQbYgLpmrCPRD4kT0ppaYwoU1xbJMogHk0xZiu6xpY1Rsie wzdp7oOoeO3LD2Xd8Y/a7eIAmtXnGky+pgP5YMBC1XBhCXQ3qOREF6a/ZvByB19z rSNDjw26Heza5Cb6PGKjnNtDTqUk2OtXccAo+A9/qLv6B1nMr2Bznw4riJnyoTA6 eyKnw== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: dmFkZTF89Q54GLsKvm4RbZqlKDuUewYy1TCjGEnhC1YTwWhDVU1Gg8XUBhEJm2TFxVZvvI zZEWEbHGf2ZL/pZjpc45k/hrCyAQtJRuufvPYfjuTBfotRHi0VhVl9zEH589EBWb5B7mV/ tfUd2RmdbhW/gTVcrpgviK+UD+Y5c9VHkMn0OFtbpmRapD9LbA6ckmj6VMUOy2adwzCJaQ BezE15MGm6MTQkkQRzD5EoBdxPXwsaCP1b5MkvdulSTaCPXedkrrOZFrvrHQtWUmA/MQcg pYWPbDXBkfElLnA8ESdXyHxJfOUX3+Xp1s4Nd0Jf5roMulsmIdACOHs9ds8uKd54CVcFSu FrJvfGeGAGadFwexTrwSUP3vAPG9WL3bkmiqFNVzs+ZkQw5baeQixF42QnnFrmdbwe2PdA W1u9W/SzS/jw2hT2wmZG5EMT+hg/Bwxwosm6QIp9kDmxjJnwPA/wJaZ9KOpkG7VI8tzuLD oHjZTgXV9MZs0ANwQ+fmsCU6ZG8zwjFgX1iQRErp7g4PsdW8Knzjf52+yr2nbK+RY52mgn kBOY6eQICHPofnKUzZ1wb0y2xS31YGDM1A8OKuZMilksabVoyFjaJHQot/FD/gW3CtUsok Vp6fGQuyyCx11x+dlQ4BwgfGWNLxzELowPZG1GrgrWVyCA5GU+W3cqjOIorw X-ME-Proxy: Feedback-ID: ie8e14432:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Sat, 19 Sep 2026 07:50:28 -0400 (EDT) From: Takashi Sakamoto To: linux1394-devel@lists.sourceforge.net Cc: linux-kernel@vger.kernel.org Subject: [PATCH 5/5] firewire: core: use spinlock without irqsave for card topology_map member Date: Sat, 19 Sep 2026 20:50:17 +0900 Message-ID: <20260919115017.859169-6-o-takashi@sakamocchi.jp> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260919115017.859169-1-o-takashi@sakamocchi.jp> References: <20260919115017.859169-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" Asynchronous packet callbacks are now always invoked in process context. Therefore, the topology_map member is not accessed from IRQ context. Use spin_lock() for the topology_map member since disabling local IRQs is unnecessary. Signed-off-by: Takashi Sakamoto --- drivers/firewire/core-transaction.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/drivers/firewire/core-transaction.c b/drivers/firewire/core-tr= ansaction.c index 91ed85b7aa22..a2a8d755ad0a 100644 --- a/drivers/firewire/core-transaction.c +++ b/drivers/firewire/core-transaction.c @@ -1256,9 +1256,7 @@ static void handle_topology_map(struct fw_card *card,= struct fw_request *request =20 start =3D (offset - topology_map_region.start) / 4; =20 - // NOTE: This can be without irqsave when we can guarantee that fw_send_r= equest() for local - // destination never runs in any type of IRQ context. - scoped_guard(spinlock_irqsave, &card->topology_map.lock) + scoped_guard(spinlock, &card->topology_map.lock) memcpy(payload, &card->topology_map.buffer[start], length); =20 fw_send_response(card, request, RCODE_COMPLETE); --=20 2.53.0