X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Ffailsafe%2Ffailsafe.c;h=3c754a5f66e0815bc26263774f0ca1a01e8051ad;hb=f9f0b5121f62d8701165d20bfdd14638bc72654d;hp=b87c036e60148c870fa97b576f6dc075633c5172;hpb=a7db3afce75346832059d8bfe54a8f81945fb213;p=dpdk.git diff --git a/drivers/net/failsafe/failsafe.c b/drivers/net/failsafe/failsafe.c index b87c036e60..3c754a5f66 100644 --- a/drivers/net/failsafe/failsafe.c +++ b/drivers/net/failsafe/failsafe.c @@ -17,10 +17,10 @@ const char pmd_failsafe_driver_name[] = FAILSAFE_DRIVER_NAME; static const struct rte_eth_link eth_link = { - .link_speed = ETH_SPEED_NUM_10G, - .link_duplex = ETH_LINK_FULL_DUPLEX, - .link_status = ETH_LINK_UP, - .link_autoneg = ETH_LINK_AUTONEG, + .link_speed = RTE_ETH_SPEED_NUM_10G, + .link_duplex = RTE_ETH_LINK_FULL_DUPLEX, + .link_status = RTE_ETH_LINK_UP, + .link_autoneg = RTE_ETH_LINK_AUTONEG, }; static int @@ -264,11 +264,23 @@ fs_eth_dev_create(struct rte_vdev_device *vdev) RTE_ETHER_ADDR_BYTES(mac)); 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, - }; + + /* Allocate interrupt instance */ + PRIV(dev)->intr_handle = + rte_intr_instance_alloc(RTE_INTR_INSTANCE_F_SHARED); + if (PRIV(dev)->intr_handle == NULL) { + ERROR("Failed to allocate intr handle"); + goto cancel_alarm; + } + + if (rte_intr_fd_set(PRIV(dev)->intr_handle, -1)) + goto cancel_alarm; + + if (rte_intr_type_set(PRIV(dev)->intr_handle, RTE_INTR_HANDLE_EXT)) + goto cancel_alarm; + rte_eth_dev_probing_finish(dev); + return 0; cancel_alarm: failsafe_hotplug_alarm_cancel(dev); @@ -297,6 +309,7 @@ fs_rte_eth_free(const char *name) return 0; /* port already released */ ret = failsafe_eth_dev_close(dev); rte_eth_dev_release_port(dev); + rte_intr_instance_free(PRIV(dev)->intr_handle); return ret; } @@ -327,8 +340,7 @@ rte_pmd_failsafe_probe(struct rte_vdev_device *vdev) INFO("Initializing " FAILSAFE_DRIVER_NAME " for %s", name); - if (rte_eal_process_type() == RTE_PROC_SECONDARY && - strlen(rte_vdev_device_args(vdev)) == 0) { + if (rte_eal_process_type() == RTE_PROC_SECONDARY) { eth_dev = rte_eth_dev_attach_secondary(name); if (!eth_dev) { ERROR("Failed to probe %s", name);