Marc Kleine-Budde <mkl@xxxxxxxxxxxxxx> : > The dm9000 takes the db->lock spin lock in dm9000_timeout() and calls > into dm9000_init_dm9000(). For the DM9000B the PHY is reset with > dm9000_phy_write(). That function again takes the db->lock spin lock, > which results in a deadlock. For reference the backtrace: [...] > To workaround similar problem (take mutex inside spin lock ) , a > "in_timeout" variable was added in 582379839bbd ("dm9000: avoid > sleeping in dm9000_timeout callback"). Use this variable and not take > the spin lock inside dm9000_phy_write() if in_timeout is true. > > Cc: stable@xxxxxxxxxxxxxxx > Signed-off-by: Marc Kleine-Budde <mkl@xxxxxxxxxxxxxx> > --- > During the netdev watchdog handling the dm9000 driver takes the same > spin lock twice. Avoid this by extending an existing workaround. > --- I can review it but I can't really endorse it. :o) Extending ugly workaround in pre-2000 style device drivers... I'd rather see the thing fixed if there is some real use for it. -- Ueimor