On Tue, 19 Aug 2025 03:22:24 -0700 Dimon Zhao <dimon.z...@nebula-matrix.com> wrote:
> + > +static uint32_t nbl_chan_thread_polling_task(void *param) > +{ > + struct nbl_channel_mgt *chan_mgt = (struct nbl_channel_mgt *)param; > + union nbl_chan_info *chan_info = NBL_CHAN_MGT_TO_CHAN_INFO(chan_mgt); > + struct timespec time; > + char unused[16]; > + ssize_t nr = 0; > + > + time.tv_sec = 0; > + time.tv_nsec = 100000; > + > + while (true) { > + if (rte_bitmap_get(chan_info->mailbox.state_bmp, > NBL_CHAN_INTERRUPT_READY)) { > + nr = read(chan_info->mailbox.fd[0], &unused, > sizeof(unused)); > + if (nr < 0) > + break; > + } > + nbl_chan_clean_queue(chan_mgt); > + nanosleep(&time, 0); > + } > + > + return 0; > +} This is going to make embedded application developers upset because it uses a significant part of a CPU polling. Since you are reading from mailbox, why not implement select/poll/epoll and have the thread block waiting to read mailbox instead.