struct net_device synchronization rules ======================================= dev->open: Locking: Inside rtnl_lock() semaphore. Sleeping: OK dev->stop: Locking: Inside rtnl_lock() semaphore. Sleeping: OK dev->do_ioctl: Locking: Inside rtnl_lock() semaphore. Sleeping: OK dev->get_stats: Locking: Inside dev_base_lock spinlock. Sleeping: NO dev->hard_start_xmit: Locking: Inside dev->xmit_lock spinlock. Sleeping: NO[1] dev->tx_timeout: Locking: Inside dev->xmit_lock spinlock. Sleeping: NO[1] dev->set_multicast_list: Locking: Inside dev->xmit_lock spinlock. Sleeping: NO[1] NOTE [1]: On principle, you should not sleep when a spinlock is held. However, since this spinlock is per-net-device, we only block ourselves if we sleep, so the effect is mitigated.