[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