Hi,
  In this patch, I don't change the routine of dm9000_phy_write().
  I just abstract the real phy operation from dm9000_phy_write()
  to make a new function dm9000_phy_write_reg(),
  which contains no lock.

  It is called in dm9000_phy_write() or dm9000_init_dm9000().
  Since dm9000_timeout() holds the main spinlock through the
  entire routine, dm9000_phy_write_reg() called in this routine is
  protected from another thread. I think there is no need to
  acquire any locks.

  The only problem is dm9000_init_dm9000() may be called
  in dm9000_open(). If another thread calls dm9000_open()
  in timeout may cause race condition.

  dm9000_init_dm9000() needs lock to avoid race condition,
  did you mean that?
  Thanks!

Reply via email to