}
if (internals->no_request_thread == 0) {
+ internals->stop_thread = 0;
+
ret = rte_ctrl_thread_create(&internals->thread,
"kni_handle_req", NULL,
kni_handle_request, internals);
struct pmd_internals *internals = dev->data->dev_private;
int ret;
- if (internals->no_request_thread == 0) {
+ if (internals->no_request_thread == 0 && internals->stop_thread == 0) {
internals->stop_thread = 1;
ret = pthread_cancel(internals->thread);
ret = pthread_join(internals->thread, NULL);
if (ret)
PMD_LOG(ERR, "Can't join the thread");
-
- internals->stop_thread = 0;
}
dev->data->dev_link.link_status = 0;
return 0;
}
-static void
+static int
eth_kni_stats_reset(struct rte_eth_dev *dev)
{
struct rte_eth_dev_data *data = dev->data;
q->tx.pkts = 0;
q->tx.bytes = 0;
}
+
+ return 0;
}
static const struct eth_dev_ops eth_kni_ops = {
data->nb_tx_queues = 1;
data->dev_link = pmd_link;
data->mac_addrs = &internals->eth_addr;
+ data->promiscuous = 1;
+ data->all_multicast = 1;
data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;