diff options
Diffstat (limited to 'include/linux/netpoll.h')
| -rw-r--r-- | include/linux/netpoll.h | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/include/linux/netpoll.h b/include/linux/netpoll.h index 2524267210d3..a765ea898549 100644 --- a/include/linux/netpoll.h +++ b/include/linux/netpoll.h | |||
| @@ -21,15 +21,20 @@ struct netpoll { | |||
| 21 | __be32 local_ip, remote_ip; | 21 | __be32 local_ip, remote_ip; |
| 22 | u16 local_port, remote_port; | 22 | u16 local_port, remote_port; |
| 23 | u8 remote_mac[ETH_ALEN]; | 23 | u8 remote_mac[ETH_ALEN]; |
| 24 | |||
| 25 | struct list_head rx; /* rx_np list element */ | ||
| 24 | }; | 26 | }; |
| 25 | 27 | ||
| 26 | struct netpoll_info { | 28 | struct netpoll_info { |
| 27 | atomic_t refcnt; | 29 | atomic_t refcnt; |
| 30 | |||
| 28 | int rx_flags; | 31 | int rx_flags; |
| 29 | spinlock_t rx_lock; | 32 | spinlock_t rx_lock; |
| 30 | struct netpoll *rx_np; /* netpoll that registered an rx_hook */ | 33 | struct list_head rx_np; /* netpolls that registered an rx_hook */ |
| 34 | |||
| 31 | struct sk_buff_head arp_tx; /* list of arp requests to reply to */ | 35 | struct sk_buff_head arp_tx; /* list of arp requests to reply to */ |
| 32 | struct sk_buff_head txq; | 36 | struct sk_buff_head txq; |
| 37 | |||
| 33 | struct delayed_work tx_work; | 38 | struct delayed_work tx_work; |
| 34 | }; | 39 | }; |
| 35 | 40 | ||
| @@ -51,7 +56,7 @@ static inline int netpoll_rx(struct sk_buff *skb) | |||
| 51 | unsigned long flags; | 56 | unsigned long flags; |
| 52 | int ret = 0; | 57 | int ret = 0; |
| 53 | 58 | ||
| 54 | if (!npinfo || (!npinfo->rx_np && !npinfo->rx_flags)) | 59 | if (!npinfo || (list_empty(&npinfo->rx_np) && !npinfo->rx_flags)) |
| 55 | return 0; | 60 | return 0; |
| 56 | 61 | ||
| 57 | spin_lock_irqsave(&npinfo->rx_lock, flags); | 62 | spin_lock_irqsave(&npinfo->rx_lock, flags); |
| @@ -67,7 +72,7 @@ static inline int netpoll_rx_on(struct sk_buff *skb) | |||
| 67 | { | 72 | { |
| 68 | struct netpoll_info *npinfo = skb->dev->npinfo; | 73 | struct netpoll_info *npinfo = skb->dev->npinfo; |
| 69 | 74 | ||
| 70 | return npinfo && (npinfo->rx_np || npinfo->rx_flags); | 75 | return npinfo && (!list_empty(&npinfo->rx_np) || npinfo->rx_flags); |
| 71 | } | 76 | } |
| 72 | 77 | ||
| 73 | static inline int netpoll_receive_skb(struct sk_buff *skb) | 78 | static inline int netpoll_receive_skb(struct sk_buff *skb) |
