All of lore.kernel.org
 help / color / mirror / Atom feed
From: qiang.zhang@linux.dev
To: "Oleksij Rempel" <o.rempel@pengutronix.de>,
	"Jun Miao" <jun.miao@intel.com>
Cc: sbhatta@marvell.com, kuba@kernel.org, oneukum@suse.com,
	netdev@vger.kernel.org, linux-usb@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: Re: [bug report] [PATCH v6] net: usb: Convert tasklet API to new bottom half workqueue mechanism
Date: Sat, 05 Jul 2025 06:41:20 +0000	[thread overview]
Message-ID: <c2e597d2101b588d19a5028b8ae73a33c5240e32@linux.dev> (raw)
In-Reply-To: <74395e33b2175fdb2745211c4ca41e5b2358d80d@linux.dev>

> 
> > 
> > Hi Jun,
> > 
> >  
> > 
> >  On Wed, Jun 18, 2025 at 01:39:23PM -0400, Jun Miao wrote:
> > 
> >  
> > 
> >  
> > 
> >  Migrate tasklet APIs to the new bottom half workqueue mechanism. It
> > 
> >  
> > 
> >  replaces all occurrences of tasklet usage with the appropriate workqueue
> > 
> >  
> > 
> >  APIs throughout the usbnet driver. This transition ensures compatibility
> > 
> >  
> > 
> >  with the latest design and enhances performance.
> > 
> >  
> > 
> >  
> > 
> >  After applying this patch, the smsc95xx driver fails after one down/up
> > 
> >  
> > 
> >  cycle.
> > 
> 
> Hello, Oleksij
> 
> Please try follow patch base on Jun Miao's patchs:
> 

Sorry, please ignore previous, try it:

diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c
index 9564478a79cc..6a3cca104af9 100644
--- a/drivers/net/usb/usbnet.c
+++ b/drivers/net/usb/usbnet.c
@@ -861,14 +861,14 @@ int usbnet_stop (struct net_device *net)
        /* deferred work (timer, softirq, task) must also stop */
        dev->flags = 0;
        timer_delete_sync(&dev->delay);
-       disable_work_sync(&dev->bh_work);
+       cancel_work_sync(&dev->bh_work);
        cancel_work_sync(&dev->kevent);
 
        /* We have cyclic dependencies. Those calls are needed
         * to break a cycle. We cannot fall into the gaps because
         * we have a flag
         */
-       disable_work_sync(&dev->bh_work);
+       cancel_work_sync(&dev->bh_work);
        timer_delete_sync(&dev->delay);
        cancel_work_sync(&dev->kevent);


> diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c
> 
> index 9564478a79cc..554f1a1cf247 100644
> 
> --- a/drivers/net/usb/usbnet.c
> 
> +++ b/drivers/net/usb/usbnet.c
> 
> @@ -953,6 +953,7 @@ int usbnet_open (struct net_device *net)
> 
>  dev->pkt_cnt = 0;
> 
>  dev->pkt_err = 0;
> 
>  clear_bit(EVENT_RX_KILL, &dev->flags);
> 
> + enable_work(&dev->bh_work);
> 
>  
> 
>  // delay posting reads until we're fully open
> 
>  queue_work(system_bh_wq, &dev->bh_work);
> 
> Thanks
> 
> Zqiang
> 
> > 
> > Here is how I can reproduce the issue:
> > 
> >  
> > 
> >  nmcli device set enu1u1 managed no
> > 
> >  
> > 
> >  ip a a 10.10.10.1/24 dev enu1u1
> > 
> >  
> > 
> >  ping -c 4 10.10.10.3
> > 
> >  
> > 
> >  ip l s dev enu1u1 down
> > 
> >  
> > 
> >  ip l s dev enu1u1 up
> > 
> >  
> > 
> >  ping -c 4 10.10.10.3
> > 
> >  
> > 
> >  The second ping does not reach the host. Networking also fails on other
> > 
> >  
> > 
> >  interfaces.
> > 
> >  
> > 
> >  After some delay, the following trace appears:
> > 
> >  
> > 
> >  [ 846.838527] INFO: task kworker/u16:1:308 blocked for more than 120 seconds.
> > 
> >  
> > 
> >  [ 846.838596] Not tainted 6.16.0-rc3-00963-g4fcedea9cdf2-dirty #32
> > 
> >  
> > 
> >  [ 846.838666] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
> > 
> >  
> > 
> >  [ 846.838697] task:kworker/u16:1 state:D stack:0 pid:308 tgid:308 ppid:2
> > 
> >  
> > 
> >  task_flags:0x4208060 flags:0x00000010
> > 
> >  
> > 
> >  [ 846.838776] Workqueue: events_unbound linkwatch_event
> > 
> >  
> > 
> >  [ 846.838851] Call trace:
> > 
> >  
> > 
> >  [ 846.838880] __switch_to+0x1d0/0x330 (T)
> > 
> >  
> > 
> >  [ 846.838933] __schedule+0xa88/0x2a90
> > 
> >  
> > 
> >  [ 846.838980] schedule+0x114/0x428
> > 
> >  
> > 
> >  [ 846.839010] schedule_preempt_disabled+0x80/0x118
> > 
> >  
> > 
> >  [ 846.839036] __mutex_lock+0x764/0xba8
> > 
> >  
> > 
> >  [ 846.839060] mutex_lock_nested+0x28/0x38
> > 
> >  
> > 
> >  [ 846.839084] rtnl_lock+0x20/0x30
> > 
> >  
> > 
> >  [ 846.839115] linkwatch_event+0x18/0x70
> > 
> >  
> > 
> >  [ 846.839141] process_one_work+0x760/0x17b0
> > 
> >  
> > 
> >  [ 846.839175] worker_thread+0x768/0xce8
> > 
> >  
> > 
> >  [ 846.839208] kthread+0x3bc/0x690
> > 
> >  
> > 
> >  [ 846.839237] ret_from_fork+0x10/0x20
> > 
> >  
> > 
> >  [ 846.839359] INFO: task kworker/u16:1:308 is blocked on a mutex likely
> > 
> >  
> > 
> >  owned by task ip:899.
> > 
> >  
> > 
> >  [ 846.839381] task:ip state:D stack:0 pid:899
> > 
> >  
> > 
> >  tgid:899 ppid:1 task_flags:0x400100 flags:0x00000019
> > 
> >  
> > 
> >  [ 846.839419] Call trace:
> > 
> >  
> > 
> >  [ 846.839432] __switch_to+0x1d0/0x330 (T)
> > 
> >  
> > 
> >  [ 846.839466] __schedule+0xa88/0x2a90
> > 
> >  
> > 
> >  [ 846.839495] schedule+0x114/0x428
> > 
> >  
> > 
> >  [ 846.839524] schedule_timeout+0xec/0x220
> > 
> >  
> > 
> >  [ 846.839551] wait_skb_queue_empty+0xa0/0x168
> > 
> >  
> > 
> >  [ 846.839581] usbnet_terminate_urbs+0x150/0x2c8
> > 
> >  
> > 
> >  [ 846.839609] usbnet_stop+0x41c/0x608
> > 
> >  
> > 
> >  [ 846.839636] __dev_close_many+0x1fc/0x4b8
> > 
> >  
> > 
> >  [ 846.839668] __dev_change_flags+0x33c/0x500
> > 
> >  
> > 
> >  [ 846.839694] netif_change_flags+0x7c/0x158
> > 
> >  
> > 
> >  [ 846.839718] do_setlink.isra.0+0x2040/0x2eb8
> > 
> >  
> > 
> >  [ 846.839745] rtnl_newlink+0xd88/0x16c8
> > 
> >  
> > 
> >  [ 846.839770] rtnetlink_rcv_msg+0x654/0x8c8
> > 
> >  
> > 
> >  [ 846.839795] netlink_rcv_skb+0x19c/0x350
> > 
> >  
> > 
> >  [ 846.839823] rtnetlink_rcv+0x1c/0x30
> > 
> >  
> > 
> >  [ 846.839848] netlink_unicast+0x3c4/0x668
> > 
> >  
> > 
> >  [ 846.839873] netlink_sendmsg+0x620/0xa10
> > 
> >  
> > 
> >  [ 846.839899] ____sys_sendmsg+0x2f8/0x788
> > 
> >  
> > 
> >  [ 846.839924] ___sys_sendmsg+0xf0/0x178
> > 
> >  
> > 
> >  [ 846.839950] __sys_sendmsg+0x104/0x198
> > 
> >  
> > 
> >  [ 846.839975] __arm64_sys_sendmsg+0x74/0xa8
> > 
> >  
> > 
> >  [ 846.840000] el0_svc_common.constprop.0+0xe4/0x338
> > 
> >  
> > 
> >  [ 846.840033] do_el0_svc+0x44/0x60
> > 
> >  
> > 
> >  [ 846.840061] el0_svc+0x3c/0xb0
> > 
> >  
> > 
> >  [ 846.840089] el0t_64_sync_handler+0x104/0x130
> > 
> >  
> > 
> >  [ 846.840117] el0t_64_sync+0x154/0x158
> > 
> >  
> > 
> >  [ 846.840164]
> > 
> >  
> > 
> >  [ 846.840164] Showing all locks held in the system:
> > 
> >  
> > 
> >  [ 846.840199] 1 lock held by khungtaskd/41:
> > 
> >  
> > 
> >  [ 846.840216] #0: ffffffc08424ede0 (rcu_read_lock){....}-{1:3}, at: debug_show_all_locks+0x14/0x1b0
> > 
> >  
> > 
> >  [ 846.840309] 3 locks held by kworker/u16:2/47:
> > 
> >  
> > 
> >  [ 846.840325] #0: ffffff800926a148 ((wq_completion)ipv6_addrconf){+.+.}-{0:0}, at: process_one_work+0x698/0x17b0
> > 
> >  
> > 
> >  [ 846.840406] #1: ffffffc0860f7c00 ((work_completion)(&(&net->ipv6.addr_chk_work)->work)){+.+.}-{0:0}, at: process_one_work+0x6bc/0x17b0
> > 
> >  
> > 
> >  [ 846.840484] #2: ffffffc084924408 (rtnl_mutex){+.+.}-{4:4}, at: rtnl_lock+0x20/0x30
> > 
> >  
> > 
> >  [ 846.840568] 2 locks held by pr/ttymxc1/60:
> > 
> >  
> > 
> >  [ 846.840595] 5 locks held by sugov:0/84:
> > 
> >  
> > 
> >  [ 846.840618] 2 locks held by systemd-journal/124:
> > 
> >  
> > 
> >  [ 846.840639] 3 locks held by kworker/u16:1/308:
> > 
> >  
> > 
> >  [ 846.840655] #0: ffffff8005d00148 ((wq_completion)events_unbound){+.+.}-{0:0}, at: process_one_work+0x698/0x17b0
> > 
> >  
> > 
> >  [ 846.840733] #1: ffffffc087307c00 ((linkwatch_work).work){+.+.}-{0:0}, at: process_one_work+0x6bc/0x17b0
> > 
> >  
> > 
> >  [ 846.840810] #2: ffffffc084924408 (rtnl_mutex){+.+.}-{4:4}, at: rtnl_lock+0x20/0x30
> > 
> >  
> > 
> >  [ 846.840894] 1 lock held by ip/899:
> > 
> >  
> > 
> >  [ 846.840910] #0: ffffffc084924408 (rtnl_mutex){+.+.}-{4:4}, at: rtnl_newlink+0x5e8/0x16c8
> > 
> >  
> > 
> >  [ 846.840982] 2 locks held by sshd/901:
> > 
> >  
> > 
> >  [ 846.840998] #0: ffffff800aee06b0 (nlk_cb_mutex-ROUTE){+.+.}-{4:4}, at: __netlink_dump_start+0x100/0x800
> > 
> >  
> > 
> >  [ 846.841073] #1: ffffffc084924408 (rtnl_mutex){+.+.}-{4:4}, at: rtnl_dumpit+0x128/0x1a8
> > 
> >  
> > 
> >  [ 846.841149] 2 locks held by sshd/903:
> > 
> >  
> > 
> >  [ 846.841165] #0: ffffff800b1c76b0 (nlk_cb_mutex-ROUTE){+.+.}-{4:4}, at: __netlink_dump_start+0x100/0x800
> > 
> >  
> > 
> >  [ 846.841237] #1: ffffffc084924408 (rtnl_mutex){+.+.}-{4:4}, at: rtnl_dumpit+0x128/0x1a8
> > 
> >  
> > 
> >  Reverting this patch recovers smsc95xx functionality.
> > 
> >  
> > 
> >  Best Regards,
> > 
> >  
> > 
> >  Oleksij
> >
>

  reply	other threads:[~2025-07-05  6:41 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-06-18 17:39 [PATCH v6] net: usb: Convert tasklet API to new bottom half workqueue mechanism Jun Miao
2025-06-19 22:50 ` patchwork-bot+netdevbpf
2025-07-04 16:40 ` [bug report] " Oleksij Rempel
2025-07-05  6:07   ` qiang.zhang
2025-07-05  6:41     ` qiang.zhang [this message]
2025-07-07  7:09       ` Oleksij Rempel

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=c2e597d2101b588d19a5028b8ae73a33c5240e32@linux.dev \
    --to=qiang.zhang@linux.dev \
    --cc=jun.miao@intel.com \
    --cc=kuba@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=o.rempel@pengutronix.de \
    --cc=oneukum@suse.com \
    --cc=sbhatta@marvell.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.