On Wed, Mar 27, 2024 at 04:03:09PM +0000, Allen Pais wrote:
The only generic interface to execute asynchronously in the BH context is
tasklet; however, it's marked deprecated and has some design flaws. To
replace tasklets, BH workqueue support was recently added. A BH workqueue
behaves similarly to regular workqueues except that the queued work items
are executed in the BH context.
This patch converts drivers/infiniband/* from tasklet to BH workqueue.
Based on the work done by Tejun Heo [off-list ref]
Branch: https://git.kernel.org/pub/scm/linux/kernel/git/tj/wq.git for-6.10
Signed-off-by: Allen Pais <redacted>
---
quoted hunk ↗ jump to hunk
diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c
index c0e005670d67..88d8e1c366cd 100644
--- a/drivers/usb/core/hcd.c
+++ b/drivers/usb/core/hcd.c
quoted hunk ↗ jump to hunk
@@ -1662,10 +1663,9 @@ static void __usb_hcd_giveback_urb(struct urb *urb)
usb_put_urb(urb);
}
-static void usb_giveback_urb_bh(struct work_struct *work)
+static void usb_giveback_urb_bh(struct work_struct *t)
{
- struct giveback_urb_bh *bh =
- container_of(work, struct giveback_urb_bh, bh);
+ struct giveback_urb_bh *bh = from_work(bh, t, bh);
struct list_head local_list;
spin_lock_irq(&bh->lock);
Is there any reason for this apparently pointless change of a local
variable's name?
Alan Stern