# Re: "deadlock" between smc91x driver and link\_watch

- From: Andrew Morton \<hidden\>
- Date: 2004-11-24 09:47:12 
- List: netdev
- Page: https://ratatoskr.run/netdev/2004/11/690417
- Thread: https://ratatoskr.run/lkml/2004/11/690163/t.md

```text
Ian Campbell [ref] wrote:
>
>  On Tue, 2004-11-23 at 15:31 -0800, Andrew Morton wrote:
>  > One possible fix would be to remove that flush_scheduled_work() and to do
>  > refcounting around smc_phy_configure(): dev_hold() when scheduling the work
>  > (if schedule_work() returned true), dev_put() in the handler.
> 
>  Something like the following?

I think so.

>  +static void smc_phy_configure_wq(void *data)
>  +{
>  +	struct net_device *dev = data;
>  +	dev_put(dev);
>  +	smc_phy_configure(data);
>  +}

You'd want to do the dev_put() after the smc_phy_configure() though.  It
may still be a tiny bit racy against module unload.
```
