Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ff607631 authored by Eric W. Biederman's avatar Eric W. Biederman Committed by David S. Miller
Browse files

netpoll: Add netpoll_rx_processing



Add a helper netpoll_rx_processing that reports when netpoll has
receive side processing to perform.

Signed-off-by: default avatar"Eric W. Biederman" <ebiederm@xmission.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent e97dc3fc
Loading
Loading
Loading
Loading
+14 −4
Original line number Diff line number Diff line
@@ -82,14 +82,24 @@ static inline void netpoll_send_skb(struct netpoll *np, struct sk_buff *skb)
	local_irq_restore(flags);
}


#ifdef CONFIG_NETPOLL_TRAP
static inline bool netpoll_rx_processing(struct netpoll_info *npinfo)
{
	return !list_empty(&npinfo->rx_np);
}
#else
static inline bool netpoll_rx_processing(struct netpoll_info *npinfo)
{
	return false;
}
#endif

#ifdef CONFIG_NETPOLL
static inline bool netpoll_rx_on(struct sk_buff *skb)
{
	struct netpoll_info *npinfo = rcu_dereference_bh(skb->dev->npinfo);

	return npinfo && (!list_empty(&npinfo->rx_np) || npinfo->rx_flags);
	return npinfo && (netpoll_rx_processing(npinfo) || npinfo->rx_flags);
}

static inline bool netpoll_rx(struct sk_buff *skb)
@@ -105,8 +115,8 @@ static inline bool netpoll_rx(struct sk_buff *skb)

	npinfo = rcu_dereference_bh(skb->dev->npinfo);
	spin_lock(&npinfo->rx_lock);
	/* check rx_flags again with the lock held */
	if (npinfo->rx_flags && __netpoll_rx(skb, npinfo))
	/* check rx_processing again with the lock held */
	if (netpoll_rx_processing(npinfo) && __netpoll_rx(skb, npinfo))
		ret = true;
	spin_unlock(&npinfo->rx_lock);

+2 −2
Original line number Diff line number Diff line
@@ -538,7 +538,7 @@ static void netpoll_neigh_reply(struct sk_buff *skb, struct netpoll_info *npinfo
	int hlen, tlen;
	int hits = 0, proto;

	if (list_empty(&npinfo->rx_np))
	if (!netpoll_rx_processing(npinfo))
		return;

	/* Before checking the packet, we do some early
@@ -770,7 +770,7 @@ int __netpoll_rx(struct sk_buff *skb, struct netpoll_info *npinfo)
	struct netpoll *np, *tmp;
	uint16_t source;

	if (list_empty(&npinfo->rx_np))
	if (!netpoll_rx_processing(npinfo))
		goto out;

	if (skb->dev->type != ARPHRD_ETHER)