Skip to content

Commit

Permalink
netpoll: Move netpoll_trap under CONFIG_NETPOLL_TRAP
Browse files Browse the repository at this point in the history
Now that we no longer need to receive packets to safely drain the
network drivers receive queue move netpoll_trap and netpoll_set_trap
under CONFIG_NETPOLL_TRAP

Making netpoll_trap and netpoll_set_trap noop inline functions
when CONFIG_NETPOLL_TRAP is not set.

Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Eric W. Biederman authored and David S. Miller committed Mar 17, 2014
1 parent b6bacd5 commit ad8d475
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 7 deletions.
11 changes: 9 additions & 2 deletions include/linux/netpoll.h
Original file line number Diff line number Diff line change
Expand Up @@ -65,8 +65,6 @@ void netpoll_print_options(struct netpoll *np);
int netpoll_parse_options(struct netpoll *np, char *opt);
int __netpoll_setup(struct netpoll *np, struct net_device *ndev, gfp_t gfp);
int netpoll_setup(struct netpoll *np);
int netpoll_trap(void);
void netpoll_set_trap(int trap);
void __netpoll_cleanup(struct netpoll *np);
void __netpoll_free_async(struct netpoll *np);
void netpoll_cleanup(struct netpoll *np);
Expand All @@ -82,11 +80,20 @@ static inline void netpoll_send_skb(struct netpoll *np, struct sk_buff *skb)
}

#ifdef CONFIG_NETPOLL_TRAP
int netpoll_trap(void);
void netpoll_set_trap(int trap);
static inline bool netpoll_rx_processing(struct netpoll_info *npinfo)
{
return !list_empty(&npinfo->rx_np);
}
#else
static inline int netpoll_trap(void)
{
return 0;
}
static inline void netpoll_set_trap(int trap)
{
}
static inline bool netpoll_rx_processing(struct netpoll_info *npinfo)
{
return false;
Expand Down
14 changes: 9 additions & 5 deletions net/core/netpoll.c
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,9 @@

static struct sk_buff_head skb_pool;

#ifdef CONFIG_NETPOLL_TRAP
static atomic_t trapped;
#endif

DEFINE_STATIC_SRCU(netpoll_srcu);

Expand Down Expand Up @@ -207,7 +209,7 @@ static void netpoll_poll_dev(struct net_device *dev)
}

if (rx_processing)
atomic_inc(&trapped);
netpoll_set_trap(1);

ops = dev->netdev_ops;
if (!ops->ndo_poll_controller) {
Expand All @@ -221,7 +223,7 @@ static void netpoll_poll_dev(struct net_device *dev)
poll_napi(dev, budget);

if (rx_processing)
atomic_dec(&trapped);
netpoll_set_trap(0);

up(&ni->dev_lock);

Expand Down Expand Up @@ -776,10 +778,10 @@ int __netpoll_rx(struct sk_buff *skb, struct netpoll_info *npinfo)
goto out;

/* check if netpoll clients need ARP */
if (skb->protocol == htons(ETH_P_ARP) && atomic_read(&trapped)) {
if (skb->protocol == htons(ETH_P_ARP) && netpoll_trap()) {
skb_queue_tail(&npinfo->neigh_tx, skb);
return 1;
} else if (pkt_is_ns(skb) && atomic_read(&trapped)) {
} else if (pkt_is_ns(skb) && netpoll_trap()) {
skb_queue_tail(&npinfo->neigh_tx, skb);
return 1;
}
Expand Down Expand Up @@ -896,7 +898,7 @@ int __netpoll_rx(struct sk_buff *skb, struct netpoll_info *npinfo)
return 1;

out:
if (atomic_read(&trapped)) {
if (netpoll_trap()) {
kfree_skb(skb);
return 1;
}
Expand Down Expand Up @@ -1302,6 +1304,7 @@ void netpoll_cleanup(struct netpoll *np)
}
EXPORT_SYMBOL(netpoll_cleanup);

#ifdef CONFIG_NETPOLL_TRAP
int netpoll_trap(void)
{
return atomic_read(&trapped);
Expand All @@ -1316,3 +1319,4 @@ void netpoll_set_trap(int trap)
atomic_dec(&trapped);
}
EXPORT_SYMBOL(netpoll_set_trap);
#endif /* CONFIG_NETPOLL_TRAP */

0 comments on commit ad8d475

Please sign in to comment.