Re: [PATCH v6 net-next,mips 6/7] netdev: octeon-ethernet: Add Cavium Octeon III support.
From: David Miller <hidden>
Date: 2017-12-08 19:29:36
Also in:
linux-mips, lkml, netdev
From: David Miller <hidden>
Date: 2017-12-08 19:29:36
Also in:
linux-mips, lkml, netdev
From: David Daney <david.daney-YGCgFSpz5w/QT0dZR+AlfA@public.gmane.org> Date: Thu, 7 Dec 2017 16:09:33 -0800
+static void bgx_port_check_state(struct work_struct *work)
+{...
+ mutex_lock(&priv->lock); + if (priv->work_queued) + queue_delayed_work(check_state_wq, &priv->dwork, HZ); + mutex_unlock(&priv->lock); +}
...
+int bgx_port_disable(struct net_device *netdev)
+{...
+ mutex_lock(&priv->lock);
+ if (priv->work_queued) {
+ cancel_delayed_work_sync(&priv->dwork);
+ priv->work_queued = false;This can deadlock. When you do a sync work cancel, it waits until all running work instances finish. You have the priv->lock, so if bgx_port_check_status() need to still take priv->lock to complete then no further progress will be made. I think it is pointless to use this weird work_queued boolean state. Just unconditionally, and without locking, cancel the delayed work, ragardless of whether it was actually used ever or not. Thank you. -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html