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

Commit f0d3459d authored by Matt Mackall's avatar Matt Mackall Committed by David S. Miller
Browse files

[NETPOLL]: netpoll_send_skb simplify



Minor netpoll_send_skb restructuring

Restructure to avoid confusing goto and move some bits out of the
retry loop.

Signed-off-by: default avatarMatt Mackall <mpm@selenic.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 6b0b3157
Loading
Loading
Loading
Loading
+22 −20
Original line number Diff line number Diff line
@@ -248,14 +248,14 @@ static void netpoll_send_skb(struct netpoll *np, struct sk_buff *skb)
	int status;
	struct netpoll_info *npinfo;

repeat:
	if (!np || !np->dev || !netif_running(np->dev)) {
		__kfree_skb(skb);
		return;
	}

	/* avoid recursion */
	npinfo = np->dev->npinfo;

	/* avoid recursion */
	if (npinfo->poll_owner == smp_processor_id() ||
	    np->dev->xmit_lock_owner == smp_processor_id()) {
		if (np->drop)
@@ -265,6 +265,7 @@ repeat:
		return;
	}

	while (1) {
		spin_lock(&np->dev->xmit_lock);
		np->dev->xmit_lock_owner = smp_processor_id();

@@ -275,19 +276,20 @@ repeat:
		if (netif_queue_stopped(np->dev)) {
			np->dev->xmit_lock_owner = -1;
			spin_unlock(&np->dev->xmit_lock);

			netpoll_poll(np);
		goto repeat;
			continue;
		}

		status = np->dev->hard_start_xmit(skb, np->dev);
		np->dev->xmit_lock_owner = -1;
		spin_unlock(&np->dev->xmit_lock);

		/* success */
		if(!status)
			return;

		/* transmit busy */
	if(status) {
		netpoll_poll(np);
		goto repeat;
	}
}