[dpdk-dev] [PATCH v9 3/3] net/tap: allow secondary process to access primary device queues
Ferruh Yigit
ferruh.yigit at intel.com
Thu Oct 18 12:09:19 CEST 2018
On 10/18/2018 9:15 AM, Raslan Darawsheh wrote:
> @@ -2082,6 +2215,17 @@ rte_pmd_tap_probe(struct rte_vdev_device *dev)
> TAP_LOG(NOTICE, "Initializing pmd_tap for %s as %s",
> name, tap_name);
>
> + /* Register IPC feed callback */
> + if (!tap_devices_count) {
> + ret = rte_mp_action_register(TAP_MP_KEY, tap_mp_sync_queues);
> + if (ret < 0) {
> + TAP_LOG(ERR, "%s: Failed to register IPC callback: %s",
> + tuntap_name, strerror(rte_errno));
> + goto leave;
> + }
> + }
> + tap_devices_count++;
> + tap_devices_count_increased = 1;
> ret = eth_dev_tap_create(dev, tap_name, remote_iface, &user_mac,
> ETH_TUNTAP_TYPE_TAP);
>
> @@ -2089,6 +2233,11 @@ rte_pmd_tap_probe(struct rte_vdev_device *dev)
> if (ret == -1) {
> TAP_LOG(ERR, "Failed to create pmd for %s as %s",
> name, tap_name);
> + if (tap_devices_count_increased == 1) {
> + if (!tap_devices_count)
> + rte_mp_action_unregister(TAP_MP_KEY);
> + tap_devices_count--;
> + }
> tap_unit--; /* Restore the unit number */
> }
> rte_kvargs_free(kvlist);
Hi Raslan,
This is still wrong, please check the code snippet I have shared.
For first probe, if rte_mp_action_register() run successfully:
tap_devices_count++;
tap_devices_count_increased = 1;
later if eth_dev_tap_create() fails, following won't unregister:
if (!tap_devices_count)
rte_mp_action_unregister(TAP_MP_KEY);
More information about the dev
mailing list