1 // SPDX-License-Identifier: GPL-2.0
8 struct multicore_worker __percpu *
9 wg_packet_percpu_multicore_worker_alloc(work_func_t function, void *ptr)
12 struct multicore_worker __percpu *worker =
13 alloc_percpu(struct multicore_worker);
18 for_each_possible_cpu(cpu) {
19 per_cpu_ptr(worker, cpu)->ptr = ptr;
20 INIT_WORK(&per_cpu_ptr(worker, cpu)->work, function);
25 int wg_packet_queue_init(struct crypt_queue *queue, work_func_t function,
26 bool multicore, unsigned int len)
30 memset(queue, 0, sizeof(*queue));
31 ret = ptr_ring_init(&queue->ring, len, GFP_KERNEL);
36 queue->worker = wg_packet_percpu_multicore_worker_alloc(
41 INIT_WORK(&queue->work, function);
47 void wg_packet_queue_free(struct crypt_queue *queue, bool multicore)
50 free_percpu(queue->worker);
51 WARN_ON(!__ptr_ring_empty(&queue->ring));
52 ptr_ring_cleanup(&queue->ring, NULL);