#include "failsafe_private.h"
-int failsafe_logtype;
-
const char pmd_failsafe_driver_name[] = FAILSAFE_DRIVER_NAME;
static const struct rte_eth_link eth_link = {
.link_speed = ETH_SPEED_NUM_10G,
return 0;
}
-static void
-fs_sub_device_free(struct rte_eth_dev *dev)
-{
- rte_free(PRIV(dev)->subs);
-}
-
static void fs_hotplug_alarm(void *arg);
int
}
priv = PRIV(dev);
priv->data = dev->data;
+ priv->rxp = FS_RX_PROXY_INIT;
dev->dev_ops = &failsafe_ops;
dev->data->mac_addrs = &PRIV(dev)->mac_addrs[0];
dev->data->dev_link = eth_link;
*/
FOREACH_SUBDEV(sdev, i, dev)
if (sdev->state >= DEV_PROBED) {
- ether_addr_copy(Ð(sdev)->data->mac_addrs[0],
- mac);
+ rte_ether_addr_copy(
+ Ð(sdev)->data->mac_addrs[0], mac);
break;
}
/*
* probed slaves.
*/
if (i == priv->subs_tail)
- eth_random_addr(&mac->addr_bytes[0]);
+ rte_eth_random_addr(&mac->addr_bytes[0]);
}
INFO("MAC address is %02x:%02x:%02x:%02x:%02x:%02x",
mac->addr_bytes[0], mac->addr_bytes[1],
mac->addr_bytes[2], mac->addr_bytes[3],
mac->addr_bytes[4], mac->addr_bytes[5]);
- dev->data->dev_flags |= RTE_ETH_DEV_INTR_LSC;
+ dev->data->dev_flags |= RTE_ETH_DEV_INTR_LSC |
+ RTE_ETH_DEV_AUTOFILL_QUEUE_XSTATS;
PRIV(dev)->intr_handle = (struct rte_intr_handle){
.fd = -1,
.type = RTE_INTR_HANDLE_EXT,
free_args:
failsafe_args_free(dev);
free_subs:
- fs_sub_device_free(dev);
+ rte_free(PRIV(dev)->subs);
free_dev:
/* mac_addrs must not be freed alone because part of dev_private */
dev->data->mac_addrs = NULL;
dev = rte_eth_dev_allocated(name);
if (dev == NULL)
- return -ENODEV;
- rte_eth_dev_callback_unregister(RTE_ETH_ALL, RTE_ETH_EVENT_NEW,
- failsafe_eth_new_event_callback, dev);
- ret = failsafe_eal_uninit(dev);
- if (ret)
- ERROR("Error while uninitializing sub-EAL");
- failsafe_args_free(dev);
- fs_sub_device_free(dev);
- ret = pthread_mutex_destroy(&PRIV(dev)->hotplug_mutex);
- if (ret)
- ERROR("Error while destroying hotplug mutex");
- rte_free(PRIV(dev)->mcast_addrs);
- /* mac_addrs must not be freed alone because part of dev_private */
- dev->data->mac_addrs = NULL;
+ return 0; /* port already released */
+ ret = failsafe_eth_dev_close(dev);
rte_eth_dev_release_port(dev);
return ret;
}
* A sub-device can be plugged later.
*/
FOREACH_SUBDEV(sdev, i, eth_dev) {
+ /* skip empty devargs */
+ if (sdev->devargs.name[0] == '\0')
+ continue;
+
/* rebuild devargs to be able to get the bus name. */
ret = rte_devargs_parse(&devargs,
sdev->devargs.name);
}
if (!devargs_already_listed(&devargs)) {
ret = rte_dev_probe(devargs.name);
- if (ret != 0) {
+ if (ret < 0) {
ERROR("Failed to probe devargs %s",
devargs.name);
continue;
RTE_PMD_REGISTER_VDEV(net_failsafe, failsafe_drv);
RTE_PMD_REGISTER_PARAM_STRING(net_failsafe, PMD_FAILSAFE_PARAM_STRING);
-
-RTE_INIT(failsafe_init_log)
-{
- failsafe_logtype = rte_log_register("pmd.net.failsafe");
- if (failsafe_logtype >= 0)
- rte_log_set_level(failsafe_logtype, RTE_LOG_NOTICE);
-}
+RTE_LOG_REGISTER(failsafe_logtype, pmd.net.failsafe, NOTICE)