diff options
Diffstat (limited to 'include/linux')
-rw-r--r-- | include/linux/netdevice.h | 38 |
1 files changed, 35 insertions, 3 deletions
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index b5760c67af9c..067b9ccafd87 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h | |||
@@ -407,7 +407,7 @@ struct net_device | |||
407 | * One part is mostly used on xmit path (device) | 407 | * One part is mostly used on xmit path (device) |
408 | */ | 408 | */ |
409 | /* hard_start_xmit synchronizer */ | 409 | /* hard_start_xmit synchronizer */ |
410 | spinlock_t xmit_lock ____cacheline_aligned_in_smp; | 410 | spinlock_t _xmit_lock ____cacheline_aligned_in_smp; |
411 | /* cpu id of processor entered to hard_start_xmit or -1, | 411 | /* cpu id of processor entered to hard_start_xmit or -1, |
412 | if nobody entered there. | 412 | if nobody entered there. |
413 | */ | 413 | */ |
@@ -893,11 +893,43 @@ static inline void __netif_rx_complete(struct net_device *dev) | |||
893 | clear_bit(__LINK_STATE_RX_SCHED, &dev->state); | 893 | clear_bit(__LINK_STATE_RX_SCHED, &dev->state); |
894 | } | 894 | } |
895 | 895 | ||
896 | static inline void netif_tx_lock(struct net_device *dev) | ||
897 | { | ||
898 | spin_lock(&dev->_xmit_lock); | ||
899 | dev->xmit_lock_owner = smp_processor_id(); | ||
900 | } | ||
901 | |||
902 | static inline void netif_tx_lock_bh(struct net_device *dev) | ||
903 | { | ||
904 | spin_lock_bh(&dev->_xmit_lock); | ||
905 | dev->xmit_lock_owner = smp_processor_id(); | ||
906 | } | ||
907 | |||
908 | static inline int netif_tx_trylock(struct net_device *dev) | ||
909 | { | ||
910 | int err = spin_trylock(&dev->_xmit_lock); | ||
911 | if (!err) | ||
912 | dev->xmit_lock_owner = smp_processor_id(); | ||
913 | return err; | ||
914 | } | ||
915 | |||
916 | static inline void netif_tx_unlock(struct net_device *dev) | ||
917 | { | ||
918 | dev->xmit_lock_owner = -1; | ||
919 | spin_unlock(&dev->_xmit_lock); | ||
920 | } | ||
921 | |||
922 | static inline void netif_tx_unlock_bh(struct net_device *dev) | ||
923 | { | ||
924 | dev->xmit_lock_owner = -1; | ||
925 | spin_unlock_bh(&dev->_xmit_lock); | ||
926 | } | ||
927 | |||
896 | static inline void netif_tx_disable(struct net_device *dev) | 928 | static inline void netif_tx_disable(struct net_device *dev) |
897 | { | 929 | { |
898 | spin_lock_bh(&dev->xmit_lock); | 930 | netif_tx_lock_bh(dev); |
899 | netif_stop_queue(dev); | 931 | netif_stop_queue(dev); |
900 | spin_unlock_bh(&dev->xmit_lock); | 932 | netif_tx_unlock_bh(dev); |
901 | } | 933 | } |
902 | 934 | ||
903 | /* These functions live elsewhere (drivers/net/net_init.c, but related) */ | 935 | /* These functions live elsewhere (drivers/net/net_init.c, but related) */ |