hc
2023-12-11 d2ccde1c8e90d38cee87a1b0309ad2827f3fd30d
kernel/drivers/net/wireguard/send.c
....@@ -239,8 +239,7 @@
239239 wg_packet_send_staged_packets(peer);
240240 }
241241
242
-static void wg_packet_create_data_done(struct sk_buff *first,
243
- struct wg_peer *peer)
242
+static void wg_packet_create_data_done(struct wg_peer *peer, struct sk_buff *first)
244243 {
245244 struct sk_buff *skb, *next;
246245 bool is_keepalive, data_sent = false;
....@@ -262,22 +261,19 @@
262261
263262 void wg_packet_tx_worker(struct work_struct *work)
264263 {
265
- struct crypt_queue *queue = container_of(work, struct crypt_queue,
266
- work);
264
+ struct wg_peer *peer = container_of(work, struct wg_peer, transmit_packet_work);
267265 struct noise_keypair *keypair;
268266 enum packet_state state;
269267 struct sk_buff *first;
270
- struct wg_peer *peer;
271268
272
- while ((first = __ptr_ring_peek(&queue->ring)) != NULL &&
269
+ while ((first = wg_prev_queue_peek(&peer->tx_queue)) != NULL &&
273270 (state = atomic_read_acquire(&PACKET_CB(first)->state)) !=
274271 PACKET_STATE_UNCRYPTED) {
275
- __ptr_ring_discard_one(&queue->ring);
276
- peer = PACKET_PEER(first);
272
+ wg_prev_queue_drop_peeked(&peer->tx_queue);
277273 keypair = PACKET_CB(first)->keypair;
278274
279275 if (likely(state == PACKET_STATE_CRYPTED))
280
- wg_packet_create_data_done(first, peer);
276
+ wg_packet_create_data_done(peer, first);
281277 else
282278 kfree_skb_list(first);
283279
....@@ -306,16 +302,14 @@
306302 break;
307303 }
308304 }
309
- wg_queue_enqueue_per_peer(&PACKET_PEER(first)->tx_queue, first,
310
- state);
305
+ wg_queue_enqueue_per_peer_tx(first, state);
311306 if (need_resched())
312307 cond_resched();
313308 }
314309 }
315310
316
-static void wg_packet_create_data(struct sk_buff *first)
311
+static void wg_packet_create_data(struct wg_peer *peer, struct sk_buff *first)
317312 {
318
- struct wg_peer *peer = PACKET_PEER(first);
319313 struct wg_device *wg = peer->device;
320314 int ret = -EINVAL;
321315
....@@ -323,13 +317,10 @@
323317 if (unlikely(READ_ONCE(peer->is_dead)))
324318 goto err;
325319
326
- ret = wg_queue_enqueue_per_device_and_peer(&wg->encrypt_queue,
327
- &peer->tx_queue, first,
328
- wg->packet_crypt_wq,
329
- &wg->encrypt_queue.last_cpu);
320
+ ret = wg_queue_enqueue_per_device_and_peer(&wg->encrypt_queue, &peer->tx_queue, first,
321
+ wg->packet_crypt_wq, &wg->encrypt_queue.last_cpu);
330322 if (unlikely(ret == -EPIPE))
331
- wg_queue_enqueue_per_peer(&peer->tx_queue, first,
332
- PACKET_STATE_DEAD);
323
+ wg_queue_enqueue_per_peer_tx(first, PACKET_STATE_DEAD);
333324 err:
334325 rcu_read_unlock_bh();
335326 if (likely(!ret || ret == -EPIPE))
....@@ -393,7 +384,7 @@
393384 packets.prev->next = NULL;
394385 wg_peer_get(keypair->entry.peer);
395386 PACKET_CB(packets.next)->keypair = keypair;
396
- wg_packet_create_data(packets.next);
387
+ wg_packet_create_data(peer, packets.next);
397388 return;
398389
399390 out_invalid: