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

Commit 2b5cd0df authored by Alexander Duyck's avatar Alexander Duyck Committed by David S. Miller
Browse files

net: Change return type of sk_busy_loop from bool to void



checking the return value of sk_busy_loop. As there are only a few
consumers of that data, and the data being checked for can be replaced
with a check for !skb_queue_empty() we might as well just pull the code
out of sk_busy_loop and place it in the spots that actually need it.

Signed-off-by: default avatarAlexander Duyck <alexander.h.duyck@intel.com>
Acked-by: default avatarEric Dumazet <edumazet@google.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent d2e64dbb
Loading
Loading
Loading
Loading
+2 −3
Original line number Diff line number Diff line
@@ -74,7 +74,7 @@ static inline bool busy_loop_timeout(unsigned long end_time)
	return time_after(now, end_time);
}

bool sk_busy_loop(struct sock *sk, int nonblock);
void sk_busy_loop(struct sock *sk, int nonblock);

#else /* CONFIG_NET_RX_BUSY_POLL */
static inline unsigned long net_busy_loop_on(void)
@@ -97,9 +97,8 @@ static inline bool busy_loop_timeout(unsigned long end_time)
	return true;
}

static inline bool sk_busy_loop(struct sock *sk, int nonblock)
static inline void sk_busy_loop(struct sock *sk, int nonblock)
{
	return false;
}

#endif /* CONFIG_NET_RX_BUSY_POLL */
+6 −2
Original line number Diff line number Diff line
@@ -256,8 +256,12 @@ struct sk_buff *__skb_try_recv_datagram(struct sock *sk, unsigned int flags,
		}

		spin_unlock_irqrestore(&queue->lock, cpu_flags);
	} while (sk_can_busy_loop(sk) &&
		 sk_busy_loop(sk, flags & MSG_DONTWAIT));

		if (!sk_can_busy_loop(sk))
			break;

		sk_busy_loop(sk, flags & MSG_DONTWAIT);
	} while (!skb_queue_empty(&sk->sk_receive_queue));

	error = -EAGAIN;

+11 −14
Original line number Diff line number Diff line
@@ -5060,21 +5060,19 @@ static void busy_poll_stop(struct napi_struct *napi, void *have_poll_lock)
		do_softirq();
}

bool sk_busy_loop(struct sock *sk, int nonblock)
void sk_busy_loop(struct sock *sk, int nonblock)
{
	unsigned long end_time = !nonblock ? sk_busy_loop_end_time(sk) : 0;
	int (*napi_poll)(struct napi_struct *napi, int budget);
	void *have_poll_lock = NULL;
	struct napi_struct *napi;
	unsigned int napi_id;
	int rc;

restart:
	napi_id = READ_ONCE(sk->sk_napi_id);
	if (napi_id < MIN_NAPI_ID)
		return 0;
		return;

	rc = false;
	napi_poll = NULL;

	rcu_read_lock();
@@ -5085,7 +5083,8 @@ bool sk_busy_loop(struct sock *sk, int nonblock)

	preempt_disable();
	for (;;) {
		rc = 0;
		int work = 0;

		local_bh_disable();
		if (!napi_poll) {
			unsigned long val = READ_ONCE(napi->state);
@@ -5103,12 +5102,12 @@ bool sk_busy_loop(struct sock *sk, int nonblock)
			have_poll_lock = netpoll_poll_lock(napi);
			napi_poll = napi->poll;
		}
		rc = napi_poll(napi, BUSY_POLL_BUDGET);
		trace_napi_poll(napi, rc, BUSY_POLL_BUDGET);
		work = napi_poll(napi, BUSY_POLL_BUDGET);
		trace_napi_poll(napi, work, BUSY_POLL_BUDGET);
count:
		if (rc > 0)
		if (work > 0)
			__NET_ADD_STATS(sock_net(sk),
					LINUX_MIB_BUSYPOLLRXPACKETS, rc);
					LINUX_MIB_BUSYPOLLRXPACKETS, work);
		local_bh_enable();

		if (nonblock || !skb_queue_empty(&sk->sk_receive_queue) ||
@@ -5121,9 +5120,9 @@ bool sk_busy_loop(struct sock *sk, int nonblock)
			preempt_enable();
			rcu_read_unlock();
			cond_resched();
			rc = !skb_queue_empty(&sk->sk_receive_queue);
			if (rc || busy_loop_timeout(end_time))
				return rc;
			if (!skb_queue_empty(&sk->sk_receive_queue) ||
			    busy_loop_timeout(end_time))
				return;
			goto restart;
		}
		cpu_relax();
@@ -5131,10 +5130,8 @@ bool sk_busy_loop(struct sock *sk, int nonblock)
	if (napi_poll)
		busy_poll_stop(napi, have_poll_lock);
	preempt_enable();
	rc = !skb_queue_empty(&sk->sk_receive_queue);
out:
	rcu_read_unlock();
	return rc;
}
EXPORT_SYMBOL(sk_busy_loop);

+6 −3
Original line number Diff line number Diff line
@@ -7518,9 +7518,12 @@ struct sk_buff *sctp_skb_recv_datagram(struct sock *sk, int flags,
		if (sk->sk_shutdown & RCV_SHUTDOWN)
			break;

		if (sk_can_busy_loop(sk) &&
		    sk_busy_loop(sk, noblock))
		if (sk_can_busy_loop(sk)) {
			sk_busy_loop(sk, noblock);

			if (!skb_queue_empty(&sk->sk_receive_queue))
				continue;
		}

		/* User doesn't want to wait.  */
		error = -EAGAIN;