The existing implementation had a single lock for tx and rx paths.
This resulted in creating dependencies between tx and rx paths. For
example a Rx interrupt had to wait for the start_xmit routine to
finish. This could also result in potential locking issues as
reported by running on Qemu.
This patch uses two locks(one each for tx and rx paths) instead
of a single lock. This patch avoids to the extent possible not to
disable IRQs (avoids spin-lock-irqsave) and instead uses spin-lock-bh.
This effectively makes the Tx and Rx paths independent of each other.
This patch addresses all concerns (because of this new implementation)
related to inadvertent corruption of registers.