Hello Ferruh, On Fri, Apr 29, 2022 at 3:56 PM Ferruh Yigit <ferruh.yi...@xilinx.com> wrote: > > @@ -442,12 +428,16 @@ fs_rx_queue_setup(struct rte_eth_dev *dev, > > rxq->info.nb_desc = nb_rx_desc; > > rxq->priv = PRIV(dev); > > rxq->sdev = PRIV(dev)->subs; > > - ret = rte_intr_efd_enable(intr_handle, 1); > > - if (ret < 0) { > > +#ifdef RTE_EXEC_ENV_LINUX > > + rxq->event_fd = eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC); > > + if (rxq->event_fd < 0) { > > + ERROR("Failed to create an eventfd: %s", strerror(errno)); > > fs_unlock(dev, 0); > > - return ret; > > + return -errno; > > } > > - rxq->event_fd = rte_intr_efds_index_get(intr_handle, 0); > > +#else > > + rxq->event_fd = -1; > > +#endif > > How this impacts the BSD? I don't know if driver used on BSD but > technically it looks supported.
Atm, the driver calls rte_intr_efd_enable() which on Linux triggers an eventfd creation and a intr_handle->nb_intr++, but does nothing on FreeBSD. I did not test it with FreeBSD but I expect the previous call to rte_intr_efds_index_get(intr_handle, 0); return -1 (because of a earlier call to rte_intr_efds_index_set(intr_handle, 0, -1)). -- David Marchand