diff options
Diffstat (limited to 'drivers/net/wireguard/send.c')
| -rw-r--r-- | drivers/net/wireguard/send.c | 20 | 
1 files changed, 10 insertions, 10 deletions
| diff --git a/drivers/net/wireguard/send.c b/drivers/net/wireguard/send.c index 7348c10cbae3..6687db699803 100644 --- a/drivers/net/wireguard/send.c +++ b/drivers/net/wireguard/send.c @@ -124,20 +124,17 @@ void wg_packet_send_handshake_cookie(struct wg_device *wg,  static void keep_key_fresh(struct wg_peer *peer)  {  	struct noise_keypair *keypair; -	bool send = false; +	bool send;  	rcu_read_lock_bh();  	keypair = rcu_dereference_bh(peer->keypairs.current_keypair); -	if (likely(keypair && READ_ONCE(keypair->sending.is_valid)) && -	    (unlikely(atomic64_read(&keypair->sending.counter.counter) > -		      REKEY_AFTER_MESSAGES) || -	     (keypair->i_am_the_initiator && -	      unlikely(wg_birthdate_has_expired(keypair->sending.birthdate, -						REKEY_AFTER_TIME))))) -		send = true; +	send = keypair && READ_ONCE(keypair->sending.is_valid) && +	       (atomic64_read(&keypair->sending.counter.counter) > REKEY_AFTER_MESSAGES || +		(keypair->i_am_the_initiator && +		 wg_birthdate_has_expired(keypair->sending.birthdate, REKEY_AFTER_TIME)));  	rcu_read_unlock_bh(); -	if (send) +	if (unlikely(send))  		wg_packet_send_queued_handshake_initiation(peer, false);  } @@ -281,6 +278,8 @@ void wg_packet_tx_worker(struct work_struct *work)  		wg_noise_keypair_put(keypair, false);  		wg_peer_put(peer); +		if (need_resched()) +			cond_resched();  	}  } @@ -304,7 +303,8 @@ void wg_packet_encrypt_worker(struct work_struct *work)  		}  		wg_queue_enqueue_per_peer(&PACKET_PEER(first)->tx_queue, first,  					  state); - +		if (need_resched()) +			cond_resched();  	}  } |