[PATCH v4 04/16] net/nbl: add Channel layer definitions and implementation
Stephen Hemminger
stephen at networkplumber.org
Wed Aug 13 16:25:32 CEST 2025
On Tue, 12 Aug 2025 23:43:58 -0700
Dimon Zhao <dimon.zhao at nebula-matrix.com> wrote:
> +static uint32_t nbl_thread_polling_task(__rte_unused void *param)
> +{
> + struct timespec time;
> + struct nbl_work *work;
> + struct nbl_work *work_tmp;
> + int i = 0;
> +
> + time.tv_sec = 0;
> + time.tv_nsec = 100000;
> +
> + while (true) {
> + i++;
> + rte_spinlock_lock(&nbl_work_list_lock);
> + RTE_TAILQ_FOREACH_SAFE(work, &nbl_work_list, next, work_tmp) {
> + if (work->no_run)
> + continue;
> +
> + if (work->run_once) {
> + work->handler(work->params);
> + TAILQ_REMOVE(&nbl_work_list, work, next);
> + } else {
> + if (i % work->tick == work->random)
> + work->handler(work->params);
> + }
> + }
> +
> + rte_spinlock_unlock(&nbl_work_list_lock);
> + nanosleep(&time, 0);
> + }
> +
> + return 0;
Adding another polling loop to applications is bad idea.
Please use some form of blocking operation to wake up the work handler.
More information about the dev
mailing list