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

Commit ebda37c2 authored by Eric Dumazet's avatar Eric Dumazet Committed by David S. Miller
Browse files

rps: avoid one atomic in enqueue_to_backlog



If CONFIG_SMP=y, then we own a queue spinlock, we can avoid the atomic
test_and_set_bit() from napi_schedule_prep().

We now have same number of atomic ops per netif_rx() calls than with
pre-RPS kernel.

Signed-off-by: default avatarEric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 3f78d1f2
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -2432,8 +2432,10 @@ enqueue:
			return NET_RX_SUCCESS;
		}

		/* Schedule NAPI for backlog device */
		if (napi_schedule_prep(&sd->backlog)) {
		/* Schedule NAPI for backlog device
		 * We can use non atomic operation since we own the queue lock
		 */
		if (!__test_and_set_bit(NAPI_STATE_SCHED, &sd->backlog.state)) {
			if (!rps_ipi_queued(sd))
				____napi_schedule(sd, &sd->backlog);
		}