diff options
author | Jason A. Donenfeld <Jason@zx2c4.com> | 2020-04-22 02:13:42 -0600 |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2020-04-22 02:13:42 -0600 |
commit | 0181fa1ec0cfd002b49480c116ca3d7a59ddd99a (patch) | |
tree | 33c8375f00bfd38e7b648535b26c6493c2474b38 /drivers/net/wireguard/device.c | |
parent | 71a7269d778f9a131d1cecbfdb3cd00c248131a8 (diff) | |
download | wireguard-linux-trimmed-0181fa1ec0cfd002b49480c116ca3d7a59ddd99a.tar.gz wireguard-linux-trimmed-0181fa1ec0cfd002b49480c116ca3d7a59ddd99a.zip |
wireguard: unify encryption and decryption workersjd/unified-crypt-queue
By unifying encryption and decryption workers into a single worker, this
ensures that encryption and decryption happening at the same time does
not result in workqueues stepping on each other and creating
unnecessary work for the scheduler.
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to 'drivers/net/wireguard/device.c')
-rw-r--r-- | drivers/net/wireguard/device.c | 18 |
1 files changed, 5 insertions, 13 deletions
diff --git a/drivers/net/wireguard/device.c b/drivers/net/wireguard/device.c index 3ac3f85..9dee3cb 100644 --- a/drivers/net/wireguard/device.c +++ b/drivers/net/wireguard/device.c @@ -232,8 +232,7 @@ static void wg_destruct(struct net_device *dev) destroy_workqueue(wg->handshake_receive_wq); destroy_workqueue(wg->handshake_send_wq); destroy_workqueue(wg->packet_crypt_wq); - wg_packet_queue_free(&wg->decrypt_queue, true); - wg_packet_queue_free(&wg->encrypt_queue, true); + wg_packet_queue_free(&wg->crypt_queue, true); rcu_barrier(); /* Wait for all the peers to be actually freed. */ wg_ratelimiter_uninit(); memzero_explicit(&wg->static_identity, sizeof(wg->static_identity)); @@ -335,19 +334,14 @@ static int wg_newlink(struct net *src_net, struct net_device *dev, if (!wg->packet_crypt_wq) goto err_destroy_handshake_send; - ret = wg_packet_queue_init(&wg->encrypt_queue, wg_packet_encrypt_worker, + ret = wg_packet_queue_init(&wg->crypt_queue, wg_packet_crypt_worker, true, MAX_QUEUED_PACKETS); if (ret < 0) goto err_destroy_packet_crypt; - ret = wg_packet_queue_init(&wg->decrypt_queue, wg_packet_decrypt_worker, - true, MAX_QUEUED_PACKETS); - if (ret < 0) - goto err_free_encrypt_queue; - ret = wg_ratelimiter_init(); if (ret < 0) - goto err_free_decrypt_queue; + goto err_free_crypt_queue; ret = register_netdevice(dev); if (ret < 0) @@ -365,10 +359,8 @@ static int wg_newlink(struct net *src_net, struct net_device *dev, err_uninit_ratelimiter: wg_ratelimiter_uninit(); -err_free_decrypt_queue: - wg_packet_queue_free(&wg->decrypt_queue, true); -err_free_encrypt_queue: - wg_packet_queue_free(&wg->encrypt_queue, true); +err_free_crypt_queue: + wg_packet_queue_free(&wg->crypt_queue, true); err_destroy_packet_crypt: destroy_workqueue(wg->packet_crypt_wq); err_destroy_handshake_send: |