wireguard: queueing: get rid of per-peer ring buffers
[linux-2.6-microblaze.git] / drivers / net / wireguard / receive.c
index 2c9551e..7dc84bc 100644 (file)
@@ -444,7 +444,6 @@ packet_processed:
 int wg_packet_rx_poll(struct napi_struct *napi, int budget)
 {
        struct wg_peer *peer = container_of(napi, struct wg_peer, napi);
-       struct crypt_queue *queue = &peer->rx_queue;
        struct noise_keypair *keypair;
        struct endpoint endpoint;
        enum packet_state state;
@@ -455,11 +454,10 @@ int wg_packet_rx_poll(struct napi_struct *napi, int budget)
        if (unlikely(budget <= 0))
                return 0;
 
-       while ((skb = __ptr_ring_peek(&queue->ring)) != NULL &&
+       while ((skb = wg_prev_queue_peek(&peer->rx_queue)) != NULL &&
               (state = atomic_read_acquire(&PACKET_CB(skb)->state)) !=
                       PACKET_STATE_UNCRYPTED) {
-               __ptr_ring_discard_one(&queue->ring);
-               peer = PACKET_PEER(skb);
+               wg_prev_queue_drop_peeked(&peer->rx_queue);
                keypair = PACKET_CB(skb)->keypair;
                free = true;
 
@@ -508,7 +506,7 @@ void wg_packet_decrypt_worker(struct work_struct *work)
                enum packet_state state =
                        likely(decrypt_packet(skb, PACKET_CB(skb)->keypair)) ?
                                PACKET_STATE_CRYPTED : PACKET_STATE_DEAD;
-               wg_queue_enqueue_per_peer_napi(skb, state);
+               wg_queue_enqueue_per_peer_rx(skb, state);
                if (need_resched())
                        cond_resched();
        }
@@ -531,12 +529,10 @@ static void wg_packet_consume_data(struct wg_device *wg, struct sk_buff *skb)
        if (unlikely(READ_ONCE(peer->is_dead)))
                goto err;
 
-       ret = wg_queue_enqueue_per_device_and_peer(&wg->decrypt_queue,
-                                                  &peer->rx_queue, skb,
-                                                  wg->packet_crypt_wq,
-                                                  &wg->decrypt_queue.last_cpu);
+       ret = wg_queue_enqueue_per_device_and_peer(&wg->decrypt_queue, &peer->rx_queue, skb,
+                                                  wg->packet_crypt_wq, &wg->decrypt_queue.last_cpu);
        if (unlikely(ret == -EPIPE))
-               wg_queue_enqueue_per_peer_napi(skb, PACKET_STATE_DEAD);
+               wg_queue_enqueue_per_peer_rx(skb, PACKET_STATE_DEAD);
        if (likely(!ret || ret == -EPIPE)) {
                rcu_read_unlock_bh();
                return;