From 9c1a628121770c6d16a500cd2a1886076e4d8e88 Mon Sep 17 00:00:00 2001 From: "Jason A. Donenfeld" Date: Fri, 15 Sep 2017 03:45:41 +0200 Subject: Try out spinlocks for multiconsumer --- src/device.h | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) (limited to 'src/device.h') diff --git a/src/device.h b/src/device.h index 047fdf5..9378b8b 100644 --- a/src/device.h +++ b/src/device.h @@ -16,15 +16,25 @@ struct wireguard_device; -struct handshake_worker { - struct wireguard_device *wg; +struct multicore_worker { + union { + struct wireguard_device *wg; + struct crypt_queue *queue; + }; struct work_struct work; }; struct crypt_queue { + spinlock_t lock; struct list_head list; - struct work_struct work; - atomic_t qlen; + union { + struct { + struct multicore_worker __percpu *worker; + int last_cpu; + }; + struct work_struct work; + }; + int qlen; }; struct wireguard_device { @@ -37,9 +47,9 @@ struct wireguard_device { struct noise_static_identity static_identity; struct workqueue_struct *handshake_receive_wq, *handshake_send_wq, *packet_crypt_wq; struct sk_buff_head incoming_handshakes; - struct crypt_queue __percpu *send_queue, *receive_queue; - int incoming_handshake_cpu, encrypt_cpu, decrypt_cpu; - struct handshake_worker __percpu *incoming_handshakes_worker; + struct crypt_queue send_queue, receive_queue; + int incoming_handshake_cpu; + struct multicore_worker __percpu *incoming_handshakes_worker; struct cookie_checker cookie_checker; struct pubkey_hashtable peer_hashtable; struct index_hashtable index_hashtable; -- cgit v1.2.3-59-g8ed1b