[dpdk-dev,v8,03/14] eal/pci, ethdev: Remove assumption that port will not be detached

Message ID 1424060073-23484-4-git-send-email-mukawa@igel.co.jp (mailing list archive)
State Superseded, archived
Headers

Commit Message

Tetsuya Mukawa Feb. 16, 2015, 4:14 a.m. UTC
  To remove assumption, do like followings.

This patch adds "RTE_PCI_DRV_DETACHABLE" to drv_flags of rte_pci_driver
structure. The flags indicate the driver can detach devices at runtime.
Also, remove assumption that port will not be detached.

To remove the assumption.
- Add 'attached' member to rte_eth_dev structure.
  This member is used for indicating the port is attached, or not.
- Add rte_eth_dev_allocate_new_port().
  This function is used for allocating new port.

v8:
- NONE_TRACE is changed to NO_TRACE.
  (Thanks to Iremonger, Bernard)
v5:
- Change parameters of rte_eth_dev_validate_port() to cleanup code.
v4:
- Use braces with 'for' loop.
- Fix indent of 'if' statement.

Signed-off-by: Tetsuya Mukawa <mukawa@igel.co.jp>
---
 lib/librte_eal/common/include/rte_pci.h |   2 +
 lib/librte_ether/rte_ethdev.c           | 454 +++++++++++++-------------------
 lib/librte_ether/rte_ethdev.h           |   5 +
 3 files changed, 186 insertions(+), 275 deletions(-)
  

Comments

Iremonger, Bernard Feb. 16, 2015, 4:17 p.m. UTC | #1
> -----Original Message-----
> From: Tetsuya Mukawa [mailto:mukawa@igel.co.jp]
> Sent: Monday, February 16, 2015 4:14 AM
> To: dev@dpdk.org
> Cc: Qiu, Michael; Iremonger, Bernard; Tetsuya Mukawa
> Subject: [PATCH v8 03/14] eal/pci,ethdev: Remove assumption that port will not be detached
> 
> To remove assumption, do like followings.
> 
> This patch adds "RTE_PCI_DRV_DETACHABLE" to drv_flags of rte_pci_driver structure. The flags
> indicate the driver can detach devices at runtime.
> Also, remove assumption that port will not be detached.
> 
> To remove the assumption.
> - Add 'attached' member to rte_eth_dev structure.
>   This member is used for indicating the port is attached, or not.
> - Add rte_eth_dev_allocate_new_port().
>   This function is used for allocating new port.
> 
> v8:
> - NONE_TRACE is changed to NO_TRACE.
>   (Thanks to Iremonger, Bernard)
> v5:
> - Change parameters of rte_eth_dev_validate_port() to cleanup code.
> v4:
> - Use braces with 'for' loop.
> - Fix indent of 'if' statement.
> 
> Signed-off-by: Tetsuya Mukawa <mukawa@igel.co.jp>

Acked-by: Bernard Iremonger <bernard.iremonger@intel.com>
  
Thomas Monjalon Feb. 17, 2015, 12:36 a.m. UTC | #2
2015-02-16 13:14, Tetsuya Mukawa:
> To remove assumption, do like followings.
> 
> This patch adds "RTE_PCI_DRV_DETACHABLE" to drv_flags of rte_pci_driver
> structure. The flags indicate the driver can detach devices at runtime.
> Also, remove assumption that port will not be detached.
> 
> To remove the assumption.
> - Add 'attached' member to rte_eth_dev structure.
>   This member is used for indicating the port is attached, or not.
> - Add rte_eth_dev_allocate_new_port().
>   This function is used for allocating new port.
> 
> v8:
> - NONE_TRACE is changed to NO_TRACE.
>   (Thanks to Iremonger, Bernard)
> v5:
> - Change parameters of rte_eth_dev_validate_port() to cleanup code.
> v4:
> - Use braces with 'for' loop.
> - Fix indent of 'if' statement.
> 
> Signed-off-by: Tetsuya Mukawa <mukawa@igel.co.jp>
> ---
>  lib/librte_eal/common/include/rte_pci.h |   2 +
>  lib/librte_ether/rte_ethdev.c           | 454 +++++++++++++-------------------
>  lib/librte_ether/rte_ethdev.h           |   5 +
>  3 files changed, 186 insertions(+), 275 deletions(-)
> 
> diff --git a/lib/librte_eal/common/include/rte_pci.h b/lib/librte_eal/common/include/rte_pci.h
> index 7b48b55..7f2d699 100644
> --- a/lib/librte_eal/common/include/rte_pci.h
> +++ b/lib/librte_eal/common/include/rte_pci.h
> @@ -207,6 +207,8 @@ struct rte_pci_driver {
>  #define RTE_PCI_DRV_FORCE_UNBIND 0x0004
>  /** Device driver supports link state interrupt */
>  #define RTE_PCI_DRV_INTR_LSC	0x0008
> +/** Device driver supports detaching capability */
> +#define RTE_PCI_DRV_DETACHABLE	0x0010
>  
>  /**< Internal use only - Macro used by pci addr parsing functions **/
>  #define GET_PCIADDR_FIELD(in, fd, lim, dlm)                   \
> diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c
> index ea3a1fb..a79fa5b 100644
> --- a/lib/librte_ether/rte_ethdev.c
> +++ b/lib/librte_ether/rte_ethdev.c
> @@ -175,6 +175,16 @@ enum {
>  	STAT_QMAP_RX
>  };
>  
> +enum {
> +	DEV_INVALID = 0,
> +	DEV_VALID,
> +};
> +
> +enum {
> +	DEV_DISCONNECTED = 0,
> +	DEV_CONNECTED
> +};

The commit log explains what is an attached port but not what means
valid or connected.
These enums should have a comment to explain their usage.

> +
>  static inline void
>  rte_eth_dev_data_alloc(void)
>  {
> @@ -201,19 +211,34 @@ rte_eth_dev_allocated(const char *name)
>  {
>  	unsigned i;
>  
> -	for (i = 0; i < nb_ports; i++) {
> -		if (strcmp(rte_eth_devices[i].data->name, name) == 0)
> +	for (i = 0; i < RTE_MAX_ETHPORTS; i++) {
> +		if ((rte_eth_devices[i].attached == DEV_CONNECTED) &&
> +		    strcmp(rte_eth_devices[i].data->name, name) == 0)
>  			return &rte_eth_devices[i];
>  	}
>  	return NULL;
>  }
>  
> +static uint8_t
> +rte_eth_dev_allocate_new_port(void)
> +{
> +	unsigned i;
> +
> +	for (i = 0; i < RTE_MAX_ETHPORTS; i++) {
> +		if (rte_eth_devices[i].attached == DEV_DISCONNECTED)
> +			return i;
> +	}
> +	return RTE_MAX_ETHPORTS;
> +}

This function does not allocate a new port.
It get the first free port id.

Is uint8_t sill a good size for hotpluggable virtual device ids?

> +
>  struct rte_eth_dev *
>  rte_eth_dev_allocate(const char *name)
>  {
> +	uint8_t port_id;
>  	struct rte_eth_dev *eth_dev;
>  
> -	if (nb_ports == RTE_MAX_ETHPORTS) {
> +	port_id = rte_eth_dev_allocate_new_port();
> +	if (port_id == RTE_MAX_ETHPORTS) {
>  		PMD_DEBUG_TRACE("Reached maximum number of Ethernet ports\n");
>  		return NULL;
>  	}
> @@ -226,10 +251,12 @@ rte_eth_dev_allocate(const char *name)
>  		return NULL;
>  	}
>  
> -	eth_dev = &rte_eth_devices[nb_ports];
> -	eth_dev->data = &rte_eth_dev_data[nb_ports];
> +	eth_dev = &rte_eth_devices[port_id];
> +	eth_dev->data = &rte_eth_dev_data[port_id];
>  	snprintf(eth_dev->data->name, sizeof(eth_dev->data->name), "%s", name);
> -	eth_dev->data->port_id = nb_ports++;
> +	eth_dev->data->port_id = port_id;
> +	eth_dev->attached = DEV_CONNECTED;
> +	nb_ports++;
>  	return eth_dev;
>  }
>  
> @@ -283,6 +310,7 @@ rte_eth_dev_init(struct rte_pci_driver *pci_drv,
>  			(unsigned) pci_dev->id.device_id);
>  	if (rte_eal_process_type() == RTE_PROC_PRIMARY)
>  		rte_free(eth_dev->data->dev_private);
> +	eth_dev->attached = DEV_DISCONNECTED;
>  	nb_ports--;
>  	return diag;
>  }
> @@ -308,10 +336,28 @@ rte_eth_driver_register(struct eth_driver *eth_drv)
>  	rte_eal_pci_register(&eth_drv->pci_drv);
>  }
>  
> +enum {
> +	NO_TRACE = 0,
> +	TRACE
> +};

What means this enum?

> +
> +static int
> +rte_eth_dev_validate_port(uint8_t port_id, int trace)
> +{
> +	if (port_id >= RTE_MAX_ETHPORTS ||
> +	    rte_eth_devices[port_id].attached != DEV_CONNECTED) {
> +		if (trace) {
> +			PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
> +		}

It's not common in DPDK to have a parameter to toggle log.
It should be enabled globally via the log level.

> +		return DEV_INVALID;

It would be simpler to return 0 in a function called "is_valid_port".

> +	} else
> +		return DEV_VALID;

So it could 1 (true) here.

[...]
> --- a/lib/librte_ether/rte_ethdev.h
> +++ b/lib/librte_ether/rte_ethdev.h
> @@ -1539,6 +1539,7 @@ struct rte_eth_dev {
>  	struct eth_dev_ops *dev_ops;    /**< Functions exported by PMD */
>  	struct rte_pci_device *pci_dev; /**< PCI info. supplied by probing */
>  	struct rte_eth_dev_cb_list callbacks; /**< User application callbacks */
> +	uint8_t attached; /**< Flag indicating the port is attached */
>  };
>  
>  struct rte_eth_dev_sriov {
> @@ -1604,6 +1605,10 @@ extern struct rte_eth_dev rte_eth_devices[];
>   * initialized by the [matching] Ethernet driver during the PCI probing phase.
>   * All devices whose port identifier is in the range
>   * [0,  rte_eth_dev_count() - 1] can be operated on by network applications.
> + * immediately after invoking rte_eal_init().
> + * If the application unplugs a port using hotplug function, The enabled port
> + * numbers may be noncontiguous. In the case, the applications need to manage
> + * enabled port by themselves.
>   *
>   * @return
>   *   - The total number of usable Ethernet devices.
>
  
Tetsuya Mukawa Feb. 17, 2015, 6:14 a.m. UTC | #3
Hi Thomas,

I appreciate for your all comments.

On 2015/02/17 9:36, Thomas Monjalon wrote:
> 2015-02-16 13:14, Tetsuya Mukawa:
>> To remove assumption, do like followings.
>>
>> This patch adds "RTE_PCI_DRV_DETACHABLE" to drv_flags of rte_pci_driver
>> structure. The flags indicate the driver can detach devices at runtime.
>> Also, remove assumption that port will not be detached.
>>
>> To remove the assumption.
>> - Add 'attached' member to rte_eth_dev structure.
>>   This member is used for indicating the port is attached, or not.
>> - Add rte_eth_dev_allocate_new_port().
>>   This function is used for allocating new port.
>>
>> v8:
>> - NONE_TRACE is changed to NO_TRACE.
>>   (Thanks to Iremonger, Bernard)
>> v5:
>> - Change parameters of rte_eth_dev_validate_port() to cleanup code.
>> v4:
>> - Use braces with 'for' loop.
>> - Fix indent of 'if' statement.
>>
>> Signed-off-by: Tetsuya Mukawa <mukawa@igel.co.jp>
>> ---
>>  lib/librte_eal/common/include/rte_pci.h |   2 +
>>  lib/librte_ether/rte_ethdev.c           | 454 +++++++++++++-------------------
>>  lib/librte_ether/rte_ethdev.h           |   5 +
>>  3 files changed, 186 insertions(+), 275 deletions(-)
>>
>> diff --git a/lib/librte_eal/common/include/rte_pci.h b/lib/librte_eal/common/include/rte_pci.h
>> index 7b48b55..7f2d699 100644
>> --- a/lib/librte_eal/common/include/rte_pci.h
>> +++ b/lib/librte_eal/common/include/rte_pci.h
>> @@ -207,6 +207,8 @@ struct rte_pci_driver {
>>  #define RTE_PCI_DRV_FORCE_UNBIND 0x0004
>>  /** Device driver supports link state interrupt */
>>  #define RTE_PCI_DRV_INTR_LSC	0x0008
>> +/** Device driver supports detaching capability */
>> +#define RTE_PCI_DRV_DETACHABLE	0x0010
>>  
>>  /**< Internal use only - Macro used by pci addr parsing functions **/
>>  #define GET_PCIADDR_FIELD(in, fd, lim, dlm)                   \
>> diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c
>> index ea3a1fb..a79fa5b 100644
>> --- a/lib/librte_ether/rte_ethdev.c
>> +++ b/lib/librte_ether/rte_ethdev.c
>> @@ -175,6 +175,16 @@ enum {
>>  	STAT_QMAP_RX
>>  };
>>  
>> +enum {
>> +	DEV_INVALID = 0,
>> +	DEV_VALID,
>> +};
>> +
>> +enum {
>> +	DEV_DISCONNECTED = 0,
>> +	DEV_CONNECTED
>> +};
> The commit log explains what is an attached port but not what means
> valid or connected.
> These enums should have a comment to explain their usage.

Sure, I will add comment, and fix commit log.

>> +
>>  static inline void
>>  rte_eth_dev_data_alloc(void)
>>  {
>> @@ -201,19 +211,34 @@ rte_eth_dev_allocated(const char *name)
>>  {
>>  	unsigned i;
>>  
>> -	for (i = 0; i < nb_ports; i++) {
>> -		if (strcmp(rte_eth_devices[i].data->name, name) == 0)
>> +	for (i = 0; i < RTE_MAX_ETHPORTS; i++) {
>> +		if ((rte_eth_devices[i].attached == DEV_CONNECTED) &&
>> +		    strcmp(rte_eth_devices[i].data->name, name) == 0)
>>  			return &rte_eth_devices[i];
>>  	}
>>  	return NULL;
>>  }
>>  
>> +static uint8_t
>> +rte_eth_dev_allocate_new_port(void)
>> +{
>> +	unsigned i;
>> +
>> +	for (i = 0; i < RTE_MAX_ETHPORTS; i++) {
>> +		if (rte_eth_devices[i].attached == DEV_DISCONNECTED)
>> +			return i;
>> +	}
>> +	return RTE_MAX_ETHPORTS;
>> +}
> This function does not allocate a new port.
> It get the first free port id.

I will change the function name like below.
rte_eth_dev_find_free_port()

> Is uint8_t sill a good size for hotpluggable virtual device ids?

I am not sure it's enough, but uint8_t is widely used in "rte_ethdev.c"
as port id.
If someone reports it doesn't enough, I guess it will be the time to
write a patch to change all uint_8 in one patch.

>> +
>>  struct rte_eth_dev *
>>  rte_eth_dev_allocate(const char *name)
>>  {
>> +	uint8_t port_id;
>>  	struct rte_eth_dev *eth_dev;
>>  
>> -	if (nb_ports == RTE_MAX_ETHPORTS) {
>> +	port_id = rte_eth_dev_allocate_new_port();
>> +	if (port_id == RTE_MAX_ETHPORTS) {
>>  		PMD_DEBUG_TRACE("Reached maximum number of Ethernet ports\n");
>>  		return NULL;
>>  	}
>> @@ -226,10 +251,12 @@ rte_eth_dev_allocate(const char *name)
>>  		return NULL;
>>  	}
>>  
>> -	eth_dev = &rte_eth_devices[nb_ports];
>> -	eth_dev->data = &rte_eth_dev_data[nb_ports];
>> +	eth_dev = &rte_eth_devices[port_id];
>> +	eth_dev->data = &rte_eth_dev_data[port_id];
>>  	snprintf(eth_dev->data->name, sizeof(eth_dev->data->name), "%s", name);
>> -	eth_dev->data->port_id = nb_ports++;
>> +	eth_dev->data->port_id = port_id;
>> +	eth_dev->attached = DEV_CONNECTED;
>> +	nb_ports++;
>>  	return eth_dev;
>>  }
>>  
>> @@ -283,6 +310,7 @@ rte_eth_dev_init(struct rte_pci_driver *pci_drv,
>>  			(unsigned) pci_dev->id.device_id);
>>  	if (rte_eal_process_type() == RTE_PROC_PRIMARY)
>>  		rte_free(eth_dev->data->dev_private);
>> +	eth_dev->attached = DEV_DISCONNECTED;
>>  	nb_ports--;
>>  	return diag;
>>  }
>> @@ -308,10 +336,28 @@ rte_eth_driver_register(struct eth_driver *eth_drv)
>>  	rte_eal_pci_register(&eth_drv->pci_drv);
>>  }
>>  
>> +enum {
>> +	NO_TRACE = 0,
>> +	TRACE
>> +};
> What means this enum?
>
>> +
>> +static int
>> +rte_eth_dev_validate_port(uint8_t port_id, int trace)
>> +{
>> +	if (port_id >= RTE_MAX_ETHPORTS ||
>> +	    rte_eth_devices[port_id].attached != DEV_CONNECTED) {
>> +		if (trace) {
>> +			PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
>> +		}
> It's not common in DPDK to have a parameter to toggle log.
> It should be enabled globally via the log level.

Sure, I will change it.

>> +		return DEV_INVALID;
> It would be simpler to return 0 in a function called "is_valid_port".

I will change the function name.

>> +	} else
>> +		return DEV_VALID;
> So it could 1 (true) here.

Sure, I will change like above, also delete DEV_INVALID and DEV_VALID
definitions.

> [...]
>> --- a/lib/librte_ether/rte_ethdev.h
>> +++ b/lib/librte_ether/rte_ethdev.h
>> @@ -1539,6 +1539,7 @@ struct rte_eth_dev {
>>  	struct eth_dev_ops *dev_ops;    /**< Functions exported by PMD */
>>  	struct rte_pci_device *pci_dev; /**< PCI info. supplied by probing */
>>  	struct rte_eth_dev_cb_list callbacks; /**< User application callbacks */
>> +	uint8_t attached; /**< Flag indicating the port is attached */
>>  };
>>  
>>  struct rte_eth_dev_sriov {
>> @@ -1604,6 +1605,10 @@ extern struct rte_eth_dev rte_eth_devices[];
>>   * initialized by the [matching] Ethernet driver during the PCI probing phase.
>>   * All devices whose port identifier is in the range
>>   * [0,  rte_eth_dev_count() - 1] can be operated on by network applications.
>> + * immediately after invoking rte_eal_init().
>> + * If the application unplugs a port using hotplug function, The enabled port
>> + * numbers may be noncontiguous. In the case, the applications need to manage
>> + * enabled port by themselves.
>>   *
>>   * @return
>>   *   - The total number of usable Ethernet devices.
>>
>
  
Thomas Monjalon Feb. 18, 2015, 12:31 a.m. UTC | #4
2015-02-17 15:14, Tetsuya Mukawa:
> On 2015/02/17 9:36, Thomas Monjalon wrote:
> > 2015-02-16 13:14, Tetsuya Mukawa:
> > Is uint8_t sill a good size for hotpluggable virtual device ids?
> 
> I am not sure it's enough, but uint8_t is widely used in "rte_ethdev.c"
> as port id.
> If someone reports it doesn't enough, I guess it will be the time to
> write a patch to change all uint_8 in one patch.

It's a big ABI breakage. So if we feel it's going to be required,
it's better to do it now in 2.0 release I think.

Any opinion?
  
Tetsuya Mukawa Feb. 18, 2015, 1:54 a.m. UTC | #5
On 2015/02/18 9:31, Thomas Monjalon wrote:
> 2015-02-17 15:14, Tetsuya Mukawa:
>> On 2015/02/17 9:36, Thomas Monjalon wrote:
>>> 2015-02-16 13:14, Tetsuya Mukawa:
>>> Is uint8_t sill a good size for hotpluggable virtual device ids?
>> I am not sure it's enough, but uint8_t is widely used in "rte_ethdev.c"
>> as port id.
>> If someone reports it doesn't enough, I guess it will be the time to
>> write a patch to change all uint_8 in one patch.
> It's a big ABI breakage. So if we feel it's going to be required,
> it's better to do it now in 2.0 release I think.
>
> Any opinion?
>

Hi Thomas,

I agree with it.
I will add an one more patch to change uint8_t to uint16_t.

Thanks,
Tetsuya
  
Tetsuya Mukawa Feb. 18, 2015, 6:10 a.m. UTC | #6
On 2015/02/18 10:54, Tetsuya Mukawa wrote:
> On 2015/02/18 9:31, Thomas Monjalon wrote:
>> 2015-02-17 15:14, Tetsuya Mukawa:
>>> On 2015/02/17 9:36, Thomas Monjalon wrote:
>>>> 2015-02-16 13:14, Tetsuya Mukawa:
>>>> Is uint8_t sill a good size for hotpluggable virtual device ids?
>>> I am not sure it's enough, but uint8_t is widely used in "rte_ethdev.c"
>>> as port id.
>>> If someone reports it doesn't enough, I guess it will be the time to
>>> write a patch to change all uint_8 in one patch.
>> It's a big ABI breakage. So if we feel it's going to be required,
>> it's better to do it now in 2.0 release I think.
>>
>> Any opinion?
>>
> Hi Thomas,
>
> I agree with it.
> I will add an one more patch to change uint8_t to uint16_t.
>
> Thanks,
> Tetsuya
>

Hi Thomas,

Could I make sure.
After changing uint8_t to uint16_t in "rte_ethdev.[ch]", must I also
need to change other applications and libraries that call ethdev APIs?
If so, I would not finish it by 23rd.

I've counted how many lines call ethdev APIs that are related to port_id.
Could you please check an attached file?
It's over 1200 lines. Probably to fix  one of caller, I will need to
check how port_id is used, and fix more related lines. So probably
thousands lines may need to be fixed.

When is deadline for fixing this changing?
Also, if you have a good idea to fix it easier, could you please let me
know?

Thanks,
Tetsuya
rte_eth_dev_configure	app/test-pipeline/init.c	240
rte_eth_dev_configure	app/test-pmd/testpmd.c	1304
rte_eth_dev_configure	app/test/test_kni.c	523
rte_eth_dev_configure	app/test/test_link_bonding.c	238
rte_eth_dev_configure	app/test/test_link_bonding.c	240
rte_eth_dev_configure	app/test/test_pmd_perf.c	751
rte_eth_dev_configure	app/test/test_pmd_ring.c	67
rte_eth_dev_configure	app/test/test_pmd_ring.c	73
rte_eth_dev_configure	app/test/test_pmd_ring.c	77
rte_eth_dev_configure	app/test/test_pmd_ring.c	81
rte_eth_dev_configure	app/test/test_pmd_ring.c	256
rte_eth_dev_configure	app/test/test_pmd_ring.c	257
rte_eth_dev_configure	examples/distributor/main.c	125
rte_eth_dev_configure	examples/dpdk_qat/main.c	726
rte_eth_dev_configure	examples/exception_path/main.c	433
rte_eth_dev_configure	examples/ip_fragmentation/main.c	890
rte_eth_dev_configure	examples/ip_pipeline/init.c	486
rte_eth_dev_configure	examples/ip_reassembly/main.c	1095
rte_eth_dev_configure	examples/ipv4_multicast/main.c	755
rte_eth_dev_configure	examples/kni/main.c	617
rte_eth_dev_configure	examples/kni/main.c	725
rte_eth_dev_configure	examples/l2fwd-ivshmem/host/host.c	745
rte_eth_dev_configure	examples/l2fwd/main.c	650
rte_eth_dev_configure	examples/l3fwd-acl/main.c	1991
rte_eth_dev_configure	examples/l3fwd-power/main.c	1534
rte_eth_dev_configure	examples/l3fwd-vf/main.c	1013
rte_eth_dev_configure	examples/l3fwd/main.c	2457
rte_eth_dev_configure	examples/link_status_interrupt/main.c	696
rte_eth_dev_configure	examples/link_status_interrupt/main.c	702
rte_eth_dev_configure	examples/load_balancer/init.c	446
rte_eth_dev_configure	examples/multi_process/client_server_mp/mp_server/init.c	144
rte_eth_dev_configure	examples/multi_process/l2fwd_fork/main.c	1121
rte_eth_dev_configure	examples/multi_process/symmetric_mp/main.c	248
rte_eth_dev_configure	examples/netmap_compat/lib/compat_netmap.c	706
rte_eth_dev_configure	examples/qos_meter/main.c	370
rte_eth_dev_configure	examples/qos_meter/main.c	386
rte_eth_dev_configure	examples/qos_sched/init.c	129
rte_eth_dev_configure	examples/quota_watermark/qw/init.c	82
rte_eth_dev_configure	examples/skeleton/basicfwd.c	69
rte_eth_dev_configure	examples/vhost/main.c	442
rte_eth_dev_configure	examples/vhost_xen/main.c	306
rte_eth_dev_configure	examples/vmdq/main.c	254
rte_eth_dev_configure	examples/vmdq_dcb/main.c	177
rte_eth_dev_configure	lib/librte_ether/rte_ethdev.c	728
rte_eth_dev_configure	lib/librte_ether/rte_ethdev.h	91
rte_eth_dev_configure	lib/librte_ether/rte_ethdev.h	102
rte_eth_dev_configure	lib/librte_ether/rte_ethdev.h	1726
rte_eth_dev_configure	lib/librte_ether/rte_ethdev.h	1744
rte_eth_dev_configure	lib/librte_ether/rte_ethdev.h	1783
rte_eth_dev_configure	lib/librte_ether/rte_ethdev.h	1844
rte_eth_dev_configure	lib/librte_ether/rte_ethdev.h	1860
rte_eth_dev_configure	lib/librte_ether/rte_ethdev.h	1877
rte_eth_dev_configure	lib/librte_ether/rte_ethdev.h	1893
rte_eth_dev_configure	lib/librte_ether/rte_ethdev.h	2112
rte_eth_dev_configure	lib/librte_ether/rte_ethdev.h	2133
rte_eth_dev_configure	lib/librte_ether/rte_ethdev.h	2225
rte_eth_dev_configure	lib/librte_ether/rte_ethdev.h	2377
rte_eth_dev_configure	lib/librte_ether/rte_ethdev.h	2492
rte_eth_dev_configure	lib/librte_ether/rte_ethdev.h	2504
rte_eth_dev_configure	lib/librte_pmd_bond/rte_eth_bond_pmd.c	950
rte_eth_rx_queue_setup	app/test-pipeline/init.c	251
rte_eth_rx_queue_setup	app/test-pmd/testpmd.c	1359
rte_eth_rx_queue_setup	app/test-pmd/testpmd.c	1364
rte_eth_rx_queue_setup	app/test/test_kni.c	529
rte_eth_rx_queue_setup	app/test/test_link_bonding.c	243
rte_eth_rx_queue_setup	app/test/test_link_bonding.c	246
rte_eth_rx_queue_setup	app/test/test_pmd_perf.c	772
rte_eth_rx_queue_setup	app/test/test_pmd_perf.c	776
rte_eth_rx_queue_setup	app/test/test_pmd_ring.c	90
rte_eth_rx_queue_setup	app/test/test_pmd_ring.c	99
rte_eth_rx_queue_setup	app/test/test_pmd_ring.c	268
rte_eth_rx_queue_setup	app/test/test_pmd_ring.c	269
rte_eth_rx_queue_setup	examples/distributor/main.c	130
rte_eth_rx_queue_setup	examples/dpdk_qat/main.c	768
rte_eth_rx_queue_setup	examples/dpdk_qat/main.c	773
rte_eth_rx_queue_setup	examples/exception_path/main.c	438
rte_eth_rx_queue_setup	examples/ip_fragmentation/main.c	900
rte_eth_rx_queue_setup	examples/ip_fragmentation/main.c	905
rte_eth_rx_queue_setup	examples/ip_pipeline/init.c	496
rte_eth_rx_queue_setup	examples/ip_reassembly/main.c	1105
rte_eth_rx_queue_setup	examples/ip_reassembly/main.c	1110
rte_eth_rx_queue_setup	examples/ipv4_multicast/main.c	769
rte_eth_rx_queue_setup	examples/kni/main.c	622
rte_eth_rx_queue_setup	examples/l2fwd-ivshmem/host/host.c	754
rte_eth_rx_queue_setup	examples/l2fwd-ivshmem/host/host.c	759
rte_eth_rx_queue_setup	examples/l2fwd/main.c	659
rte_eth_rx_queue_setup	examples/l2fwd/main.c	664
rte_eth_rx_queue_setup	examples/l3fwd-acl/main.c	2060
rte_eth_rx_queue_setup	examples/l3fwd-acl/main.c	2065
rte_eth_rx_queue_setup	examples/l3fwd-power/main.c	1616
rte_eth_rx_queue_setup	examples/l3fwd-power/main.c	1621
rte_eth_rx_queue_setup	examples/l3fwd-vf/main.c	1066
rte_eth_rx_queue_setup	examples/l3fwd-vf/main.c	1070
rte_eth_rx_queue_setup	examples/l3fwd/main.c	2530
rte_eth_rx_queue_setup	examples/l3fwd/main.c	2535
rte_eth_rx_queue_setup	examples/link_status_interrupt/main.c	714
rte_eth_rx_queue_setup	examples/link_status_interrupt/main.c	719
rte_eth_rx_queue_setup	examples/load_balancer/init.c	469
rte_eth_rx_queue_setup	examples/multi_process/client_server_mp/mp_server/init.c	149
rte_eth_rx_queue_setup	examples/multi_process/l2fwd_fork/main.c	1130
rte_eth_rx_queue_setup	examples/multi_process/l2fwd_fork/main.c	1135
rte_eth_rx_queue_setup	examples/multi_process/symmetric_mp/main.c	253
rte_eth_rx_queue_setup	examples/netmap_compat/lib/compat_netmap.c	726
rte_eth_rx_queue_setup	examples/qos_meter/main.c	374
rte_eth_rx_queue_setup	examples/qos_meter/main.c	390
rte_eth_rx_queue_setup	examples/qos_sched/init.c	136
rte_eth_rx_queue_setup	examples/quota_watermark/qw/init.c	88
rte_eth_rx_queue_setup	examples/skeleton/basicfwd.c	74
rte_eth_rx_queue_setup	examples/vhost/main.c	448
rte_eth_rx_queue_setup	examples/vhost_xen/main.c	315
rte_eth_rx_queue_setup	examples/vmdq/main.c	262
rte_eth_rx_queue_setup	examples/vmdq_dcb/main.c	182
rte_eth_rx_queue_setup	lib/librte_ether/rte_ethdev.c	1043
rte_eth_rx_queue_setup	lib/librte_ether/rte_ethdev.h	93
rte_eth_rx_queue_setup	lib/librte_ether/rte_ethdev.h	103
rte_eth_rx_queue_setup	lib/librte_ether/rte_ethdev.h	1770
rte_eth_rx_queue_setup	lib/librte_pmd_bond/rte_eth_bond_pmd.c	964
rte_eth_rx_queue_setup	lib/librte_pmd_bond/rte_eth_bond_pmd.c	970
rte_eth_tx_queue_setup	app/test-pipeline/init.c	263
rte_eth_tx_queue_setup	app/test-pmd/testpmd.c	1323
rte_eth_tx_queue_setup	app/test-pmd/testpmd.c	1327
rte_eth_tx_queue_setup	app/test/test_kni.c	535
rte_eth_tx_queue_setup	app/test/test_link_bonding.c	249
rte_eth_tx_queue_setup	app/test/test_link_bonding.c	251
rte_eth_tx_queue_setup	app/test/test_pmd_perf.c	764
rte_eth_tx_queue_setup	app/test/test_pmd_perf.c	768
rte_eth_tx_queue_setup	app/test/test_pmd_ring.c	86
rte_eth_tx_queue_setup	app/test/test_pmd_ring.c	95
rte_eth_tx_queue_setup	app/test/test_pmd_ring.c	262
rte_eth_tx_queue_setup	app/test/test_pmd_ring.c	263
rte_eth_tx_queue_setup	examples/distributor/main.c	138
rte_eth_tx_queue_setup	examples/dpdk_qat/main.c	742
rte_eth_tx_queue_setup	examples/dpdk_qat/main.c	746
rte_eth_tx_queue_setup	examples/exception_path/main.c	445
rte_eth_tx_queue_setup	examples/ip_fragmentation/main.c	927
rte_eth_tx_queue_setup	examples/ip_fragmentation/main.c	931
rte_eth_tx_queue_setup	examples/ip_pipeline/init.c	508
rte_eth_tx_queue_setup	examples/ip_reassembly/main.c	1134
rte_eth_tx_queue_setup	examples/ip_reassembly/main.c	1137
rte_eth_tx_queue_setup	examples/ipv4_multicast/main.c	774
rte_eth_tx_queue_setup	examples/ipv4_multicast/main.c	789
rte_eth_tx_queue_setup	examples/ipv4_multicast/main.c	792
rte_eth_tx_queue_setup	examples/kni/main.c	628
rte_eth_tx_queue_setup	examples/l2fwd-ivshmem/host/host.c	764
rte_eth_tx_queue_setup	examples/l2fwd-ivshmem/host/host.c	768
rte_eth_tx_queue_setup	examples/l2fwd/main.c	669
rte_eth_tx_queue_setup	examples/l2fwd/main.c	673
rte_eth_tx_queue_setup	examples/l3fwd-acl/main.c	2026
rte_eth_tx_queue_setup	examples/l3fwd-acl/main.c	2030
rte_eth_tx_queue_setup	examples/l3fwd-power/main.c	1568
rte_eth_tx_queue_setup	examples/l3fwd-power/main.c	1572
rte_eth_tx_queue_setup	examples/l3fwd-vf/main.c	1036
rte_eth_tx_queue_setup	examples/l3fwd-vf/main.c	1039
rte_eth_tx_queue_setup	examples/l3fwd/main.c	2498
rte_eth_tx_queue_setup	examples/l3fwd/main.c	2501
rte_eth_tx_queue_setup	examples/link_status_interrupt/main.c	724
rte_eth_tx_queue_setup	examples/link_status_interrupt/main.c	728
rte_eth_tx_queue_setup	examples/load_balancer/init.c	490
rte_eth_tx_queue_setup	examples/multi_process/client_server_mp/mp_server/init.c	156
rte_eth_tx_queue_setup	examples/multi_process/l2fwd_fork/main.c	1140
rte_eth_tx_queue_setup	examples/multi_process/l2fwd_fork/main.c	1144
rte_eth_tx_queue_setup	examples/multi_process/symmetric_mp/main.c	262
rte_eth_tx_queue_setup	examples/netmap_compat/lib/compat_netmap.c	715
rte_eth_tx_queue_setup	examples/qos_meter/main.c	380
rte_eth_tx_queue_setup	examples/qos_meter/main.c	396
rte_eth_tx_queue_setup	examples/qos_sched/init.c	139
rte_eth_tx_queue_setup	examples/qos_sched/init.c	144
rte_eth_tx_queue_setup	examples/qos_sched/init.c	147
rte_eth_tx_queue_setup	examples/quota_watermark/qw/init.c	97
rte_eth_tx_queue_setup	examples/skeleton/basicfwd.c	81
rte_eth_tx_queue_setup	examples/vhost/main.c	456
rte_eth_tx_queue_setup	examples/vhost_xen/main.c	322
rte_eth_tx_queue_setup	examples/vmdq/main.c	273
rte_eth_tx_queue_setup	examples/vmdq_dcb/main.c	191
rte_eth_tx_queue_setup	lib/librte_ether/rte_ethdev.c	1121
rte_eth_tx_queue_setup	lib/librte_ether/rte_ethdev.h	92
rte_eth_tx_queue_setup	lib/librte_ether/rte_ethdev.h	102
rte_eth_tx_queue_setup	lib/librte_ether/rte_ethdev.h	1818
rte_eth_tx_queue_setup	lib/librte_pmd_bond/rte_eth_bond_pmd.c	980
rte_eth_tx_queue_setup	lib/librte_pmd_bond/rte_eth_bond_pmd.c	986
rte_eth_dev_socket_id	app/test-pipeline/init.c	255
rte_eth_dev_socket_id	app/test-pipeline/init.c	267
rte_eth_dev_socket_id	app/test-pmd/testpmd.c	571
rte_eth_dev_socket_id	app/test-pmd/testpmd.c	672
rte_eth_dev_socket_id	app/test/test_link_bonding.c	244
rte_eth_dev_socket_id	app/test/test_link_bonding.c	250
rte_eth_dev_socket_id	app/test/test_pmd_perf.c	735
rte_eth_dev_socket_id	app/test/test_pmd_perf.c	745
rte_eth_dev_socket_id	app/test/test_pmd_perf.c	826
rte_eth_dev_socket_id	examples/distributor/main.c	131
rte_eth_dev_socket_id	examples/distributor/main.c	139
rte_eth_dev_socket_id	examples/distributor/main.c	212
rte_eth_dev_socket_id	examples/distributor/main.c	213
rte_eth_dev_socket_id	examples/distributor/main.c	312
rte_eth_dev_socket_id	examples/distributor/main.c	313
rte_eth_dev_socket_id	examples/exception_path/main.c	438
rte_eth_dev_socket_id	examples/exception_path/main.c	445
rte_eth_dev_socket_id	examples/ip_pipeline/init.c	500
rte_eth_dev_socket_id	examples/ip_pipeline/init.c	512
rte_eth_dev_socket_id	examples/ipv4_multicast/main.c	770
rte_eth_dev_socket_id	examples/kni/main.c	623
rte_eth_dev_socket_id	examples/kni/main.c	629
rte_eth_dev_socket_id	examples/l2fwd-ivshmem/host/host.c	755
rte_eth_dev_socket_id	examples/l2fwd-ivshmem/host/host.c	765
rte_eth_dev_socket_id	examples/l2fwd/main.c	660
rte_eth_dev_socket_id	examples/l2fwd/main.c	670
rte_eth_dev_socket_id	examples/link_status_interrupt/main.c	715
rte_eth_dev_socket_id	examples/link_status_interrupt/main.c	725
rte_eth_dev_socket_id	examples/multi_process/client_server_mp/mp_server/init.c	150
rte_eth_dev_socket_id	examples/multi_process/client_server_mp/mp_server/init.c	157
rte_eth_dev_socket_id	examples/multi_process/l2fwd_fork/main.c	1131
rte_eth_dev_socket_id	examples/multi_process/l2fwd_fork/main.c	1141
rte_eth_dev_socket_id	examples/multi_process/symmetric_mp/main.c	254
rte_eth_dev_socket_id	examples/multi_process/symmetric_mp/main.c	263
rte_eth_dev_socket_id	examples/qos_meter/main.c	375
rte_eth_dev_socket_id	examples/qos_meter/main.c	381
rte_eth_dev_socket_id	examples/qos_meter/main.c	391
rte_eth_dev_socket_id	examples/qos_meter/main.c	397
rte_eth_dev_socket_id	examples/qos_sched/init.c	137
rte_eth_dev_socket_id	examples/qos_sched/init.c	145
rte_eth_dev_socket_id	examples/qos_sched/init.c	343
rte_eth_dev_socket_id	examples/quota_watermark/qw/init.c	89
rte_eth_dev_socket_id	examples/quota_watermark/qw/init.c	98
rte_eth_dev_socket_id	examples/skeleton/basicfwd.c	75
rte_eth_dev_socket_id	examples/skeleton/basicfwd.c	82
rte_eth_dev_socket_id	examples/skeleton/basicfwd.c	115
rte_eth_dev_socket_id	examples/skeleton/basicfwd.c	116
rte_eth_dev_socket_id	examples/vhost/main.c	449
rte_eth_dev_socket_id	examples/vhost/main.c	457
rte_eth_dev_socket_id	examples/vhost_xen/main.c	316
rte_eth_dev_socket_id	examples/vhost_xen/main.c	323
rte_eth_dev_socket_id	examples/vmdq/main.c	263
rte_eth_dev_socket_id	examples/vmdq/main.c	274
rte_eth_dev_socket_id	examples/vmdq_dcb/main.c	183
rte_eth_dev_socket_id	examples/vmdq_dcb/main.c	192
rte_eth_dev_socket_id	lib/librte_ether/rte_ethdev.c	345
rte_eth_dev_socket_id	lib/librte_ether/rte_ethdev.h	1832
rte_eth_dev_socket_id	lib/librte_pmd_bond/rte_eth_bond_pmd.c	966
rte_eth_dev_socket_id	lib/librte_pmd_bond/rte_eth_bond_pmd.c	982
rte_eth_dev_rx_queue_start	app/test-pmd/cmdline.c	1671
rte_eth_dev_rx_queue_start	examples/vhost/main.c	2684
rte_eth_dev_rx_queue_start	lib/librte_ether/rte_ethdev.c	397
rte_eth_dev_rx_queue_start	lib/librte_ether/rte_ethdev.h	1850
rte_eth_dev_rx_queue_stop	app/test-pmd/cmdline.c	1673
rte_eth_dev_rx_queue_stop	examples/vhost/main.c	2377
rte_eth_dev_rx_queue_stop	lib/librte_ether/rte_ethdev.c	423
rte_eth_dev_rx_queue_stop	lib/librte_ether/rte_ethdev.h	1866
rte_eth_dev_tx_queue_start	app/test-pmd/cmdline.c	1675
rte_eth_dev_tx_queue_start	examples/vhost/main.c	2670
rte_eth_dev_tx_queue_start	lib/librte_ether/rte_ethdev.c	449
rte_eth_dev_tx_queue_start	lib/librte_ether/rte_ethdev.h	1883
rte_eth_dev_tx_queue_stop	app/test-pmd/cmdline.c	1677
rte_eth_dev_tx_queue_stop	examples/vhost/main.c	2393
rte_eth_dev_tx_queue_stop	examples/vhost/main.c	2693
rte_eth_dev_tx_queue_stop	lib/librte_ether/rte_ethdev.c	475
rte_eth_dev_tx_queue_stop	lib/librte_ether/rte_ethdev.h	1899
rte_eth_dev_start	app/test-pipeline/init.c	274
rte_eth_dev_start	app/test-pmd/testpmd.c	1386
rte_eth_dev_start	app/test/test_kni.c	541
rte_eth_dev_start	app/test/test_link_bonding.c	254
rte_eth_dev_start	app/test/test_link_bonding.c	255
rte_eth_dev_start	app/test/test_link_bonding.c	619
rte_eth_dev_start	app/test/test_link_bonding.c	808
rte_eth_dev_start	app/test/test_link_bonding.c	1008
rte_eth_dev_start	app/test/test_link_bonding.c	1049
rte_eth_dev_start	app/test/test_link_bonding.c	1140
rte_eth_dev_start	app/test/test_link_bonding.c	1764
rte_eth_dev_start	app/test/test_link_bonding.c	2362
rte_eth_dev_start	app/test/test_link_bonding.c	3264
rte_eth_dev_start	app/test/test_link_bonding.c	3843
rte_eth_dev_start	app/test/test_link_bonding.c	4344
rte_eth_dev_start	app/test/test_pmd_perf.c	781
rte_eth_dev_start	app/test/test_pmd_perf.c	784
rte_eth_dev_start	app/test/test_pmd_ring.c	105
rte_eth_dev_start	app/test/test_pmd_ring.c	109
rte_eth_dev_start	app/test/test_pmd_ring.c	113
rte_eth_dev_start	app/test/test_pmd_ring.c	274
rte_eth_dev_start	app/test/test_pmd_ring.c	275
rte_eth_dev_start	examples/distributor/main.c	145
rte_eth_dev_start	examples/dpdk_qat/main.c	785
rte_eth_dev_start	examples/dpdk_qat/main.c	787
rte_eth_dev_start	examples/exception_path/main.c	451
rte_eth_dev_start	examples/ip_fragmentation/main.c	951
rte_eth_dev_start	examples/ip_fragmentation/main.c	953
rte_eth_dev_start	examples/ip_pipeline/init.c	519
rte_eth_dev_start	examples/ip_reassembly/main.c	1156
rte_eth_dev_start	examples/ip_reassembly/main.c	1158
rte_eth_dev_start	examples/ipv4_multicast/main.c	801
rte_eth_dev_start	examples/ipv4_multicast/main.c	803
rte_eth_dev_start	examples/kni/main.c	634
rte_eth_dev_start	examples/kni/main.c	732
rte_eth_dev_start	examples/kni/main.c	757
rte_eth_dev_start	examples/l2fwd-ivshmem/host/host.c	772
rte_eth_dev_start	examples/l2fwd-ivshmem/host/host.c	774
rte_eth_dev_start	examples/l2fwd/main.c	677
rte_eth_dev_start	examples/l2fwd/main.c	679
rte_eth_dev_start	examples/l3fwd-acl/main.c	2078
rte_eth_dev_start	examples/l3fwd-acl/main.c	2081
rte_eth_dev_start	examples/l3fwd-power/main.c	1634
rte_eth_dev_start	examples/l3fwd-power/main.c	1636
rte_eth_dev_start	examples/l3fwd-vf/main.c	1082
rte_eth_dev_start	examples/l3fwd-vf/main.c	1084
rte_eth_dev_start	examples/l3fwd/main.c	2548
rte_eth_dev_start	examples/l3fwd/main.c	2550
rte_eth_dev_start	examples/link_status_interrupt/main.c	732
rte_eth_dev_start	examples/link_status_interrupt/main.c	734
rte_eth_dev_start	examples/load_balancer/init.c	504
rte_eth_dev_start	examples/multi_process/client_server_mp/mp_server/init.c	164
rte_eth_dev_start	examples/multi_process/l2fwd_fork/main.c	450
rte_eth_dev_start	examples/multi_process/l2fwd_fork/main.c	1148
rte_eth_dev_start	examples/multi_process/l2fwd_fork/main.c	1150
rte_eth_dev_start	examples/multi_process/symmetric_mp/main.c	271
rte_eth_dev_start	examples/netmap_compat/lib/compat_netmap.c	371
rte_eth_dev_start	examples/qos_meter/main.c	402
rte_eth_dev_start	examples/qos_meter/main.c	406
rte_eth_dev_start	examples/qos_sched/init.c	151
rte_eth_dev_start	examples/quota_watermark/qw/init.c	111
rte_eth_dev_start	examples/skeleton/basicfwd.c	87
rte_eth_dev_start	examples/vhost/main.c	464
rte_eth_dev_start	examples/vhost_xen/main.c	330
rte_eth_dev_start	examples/vmdq/main.c	282
rte_eth_dev_start	examples/vmdq_dcb/main.c	198
rte_eth_dev_start	lib/librte_ether/rte_ethdev.c	916
rte_eth_dev_start	lib/librte_ether/rte_ethdev.h	94
rte_eth_dev_start	lib/librte_ether/rte_ethdev.h	104
rte_eth_dev_start	lib/librte_ether/rte_ethdev.h	109
rte_eth_dev_start	lib/librte_ether/rte_ethdev.h	121
rte_eth_dev_start	lib/librte_ether/rte_ethdev.h	633
rte_eth_dev_start	lib/librte_ether/rte_ethdev.h	654
rte_eth_dev_start	lib/librte_ether/rte_ethdev.h	1918
rte_eth_dev_start	lib/librte_ether/rte_ethdev.h	1922
rte_eth_dev_start	lib/librte_pmd_bond/rte_eth_bond_pmd.c	993
rte_eth_dev_start	lib/librte_pmd_bond/rte_eth_bond_pmd.c	995
rte_eth_dev_stop	app/test-pmd/testpmd.c	1446
rte_eth_dev_stop	app/test/test_kni.c	675
rte_eth_dev_stop	app/test/test_link_bonding.c	666
rte_eth_dev_stop	app/test/test_link_bonding.c	696
rte_eth_dev_stop	app/test/test_link_bonding.c	806
rte_eth_dev_stop	app/test/test_link_bonding.c	1048
rte_eth_dev_stop	app/test/test_link_bonding.c	1079
rte_eth_dev_stop	app/test/test_link_bonding.c	1762
rte_eth_dev_stop	app/test/test_link_bonding.c	2360
rte_eth_dev_stop	app/test/test_link_bonding.c	3262
rte_eth_dev_stop	app/test/test_link_bonding.c	3841
rte_eth_dev_stop	app/test/test_link_bonding.c	4342
rte_eth_dev_stop	app/test/test_pmd_perf.c	829
rte_eth_dev_stop	app/test/test_pmd_ring.c	400
rte_eth_dev_stop	app/test/test_pmd_ring.c	401
rte_eth_dev_stop	app/test/test_pmd_ring.c	436
rte_eth_dev_stop	app/test/test_pmd_ring.c	437
rte_eth_dev_stop	app/test/test_pmd_ring.c	438
rte_eth_dev_stop	examples/kni/main.c	713
rte_eth_dev_stop	examples/kni/main.c	756
rte_eth_dev_stop	examples/kni/main.c	759
rte_eth_dev_stop	examples/kni/main.c	839
rte_eth_dev_stop	examples/multi_process/l2fwd_fork/main.c	440
rte_eth_dev_stop	examples/netmap_compat/lib/compat_netmap.c	417
rte_eth_dev_stop	examples/quota_watermark/qw/init.c	80
rte_eth_dev_stop	lib/librte_ether/rte_ethdev.c	953
rte_eth_dev_stop	lib/librte_ether/rte_ethdev.h	103
rte_eth_dev_stop	lib/librte_ether/rte_ethdev.h	109
rte_eth_dev_stop	lib/librte_ether/rte_ethdev.h	1927
rte_eth_dev_stop	lib/librte_pmd_bond/rte_eth_bond_pmd.c	943
rte_eth_dev_set_link_up	app/test-pmd/testpmd.c	1238
rte_eth_dev_set_link_up	lib/librte_ether/rte_ethdev.c	982
rte_eth_dev_set_link_up	lib/librte_ether/rte_ethdev.h	1942
rte_eth_dev_set_link_up	lib/librte_ether/rte_ethdev.h	1948
rte_eth_dev_set_link_down	app/test-pmd/testpmd.c	1245
rte_eth_dev_set_link_down	lib/librte_ether/rte_ethdev.c	1002
rte_eth_dev_set_link_down	lib/librte_ether/rte_ethdev.h	1953
rte_eth_dev_close	app/test-pmd/testpmd.c	1483
rte_eth_dev_close	app/test-pmd/testpmd.c	1528
rte_eth_dev_close	app/test/test_link_bonding.c	4028
rte_eth_dev_close	examples/l3fwd-vf/main.c	694
rte_eth_dev_close	lib/librte_ether/rte_ethdev.c	1022
rte_eth_dev_close	lib/librte_ether/rte_ethdev.h	124
rte_eth_dev_close	lib/librte_ether/rte_ethdev.h	1961
rte_eth_promiscuous_enable	app/test-pipeline/init.c	248
rte_eth_promiscuous_enable	app/test-pmd/cmdline.c	4043
rte_eth_promiscuous_enable	app/test-pmd/cmdline.c	4334
rte_eth_promiscuous_enable	app/test-pmd/cmdline.c	4341
rte_eth_promiscuous_enable	app/test-pmd/testpmd.c	1922
rte_eth_promiscuous_enable	app/test/test_kni.c	546
rte_eth_promiscuous_enable	app/test/test_link_bonding.c	1813
rte_eth_promiscuous_enable	app/test/test_link_bonding.c	2261
rte_eth_promiscuous_enable	app/test/test_link_bonding.c	3172
rte_eth_promiscuous_enable	app/test/test_link_bonding.c	3767
rte_eth_promiscuous_enable	app/test/test_link_bonding.c	4242
rte_eth_promiscuous_enable	app/test/test_pmd_perf.c	788
rte_eth_promiscuous_enable	examples/distributor/main.c	170
rte_eth_promiscuous_enable	examples/dpdk_qat/main.c	808
rte_eth_promiscuous_enable	examples/exception_path/main.c	455
rte_eth_promiscuous_enable	examples/ip_fragmentation/main.c	956
rte_eth_promiscuous_enable	examples/ip_pipeline/init.c	493
rte_eth_promiscuous_enable	examples/ip_reassembly/main.c	1161
rte_eth_promiscuous_enable	examples/kni/main.c	640
rte_eth_promiscuous_enable	examples/l2fwd-ivshmem/host/host.c	779
rte_eth_promiscuous_enable	examples/l2fwd/main.c	684
rte_eth_promiscuous_enable	examples/l3fwd-acl/main.c	2091
rte_eth_promiscuous_enable	examples/l3fwd-power/main.c	1646
rte_eth_promiscuous_enable	examples/l3fwd/main.c	2560
rte_eth_promiscuous_enable	examples/load_balancer/init.c	454
rte_eth_promiscuous_enable	examples/multi_process/client_server_mp/mp_server/init.c	162
rte_eth_promiscuous_enable	examples/multi_process/l2fwd_fork/main.c	1155
rte_eth_promiscuous_enable	examples/multi_process/symmetric_mp/main.c	269
rte_eth_promiscuous_enable	examples/netmap_compat/bridge/bridge.c	302
rte_eth_promiscuous_enable	examples/qos_meter/main.c	410
rte_eth_promiscuous_enable	examples/qos_meter/main.c	412
rte_eth_promiscuous_enable	examples/qos_sched/init.c	168
rte_eth_promiscuous_enable	examples/quota_watermark/qw/init.c	117
rte_eth_promiscuous_enable	examples/skeleton/basicfwd.c	100
rte_eth_promiscuous_enable	examples/vhost/main.c	471
rte_eth_promiscuous_enable	lib/librte_ether/rte_ethdev.c	904
rte_eth_promiscuous_enable	lib/librte_ether/rte_ethdev.c	1162
rte_eth_promiscuous_enable	lib/librte_ether/rte_ethdev.h	1969
rte_eth_promiscuous_enable	lib/librte_pmd_bond/rte_eth_bond_8023ad.c	873
rte_eth_promiscuous_enable	lib/librte_pmd_bond/rte_eth_bond_pmd.c	1417
rte_eth_promiscuous_enable	lib/librte_pmd_bond/rte_eth_bond_pmd.c	1426
rte_eth_promiscuous_disable	app/test-pmd/cmdline.c	4336
rte_eth_promiscuous_disable	app/test-pmd/cmdline.c	4343
rte_eth_promiscuous_disable	app/test/test_link_bonding.c	1828
rte_eth_promiscuous_disable	app/test/test_link_bonding.c	2282
rte_eth_promiscuous_disable	app/test/test_link_bonding.c	3185
rte_eth_promiscuous_disable	app/test/test_link_bonding.c	3781
rte_eth_promiscuous_disable	app/test/test_link_bonding.c	4263
rte_eth_promiscuous_disable	lib/librte_ether/rte_ethdev.c	906
rte_eth_promiscuous_disable	lib/librte_ether/rte_ethdev.c	1179
rte_eth_promiscuous_disable	lib/librte_ether/rte_ethdev.h	1977
rte_eth_promiscuous_disable	lib/librte_pmd_bond/rte_eth_bond_pmd.c	1446
rte_eth_promiscuous_disable	lib/librte_pmd_bond/rte_eth_bond_pmd.c	1455
rte_eth_promiscuous_get	app/test-pmd/config.c	331
rte_eth_promiscuous_get	app/test/test_link_bonding.c	1815
rte_eth_promiscuous_get	app/test/test_link_bonding.c	1821
rte_eth_promiscuous_get	app/test/test_link_bonding.c	1830
rte_eth_promiscuous_get	app/test/test_link_bonding.c	1836
rte_eth_promiscuous_get	app/test/test_link_bonding.c	2263
rte_eth_promiscuous_get	app/test/test_link_bonding.c	2268
rte_eth_promiscuous_get	app/test/test_link_bonding.c	2284
rte_eth_promiscuous_get	app/test/test_link_bonding.c	2289
rte_eth_promiscuous_get	app/test/test_link_bonding.c	3174
rte_eth_promiscuous_get	app/test/test_link_bonding.c	3179
rte_eth_promiscuous_get	app/test/test_link_bonding.c	3187
rte_eth_promiscuous_get	app/test/test_link_bonding.c	3192
rte_eth_promiscuous_get	app/test/test_link_bonding.c	3770
rte_eth_promiscuous_get	app/test/test_link_bonding.c	3775
rte_eth_promiscuous_get	app/test/test_link_bonding.c	3783
rte_eth_promiscuous_get	app/test/test_link_bonding.c	3788
rte_eth_promiscuous_get	app/test/test_link_bonding.c	4244
rte_eth_promiscuous_get	app/test/test_link_bonding.c	4249
rte_eth_promiscuous_get	app/test/test_link_bonding.c	4265
rte_eth_promiscuous_get	app/test/test_link_bonding.c	4271
rte_eth_promiscuous_get	lib/librte_ether/rte_ethdev.c	903
rte_eth_promiscuous_get	lib/librte_ether/rte_ethdev.c	905
rte_eth_promiscuous_get	lib/librte_ether/rte_ethdev.c	1196
rte_eth_promiscuous_get	lib/librte_ether/rte_ethdev.h	1989
rte_eth_allmulticast_enable	app/test-pmd/cmdline.c	4414
rte_eth_allmulticast_enable	app/test-pmd/cmdline.c	4421
rte_eth_allmulticast_enable	lib/librte_ether/rte_ethdev.c	910
rte_eth_allmulticast_enable	lib/librte_ether/rte_ethdev.c	1210
rte_eth_allmulticast_enable	lib/librte_ether/rte_ethdev.h	1997
rte_eth_allmulticast_disable	app/test-pmd/cmdline.c	4416
rte_eth_allmulticast_disable	app/test-pmd/cmdline.c	4423
rte_eth_allmulticast_disable	lib/librte_ether/rte_ethdev.c	912
rte_eth_allmulticast_disable	lib/librte_ether/rte_ethdev.c	1227
rte_eth_allmulticast_disable	lib/librte_ether/rte_ethdev.h	2005
rte_eth_allmulticast_get	app/test-pmd/config.c	333
rte_eth_allmulticast_get	lib/librte_ether/rte_ethdev.c	909
rte_eth_allmulticast_get	lib/librte_ether/rte_ethdev.c	911
rte_eth_allmulticast_get	lib/librte_ether/rte_ethdev.c	1244
rte_eth_allmulticast_get	lib/librte_ether/rte_ethdev.h	2017
rte_eth_link_get	app/test-pipeline/init.c	212
rte_eth_link_get	app/test-pmd/config.c	311
rte_eth_link_get	app/test-pmd/config.c	2134
rte_eth_link_get	app/test-pmd/config.c	2159
rte_eth_link_get	app/test-pmd/testpmd.c	1559
rte_eth_link_get	app/test/test_link_bonding.c	650
rte_eth_link_get	app/test/test_link_bonding.c	668
rte_eth_link_get	app/test/test_pmd_perf.c	179
rte_eth_link_get	app/test/test_pmd_ring.c	118
rte_eth_link_get	app/test/test_pmd_ring.c	119
rte_eth_link_get	app/test/test_pmd_ring.c	120
rte_eth_link_get	examples/distributor/main.c	150
rte_eth_link_get	examples/distributor/main.c	153
rte_eth_link_get	examples/dpdk_qat/main.c	793
rte_eth_link_get	examples/exception_path/main.c	475
rte_eth_link_get	examples/ip_fragmentation/main.c	623
rte_eth_link_get	examples/ip_pipeline/init.c	458
rte_eth_link_get	examples/ip_reassembly/main.c	752
rte_eth_link_get	examples/ipv4_multicast/main.c	631
rte_eth_link_get	examples/kni/main.c	660
rte_eth_link_get	examples/l2fwd-ivshmem/host/host.c	361
rte_eth_link_get	examples/l2fwd/main.c	501
rte_eth_link_get	examples/l3fwd-acl/main.c	1890
rte_eth_link_get	examples/l3fwd-power/main.c	1429
rte_eth_link_get	examples/l3fwd/main.c	2360
rte_eth_link_get	examples/link_status_interrupt/main.c	176
rte_eth_link_get	examples/link_status_interrupt/main.c	528
rte_eth_link_get	examples/link_status_interrupt/main.c	555
rte_eth_link_get	examples/load_balancer/init.c	386
rte_eth_link_get	examples/multi_process/client_server_mp/mp_server/init.c	220
rte_eth_link_get	examples/multi_process/l2fwd_fork/main.c	924
rte_eth_link_get	examples/multi_process/symmetric_mp/main.c	378
rte_eth_link_get	examples/qos_sched/init.c	159
rte_eth_link_get	examples/qos_sched/init.c	247
rte_eth_link_get	lib/librte_ether/rte_ethdev.c	1272
rte_eth_link_get	lib/librte_ether/rte_ethdev.c	1293
rte_eth_link_get	lib/librte_ether/rte_ethdev.h	2030
rte_eth_link_get	lib/librte_ether/rte_ethdev.h	2035
rte_eth_link_get	lib/librte_ether/rte_ethdev.h	2043
rte_eth_link_get	lib/librte_pmd_bond/rte_eth_bond_8023ad.c	758
rte_eth_link_get	lib/librte_pmd_bond/rte_eth_bond_api.c	416
rte_eth_link_get	lib/librte_pmd_bond/rte_eth_bond_pmd.c	425
rte_eth_link_get	lib/librte_pmd_bond/rte_eth_bond_pmd.c	1511
rte_eth_link_get_nowait	app/test-pipeline/init.c	212
rte_eth_link_get_nowait	app/test-pmd/config.c	311
rte_eth_link_get_nowait	app/test-pmd/config.c	2134
rte_eth_link_get_nowait	app/test-pmd/config.c	2159
rte_eth_link_get_nowait	app/test-pmd/testpmd.c	1559
rte_eth_link_get_nowait	app/test/test_pmd_perf.c	179
rte_eth_link_get_nowait	examples/distributor/main.c	150
rte_eth_link_get_nowait	examples/distributor/main.c	153
rte_eth_link_get_nowait	examples/exception_path/main.c	475
rte_eth_link_get_nowait	examples/ip_fragmentation/main.c	623
rte_eth_link_get_nowait	examples/ip_pipeline/init.c	458
rte_eth_link_get_nowait	examples/ip_reassembly/main.c	752
rte_eth_link_get_nowait	examples/ipv4_multicast/main.c	631
rte_eth_link_get_nowait	examples/kni/main.c	660
rte_eth_link_get_nowait	examples/l2fwd-ivshmem/host/host.c	361
rte_eth_link_get_nowait	examples/l2fwd/main.c	501
rte_eth_link_get_nowait	examples/l3fwd-acl/main.c	1890
rte_eth_link_get_nowait	examples/l3fwd-power/main.c	1429
rte_eth_link_get_nowait	examples/l3fwd/main.c	2360
rte_eth_link_get_nowait	examples/link_status_interrupt/main.c	176
rte_eth_link_get_nowait	examples/link_status_interrupt/main.c	528
rte_eth_link_get_nowait	examples/link_status_interrupt/main.c	555
rte_eth_link_get_nowait	examples/load_balancer/init.c	386
rte_eth_link_get_nowait	examples/multi_process/client_server_mp/mp_server/init.c	220
rte_eth_link_get_nowait	examples/multi_process/l2fwd_fork/main.c	924
rte_eth_link_get_nowait	examples/multi_process/symmetric_mp/main.c	378
rte_eth_link_get_nowait	lib/librte_ether/rte_ethdev.c	1293
rte_eth_link_get_nowait	lib/librte_ether/rte_ethdev.h	2043
rte_eth_link_get_nowait	lib/librte_pmd_bond/rte_eth_bond_api.c	416
rte_eth_link_get_nowait	lib/librte_pmd_bond/rte_eth_bond_pmd.c	1511
rte_eth_stats_get	app/test-pmd/config.c	134
rte_eth_stats_get	app/test-pmd/testpmd.c	1052
rte_eth_stats_get	app/test-pmd/testpmd.c	1182
rte_eth_stats_get	app/test/test_link_bonding.c	1397
rte_eth_stats_get	app/test/test_link_bonding.c	1405
rte_eth_stats_get	app/test/test_link_bonding.c	1518
rte_eth_stats_get	app/test/test_link_bonding.c	1532
rte_eth_stats_get	app/test/test_link_bonding.c	1593
rte_eth_stats_get	app/test/test_link_bonding.c	1604
rte_eth_stats_get	app/test/test_link_bonding.c	1679
rte_eth_stats_get	app/test/test_link_bonding.c	1687
rte_eth_stats_get	app/test/test_link_bonding.c	1693
rte_eth_stats_get	app/test/test_link_bonding.c	1699
rte_eth_stats_get	app/test/test_link_bonding.c	1705
rte_eth_stats_get	app/test/test_link_bonding.c	1917
rte_eth_stats_get	app/test/test_link_bonding.c	1923
rte_eth_stats_get	app/test/test_link_bonding.c	1928
rte_eth_stats_get	app/test/test_link_bonding.c	1933
rte_eth_stats_get	app/test/test_link_bonding.c	1938
rte_eth_stats_get	app/test/test_link_bonding.c	1967
rte_eth_stats_get	app/test/test_link_bonding.c	2119
rte_eth_stats_get	app/test/test_link_bonding.c	2129
rte_eth_stats_get	app/test/test_link_bonding.c	2199
rte_eth_stats_get	app/test/test_link_bonding.c	2207
rte_eth_stats_get	app/test/test_link_bonding.c	2222
rte_eth_stats_get	app/test/test_link_bonding.c	2491
rte_eth_stats_get	app/test/test_link_bonding.c	2496
rte_eth_stats_get	app/test/test_link_bonding.c	2501
rte_eth_stats_get	app/test/test_link_bonding.c	2506
rte_eth_stats_get	app/test/test_link_bonding.c	2527
rte_eth_stats_get	app/test/test_link_bonding.c	2532
rte_eth_stats_get	app/test/test_link_bonding.c	2537
rte_eth_stats_get	app/test/test_link_bonding.c	2542
rte_eth_stats_get	app/test/test_link_bonding.c	2547
rte_eth_stats_get	app/test/test_link_bonding.c	2671
rte_eth_stats_get	app/test/test_link_bonding.c	2680
rte_eth_stats_get	app/test/test_link_bonding.c	2686
rte_eth_stats_get	app/test/test_link_bonding.c	2753
rte_eth_stats_get	app/test/test_link_bonding.c	2760
rte_eth_stats_get	app/test/test_link_bonding.c	2766
rte_eth_stats_get	app/test/test_link_bonding.c	2866
rte_eth_stats_get	app/test/test_link_bonding.c	2873
rte_eth_stats_get	app/test/test_link_bonding.c	2879
rte_eth_stats_get	app/test/test_link_bonding.c	3022
rte_eth_stats_get	app/test/test_link_bonding.c	3036
rte_eth_stats_get	app/test/test_link_bonding.c	3050
rte_eth_stats_get	app/test/test_link_bonding.c	3115
rte_eth_stats_get	app/test/test_link_bonding.c	3124
rte_eth_stats_get	app/test/test_link_bonding.c	3130
rte_eth_stats_get	app/test/test_link_bonding.c	3136
rte_eth_stats_get	app/test/test_link_bonding.c	3142
rte_eth_stats_get	app/test/test_link_bonding.c	3382
rte_eth_stats_get	app/test/test_link_bonding.c	3388
rte_eth_stats_get	app/test/test_link_bonding.c	3394
rte_eth_stats_get	app/test/test_link_bonding.c	3418
rte_eth_stats_get	app/test/test_link_bonding.c	3425
rte_eth_stats_get	app/test/test_link_bonding.c	3455
rte_eth_stats_get	app/test/test_link_bonding.c	3517
rte_eth_stats_get	app/test/test_link_bonding.c	3526
rte_eth_stats_get	app/test/test_link_bonding.c	3624
rte_eth_stats_get	app/test/test_link_bonding.c	3635
rte_eth_stats_get	app/test/test_link_bonding.c	3645
rte_eth_stats_get	app/test/test_link_bonding.c	3710
rte_eth_stats_get	app/test/test_link_bonding.c	3719
rte_eth_stats_get	app/test/test_link_bonding.c	3725
rte_eth_stats_get	app/test/test_link_bonding.c	3731
rte_eth_stats_get	app/test/test_link_bonding.c	3737
rte_eth_stats_get	app/test/test_link_bonding.c	3942
rte_eth_stats_get	app/test/test_link_bonding.c	3948
rte_eth_stats_get	app/test/test_link_bonding.c	3953
rte_eth_stats_get	app/test/test_link_bonding.c	3958
rte_eth_stats_get	app/test/test_link_bonding.c	3964
rte_eth_stats_get	app/test/test_link_bonding.c	3986
rte_eth_stats_get	app/test/test_link_bonding.c	4097
rte_eth_stats_get	app/test/test_link_bonding.c	4110
rte_eth_stats_get	app/test/test_link_bonding.c	4184
rte_eth_stats_get	app/test/test_link_bonding.c	4192
rte_eth_stats_get	app/test/test_link_bonding.c	4207
rte_eth_stats_get	app/test/test_link_bonding.c	4475
rte_eth_stats_get	app/test/test_link_bonding.c	4480
rte_eth_stats_get	app/test/test_link_bonding.c	4485
rte_eth_stats_get	app/test/test_link_bonding.c	4490
rte_eth_stats_get	app/test/test_link_bonding.c	4515
rte_eth_stats_get	app/test/test_pmd_perf.c	346
rte_eth_stats_get	app/test/test_pmd_ring.c	165
rte_eth_stats_get	app/test/test_pmd_ring.c	183
rte_eth_stats_get	app/test/test_pmd_ring.c	204
rte_eth_stats_get	app/test/test_pmd_ring.c	223
rte_eth_stats_get	app/test/test_pmd_ring.c	234
rte_eth_stats_get	app/test/test_pmd_ring.c	294
rte_eth_stats_get	app/test/test_pmd_ring.c	295
rte_eth_stats_get	app/test/test_pmd_ring.c	324
rte_eth_stats_get	app/test/test_pmd_ring.c	325
rte_eth_stats_get	app/test/test_pmd_ring.c	354
rte_eth_stats_get	app/test/test_pmd_ring.c	355
rte_eth_stats_get	app/test/test_pmd_ring.c	384
rte_eth_stats_get	app/test/test_pmd_ring.c	385
rte_eth_stats_get	examples/distributor/main.c	390
rte_eth_stats_get	examples/load_balancer/runtime.c	213
rte_eth_stats_get	examples/qos_sched/main.c	188
rte_eth_stats_get	examples/qos_sched/main.c	197
rte_eth_stats_get	lib/librte_ether/rte_ethdev.c	1314
rte_eth_stats_get	lib/librte_ether/rte_ethdev.c	1380
rte_eth_stats_get	lib/librte_ether/rte_ethdev.h	2061
rte_eth_stats_get	lib/librte_pmd_bond/rte_eth_bond_pmd.c	454
rte_eth_stats_get	lib/librte_pmd_bond/rte_eth_bond_pmd.c	1372
rte_eth_stats_reset	app/test-pmd/config.c	208
rte_eth_stats_reset	app/test/test_link_bonding.c	465
rte_eth_stats_reset	app/test/test_link_bonding.c	697
rte_eth_stats_reset	app/test/test_link_bonding.c	1169
rte_eth_stats_reset	app/test/test_link_bonding.c	1619
rte_eth_stats_reset	app/test/test_link_bonding.c	1622
rte_eth_stats_reset	app/test/test_link_bonding.c	1910
rte_eth_stats_reset	app/test/test_link_bonding.c	2239
rte_eth_stats_reset	app/test/test_link_bonding.c	3929
rte_eth_stats_reset	app/test/test_link_bonding.c	4220
rte_eth_stats_reset	app/test/test_pmd_ring.c	201
rte_eth_stats_reset	app/test/test_pmd_ring.c	231
rte_eth_stats_reset	lib/librte_ether/rte_ethdev.c	1332
rte_eth_stats_reset	lib/librte_ether/rte_ethdev.c	1442
rte_eth_stats_reset	lib/librte_ether/rte_ethdev.h	2069
rte_eth_stats_reset	lib/librte_pmd_bond/rte_eth_bond_pmd.c	1398
rte_eth_xstats_get	app/test-pmd/config.c	220
rte_eth_xstats_get	app/test-pmd/config.c	230
rte_eth_xstats_get	lib/librte_ether/rte_ethdev.c	1349
rte_eth_xstats_get	lib/librte_ether/rte_ethdev.h	2092
rte_eth_xstats_reset	app/test-pmd/config.c	244
rte_eth_xstats_reset	lib/librte_ether/rte_ethdev.c	1424
rte_eth_xstats_reset	lib/librte_ether/rte_ethdev.h	2101
rte_eth_dev_set_tx_queue_stats_mapping	app/test-pmd/testpmd.c	1605
rte_eth_dev_set_tx_queue_stats_mapping	lib/librte_ether/rte_ethdev.c	1465
rte_eth_dev_set_tx_queue_stats_mapping	lib/librte_ether/rte_ethdev.h	2120
rte_eth_dev_set_rx_queue_stats_mapping	app/test-pmd/testpmd.c	1628
rte_eth_dev_set_rx_queue_stats_mapping	lib/librte_ether/rte_ethdev.c	1474
rte_eth_dev_set_rx_queue_stats_mapping	lib/librte_ether/rte_ethdev.h	2141
rte_eth_macaddr_get	app/test-pmd/config.c	314
rte_eth_macaddr_get	app/test-pmd/testpmd.c	1401
rte_eth_macaddr_get	app/test-pmd/testpmd.c	1752
rte_eth_macaddr_get	app/test-pmd/testpmd.c	1879
rte_eth_macaddr_get	app/test/test_link_bonding.c	459
rte_eth_macaddr_get	app/test/test_link_bonding.c	816
rte_eth_macaddr_get	app/test/test_link_bonding.c	822
rte_eth_macaddr_get	app/test/test_link_bonding.c	830
rte_eth_macaddr_get	app/test/test_link_bonding.c	896
rte_eth_macaddr_get	app/test/test_link_bonding.c	902
rte_eth_macaddr_get	app/test/test_link_bonding.c	1017
rte_eth_macaddr_get	app/test/test_link_bonding.c	1022
rte_eth_macaddr_get	app/test/test_link_bonding.c	1028
rte_eth_macaddr_get	app/test/test_link_bonding.c	1034
rte_eth_macaddr_get	app/test/test_link_bonding.c	1053
rte_eth_macaddr_get	app/test/test_link_bonding.c	1059
rte_eth_macaddr_get	app/test/test_link_bonding.c	1065
rte_eth_macaddr_get	app/test/test_link_bonding.c	1070
rte_eth_macaddr_get	app/test/test_link_bonding.c	1096
rte_eth_macaddr_get	app/test/test_link_bonding.c	1102
rte_eth_macaddr_get	app/test/test_link_bonding.c	1108
rte_eth_macaddr_get	app/test/test_link_bonding.c	1728
rte_eth_macaddr_get	app/test/test_link_bonding.c	1729
rte_eth_macaddr_get	app/test/test_link_bonding.c	1738
rte_eth_macaddr_get	app/test/test_link_bonding.c	1752
rte_eth_macaddr_get	app/test/test_link_bonding.c	1767
rte_eth_macaddr_get	app/test/test_link_bonding.c	1774
rte_eth_macaddr_get	app/test/test_link_bonding.c	1786
rte_eth_macaddr_get	app/test/test_link_bonding.c	1793
rte_eth_macaddr_get	app/test/test_link_bonding.c	2305
rte_eth_macaddr_get	app/test/test_link_bonding.c	2306
rte_eth_macaddr_get	app/test/test_link_bonding.c	2315
rte_eth_macaddr_get	app/test/test_link_bonding.c	2321
rte_eth_macaddr_get	app/test/test_link_bonding.c	2327
rte_eth_macaddr_get	app/test/test_link_bonding.c	2339
rte_eth_macaddr_get	app/test/test_link_bonding.c	2345
rte_eth_macaddr_get	app/test/test_link_bonding.c	2351
rte_eth_macaddr_get	app/test/test_link_bonding.c	2365
rte_eth_macaddr_get	app/test/test_link_bonding.c	2371
rte_eth_macaddr_get	app/test/test_link_bonding.c	2377
rte_eth_macaddr_get	app/test/test_link_bonding.c	2388
rte_eth_macaddr_get	app/test/test_link_bonding.c	2394
rte_eth_macaddr_get	app/test/test_link_bonding.c	2400
rte_eth_macaddr_get	app/test/test_link_bonding.c	3207
rte_eth_macaddr_get	app/test/test_link_bonding.c	3208
rte_eth_macaddr_get	app/test/test_link_bonding.c	3217
rte_eth_macaddr_get	app/test/test_link_bonding.c	3223
rte_eth_macaddr_get	app/test/test_link_bonding.c	3229
rte_eth_macaddr_get	app/test/test_link_bonding.c	3241
rte_eth_macaddr_get	app/test/test_link_bonding.c	3247
rte_eth_macaddr_get	app/test/test_link_bonding.c	3253
rte_eth_macaddr_get	app/test/test_link_bonding.c	3267
rte_eth_macaddr_get	app/test/test_link_bonding.c	3273
rte_eth_macaddr_get	app/test/test_link_bonding.c	3279
rte_eth_macaddr_get	app/test/test_link_bonding.c	3290
rte_eth_macaddr_get	app/test/test_link_bonding.c	3296
rte_eth_macaddr_get	app/test/test_link_bonding.c	3302
rte_eth_macaddr_get	app/test/test_link_bonding.c	3805
rte_eth_macaddr_get	app/test/test_link_bonding.c	3806
rte_eth_macaddr_get	app/test/test_link_bonding.c	3816
rte_eth_macaddr_get	app/test/test_link_bonding.c	3830
rte_eth_macaddr_get	app/test/test_link_bonding.c	3846
rte_eth_macaddr_get	app/test/test_link_bonding.c	3853
rte_eth_macaddr_get	app/test/test_link_bonding.c	3865
rte_eth_macaddr_get	app/test/test_link_bonding.c	3873
rte_eth_macaddr_get	app/test/test_link_bonding.c	4287
rte_eth_macaddr_get	app/test/test_link_bonding.c	4288
rte_eth_macaddr_get	app/test/test_link_bonding.c	4297
rte_eth_macaddr_get	app/test/test_link_bonding.c	4303
rte_eth_macaddr_get	app/test/test_link_bonding.c	4309
rte_eth_macaddr_get	app/test/test_link_bonding.c	4321
rte_eth_macaddr_get	app/test/test_link_bonding.c	4327
rte_eth_macaddr_get	app/test/test_link_bonding.c	4333
rte_eth_macaddr_get	app/test/test_link_bonding.c	4347
rte_eth_macaddr_get	app/test/test_link_bonding.c	4353
rte_eth_macaddr_get	app/test/test_link_bonding.c	4359
rte_eth_macaddr_get	app/test/test_link_bonding.c	4371
rte_eth_macaddr_get	app/test/test_link_bonding.c	4377
rte_eth_macaddr_get	app/test/test_link_bonding.c	4383
rte_eth_macaddr_get	app/test/test_pmd_perf.c	758
rte_eth_macaddr_get	examples/distributor/main.c	162
rte_eth_macaddr_get	examples/dpdk_qat/main.c	732
rte_eth_macaddr_get	examples/ip_fragmentation/main.c	910
rte_eth_macaddr_get	examples/ip_reassembly/main.c	1115
rte_eth_macaddr_get	examples/ipv4_multicast/main.c	761
rte_eth_macaddr_get	examples/l2fwd-ivshmem/host/host.c	750
rte_eth_macaddr_get	examples/l2fwd-ivshmem/host/host.c	819
rte_eth_macaddr_get	examples/l2fwd/main.c	655
rte_eth_macaddr_get	examples/l3fwd-acl/main.c	1998
rte_eth_macaddr_get	examples/l3fwd-power/main.c	1540
rte_eth_macaddr_get	examples/l3fwd-vf/main.c	1018
rte_eth_macaddr_get	examples/l3fwd/main.c	2463
rte_eth_macaddr_get	examples/link_status_interrupt/main.c	709
rte_eth_macaddr_get	examples/multi_process/client_server_mp/mp_server/main.c	104
rte_eth_macaddr_get	examples/multi_process/l2fwd_fork/main.c	1126
rte_eth_macaddr_get	examples/quota_watermark/qw/main.c	96
rte_eth_macaddr_get	examples/skeleton/basicfwd.c	92
rte_eth_macaddr_get	examples/vhost/main.c	473
rte_eth_macaddr_get	examples/vhost_xen/main.c	334
rte_eth_macaddr_get	examples/vmdq/main.c	288
rte_eth_macaddr_get	examples/vmdq_dcb/main.c	203
rte_eth_macaddr_get	lib/librte_ether/rte_ethdev.c	1504
rte_eth_macaddr_get	lib/librte_ether/rte_ethdev.h	2154
rte_eth_macaddr_get	lib/librte_pmd_bond/rte_eth_bond_8023ad.c	598
rte_eth_macaddr_get	lib/librte_pmd_bond/rte_eth_bond_8023ad.c	759
rte_eth_macaddr_get	lib/librte_pmd_bond/rte_eth_bond_8023ad.c	979
rte_eth_macaddr_get	lib/librte_pmd_bond/rte_eth_bond_8023ad.c	1112
rte_eth_macaddr_get	lib/librte_pmd_bond/rte_eth_bond_pmd.c	124
rte_eth_dev_info_get	app/test-pmd/cmdline.c	1787
rte_eth_dev_info_get	app/test-pmd/cmdline.c	1904
rte_eth_dev_info_get	app/test-pmd/cmdline.c	3032
rte_eth_dev_info_get	app/test-pmd/cmdline.c	3131
rte_eth_dev_info_get	app/test-pmd/config.c	359
rte_eth_dev_info_get	app/test-pmd/config.c	675
rte_eth_dev_info_get	app/test-pmd/testpmd.c	565
rte_eth_dev_info_get	app/test-pmd/testpmd.c	635
rte_eth_dev_info_get	app/test/test_kni.c	389
rte_eth_dev_info_get	app/test/test_kni.c	557
rte_eth_dev_info_get	app/test/test_kni.c	586
rte_eth_dev_info_get	examples/dpdk_qat/main.c	361
rte_eth_dev_info_get	examples/dpdk_qat/main.c	370
rte_eth_dev_info_get	examples/ip_fragmentation/main.c	924
rte_eth_dev_info_get	examples/ip_reassembly/main.c	1130
rte_eth_dev_info_get	examples/ipv4_multicast/main.c	786
rte_eth_dev_info_get	examples/kni/main.c	804
rte_eth_dev_info_get	examples/l2fwd-ivshmem/host/host.c	717
rte_eth_dev_info_get	examples/l2fwd/main.c	603
rte_eth_dev_info_get	examples/l3fwd-acl/main.c	2022
rte_eth_dev_info_get	examples/l3fwd-power/main.c	1564
rte_eth_dev_info_get	examples/l3fwd-vf/main.c	1032
rte_eth_dev_info_get	examples/l3fwd/main.c	2494
rte_eth_dev_info_get	examples/link_status_interrupt/main.c	652
rte_eth_dev_info_get	examples/multi_process/l2fwd_fork/main.c	1064
rte_eth_dev_info_get	examples/multi_process/symmetric_mp/main.c	245
rte_eth_dev_info_get	examples/vhost/main.c	381
rte_eth_dev_info_get	examples/vhost_xen/main.c	287
rte_eth_dev_info_get	examples/vhost_xen/main.c	310
rte_eth_dev_info_get	examples/vmdq/main.c	210
rte_eth_dev_info_get	examples/vmdq/main.c	258
rte_eth_dev_info_get	lib/librte_ether/rte_ethdev.c	877
rte_eth_dev_info_get	lib/librte_ether/rte_ethdev.c	1083
rte_eth_dev_info_get	lib/librte_ether/rte_ethdev.c	1152
rte_eth_dev_info_get	lib/librte_ether/rte_ethdev.c	1483
rte_eth_dev_info_get	lib/librte_ether/rte_ethdev.c	2268
rte_eth_dev_info_get	lib/librte_ether/rte_ethdev.c	2381
rte_eth_dev_info_get	lib/librte_ether/rte_ethdev.c	2409
rte_eth_dev_info_get	lib/librte_ether/rte_ethdev.c	2507
rte_eth_dev_info_get	lib/librte_ether/rte_ethdev.c	2533
rte_eth_dev_info_get	lib/librte_ether/rte_ethdev.c	2590
rte_eth_dev_info_get	lib/librte_ether/rte_ethdev.c	2627
rte_eth_dev_info_get	lib/librte_ether/rte_ethdev.h	2165
rte_eth_dev_info_get	lib/librte_ether/rte_ethdev.h	2941
rte_eth_dev_info_get	lib/librte_ether/rte_ethdev.h	2960
rte_eth_dev_info_get	lib/librte_kni/rte_kni.c	320
rte_eth_dev_info_get	lib/librte_pmd_bond/rte_eth_bond_api.c	357
rte_eth_dev_get_mtu	lib/librte_ether/rte_ethdev.c	1519
rte_eth_dev_get_mtu	lib/librte_ether/rte_ethdev.h	2179
rte_eth_dev_set_mtu	app/test-pmd/config.c	565
rte_eth_dev_set_mtu	lib/librte_ether/rte_ethdev.c	1534
rte_eth_dev_set_mtu	lib/librte_ether/rte_ethdev.h	2194
rte_eth_dev_vlan_filter	app/test-pmd/config.c	1660
rte_eth_dev_vlan_filter	app/test-pmd/config.c	1663
rte_eth_dev_vlan_filter	lib/librte_ether/rte_ethdev.c	1555
rte_eth_dev_vlan_filter	lib/librte_ether/rte_ethdev.h	2214
rte_eth_dev_set_vlan_strip_on_queue	app/test-pmd/config.c	1623
rte_eth_dev_set_vlan_strip_on_queue	examples/vhost/main.c	953
rte_eth_dev_set_vlan_strip_on_queue	examples/vhost_xen/main.c	736
rte_eth_dev_set_vlan_strip_on_queue	lib/librte_ether/rte_ethdev.c	1581
rte_eth_dev_set_vlan_strip_on_queue	lib/librte_ether/rte_ethdev.h	2235
rte_eth_dev_set_vlan_ether_type	app/test-pmd/config.c	1686
rte_eth_dev_set_vlan_ether_type	lib/librte_ether/rte_ethdev.c	1604
rte_eth_dev_set_vlan_ether_type	lib/librte_ether/rte_ethdev.h	2252
rte_eth_dev_set_vlan_offload	app/test-pmd/config.c	1587
rte_eth_dev_set_vlan_offload	app/test-pmd/config.c	1609
rte_eth_dev_set_vlan_offload	app/test-pmd/config.c	1645
rte_eth_dev_set_vlan_offload	lib/librte_ether/rte_ethdev.c	1621
rte_eth_dev_set_vlan_offload	lib/librte_ether/rte_ethdev.h	2274
rte_eth_dev_get_vlan_offload	app/test-pmd/config.c	339
rte_eth_dev_get_vlan_offload	app/test-pmd/config.c	1580
rte_eth_dev_get_vlan_offload	app/test-pmd/config.c	1602
rte_eth_dev_get_vlan_offload	app/test-pmd/config.c	1638
rte_eth_dev_get_vlan_offload	lib/librte_ether/rte_ethdev.c	1668
rte_eth_dev_get_vlan_offload	lib/librte_ether/rte_ethdev.h	2288
rte_eth_dev_set_vlan_pvid	app/test-pmd/config.c	1720
rte_eth_dev_set_vlan_pvid	lib/librte_ether/rte_ethdev.c	1693
rte_eth_dev_set_vlan_pvid	lib/librte_ether/rte_ethdev.h	2304
rte_eth_rx_burst	app/test-pipeline/pipeline_hash.c	439
rte_eth_rx_burst	app/test-pipeline/runtime.c	88
rte_eth_rx_burst	app/test-pmd/csumonly.c	506
rte_eth_rx_burst	app/test-pmd/flowgen.c	158
rte_eth_rx_burst	app/test-pmd/icmpecho.c	313
rte_eth_rx_burst	app/test-pmd/ieee1588fwd.c	540
rte_eth_rx_burst	app/test-pmd/iofwd.c	97
rte_eth_rx_burst	app/test-pmd/macfwd-retry.c	111
rte_eth_rx_burst	app/test-pmd/macfwd.c	102
rte_eth_rx_burst	app/test-pmd/macswap.c	102
rte_eth_rx_burst	app/test-pmd/rxonly.c	110
rte_eth_rx_burst	app/test-pmd/testpmd.c	922
rte_eth_rx_burst	app/test/test_link_bonding.c	1587
rte_eth_rx_burst	app/test/test_link_bonding.c	1672
rte_eth_rx_burst	app/test/test_link_bonding.c	1961
rte_eth_rx_burst	app/test/test_link_bonding.c	1964
rte_eth_rx_burst	app/test/test_link_bonding.c	2193
rte_eth_rx_burst	app/test/test_link_bonding.c	2195
rte_eth_rx_burst	app/test/test_link_bonding.c	2522
rte_eth_rx_burst	app/test/test_link_bonding.c	2524
rte_eth_rx_burst	app/test/test_link_bonding.c	3109
rte_eth_rx_burst	app/test/test_link_bonding.c	3451
rte_eth_rx_burst	app/test/test_link_bonding.c	3704
rte_eth_rx_burst	app/test/test_link_bonding.c	3980
rte_eth_rx_burst	app/test/test_link_bonding.c	3982
rte_eth_rx_burst	app/test/test_link_bonding.c	4177
rte_eth_rx_burst	app/test/test_link_bonding.c	4180
rte_eth_rx_burst	app/test/test_link_bonding.c	4507
rte_eth_rx_burst	app/test/test_link_bonding.c	4509
rte_eth_rx_burst	app/test/test_pmd_perf.c	394
rte_eth_rx_burst	app/test/test_pmd_perf.c	433
rte_eth_rx_burst	app/test/test_pmd_perf.c	470
rte_eth_rx_burst	app/test/test_pmd_perf.c	548
rte_eth_rx_burst	app/test/test_pmd_perf.c	611
rte_eth_rx_burst	app/test/test_pmd_ring.c	142
rte_eth_rx_burst	app/test/test_pmd_ring.c	178
rte_eth_rx_burst	app/test/test_pmd_ring.c	218
rte_eth_rx_burst	app/test/test_pmd_ring.c	289
rte_eth_rx_burst	app/test/test_pmd_ring.c	319
rte_eth_rx_burst	app/test/test_pmd_ring.c	349
rte_eth_rx_burst	app/test/test_pmd_ring.c	379
rte_eth_rx_burst	examples/distributor/main.c	230
rte_eth_rx_burst	examples/dpdk_qat/main.c	193
rte_eth_rx_burst	examples/exception_path/main.c	245
rte_eth_rx_burst	examples/ip_fragmentation/main.c	466
rte_eth_rx_burst	examples/ip_pipeline/pipeline_rx.c	305
rte_eth_rx_burst	examples/ip_reassembly/main.c	511
rte_eth_rx_burst	examples/ipv4_multicast/main.c	465
rte_eth_rx_burst	examples/kni/main.c	257
rte_eth_rx_burst	examples/l2fwd-ivshmem/host/host.c	610
rte_eth_rx_burst	examples/l2fwd/main.c	334
rte_eth_rx_burst	examples/l3fwd-acl/main.c	1454
rte_eth_rx_burst	examples/l3fwd-power/main.c	849
rte_eth_rx_burst	examples/l3fwd-vf/main.c	562
rte_eth_rx_burst	examples/l3fwd/main.c	1470
rte_eth_rx_burst	examples/link_status_interrupt/main.c	353
rte_eth_rx_burst	examples/load_balancer/runtime.c	196
rte_eth_rx_burst	examples/multi_process/client_server_mp/mp_server/main.c	288
rte_eth_rx_burst	examples/multi_process/l2fwd_fork/main.c	718
rte_eth_rx_burst	examples/multi_process/symmetric_mp/main.c	345
rte_eth_rx_burst	examples/netmap_compat/lib/compat_netmap.c	471
rte_eth_rx_burst	examples/qos_meter/main.c	217
rte_eth_rx_burst	examples/qos_sched/app_thread.c	96
rte_eth_rx_burst	examples/quota_watermark/qw/main.c	188
rte_eth_rx_burst	examples/skeleton/basicfwd.c	127
rte_eth_rx_burst	examples/vhost/main.c	981
rte_eth_rx_burst	examples/vhost/main.c	988
rte_eth_rx_burst	examples/vhost/main.c	1274
rte_eth_rx_burst	examples/vhost/main.c	2114
rte_eth_rx_burst	examples/vhost_xen/main.c	765
rte_eth_rx_burst	examples/vhost_xen/main.c	772
rte_eth_rx_burst	examples/vhost_xen/main.c	1065
rte_eth_rx_burst	examples/vmdq/main.c	520
rte_eth_rx_burst	examples/vmdq_dcb/main.c	354
rte_eth_rx_burst	lib/librte_ether/rte_ethdev.c	2715
rte_eth_rx_burst	lib/librte_ether/rte_ethdev.h	2312
rte_eth_rx_burst	lib/librte_ether/rte_ethdev.h	2328
rte_eth_rx_burst	lib/librte_ether/rte_ethdev.h	2332
rte_eth_rx_burst	lib/librte_ether/rte_ethdev.h	2339
rte_eth_rx_burst	lib/librte_ether/rte_ethdev.h	2354
rte_eth_rx_burst	lib/librte_ether/rte_ethdev.h	2358
rte_eth_rx_burst	lib/librte_ether/rte_ethdev.h	2367
rte_eth_rx_burst	lib/librte_ether/rte_ethdev.h	2389
rte_eth_rx_burst	lib/librte_ether/rte_ethdev.h	2393
rte_eth_rx_burst	lib/librte_pmd_bond/rte_eth_bond_pmd.c	78
rte_eth_rx_burst	lib/librte_pmd_bond/rte_eth_bond_pmd.c	100
rte_eth_rx_burst	lib/librte_pmd_bond/rte_eth_bond_pmd.c	136
rte_eth_rx_burst	lib/librte_port/rte_port_ethdev.c	83
rte_eth_rx_queue_count	lib/librte_ether/rte_ethdev.c	2758
rte_eth_rx_queue_count	lib/librte_ether/rte_ethdev.h	2414
rte_eth_rx_queue_count	lib/librte_ether/rte_ethdev.h	2417
rte_eth_rx_descriptor_done	examples/l3fwd-power/main.c	746
rte_eth_rx_descriptor_done	examples/l3fwd-power/main.c	750
rte_eth_rx_descriptor_done	examples/l3fwd-power/main.c	753
rte_eth_rx_descriptor_done	lib/librte_ether/rte_ethdev.c	2773
rte_eth_rx_descriptor_done	lib/librte_ether/rte_ethdev.h	2441
rte_eth_rx_descriptor_done	lib/librte_ether/rte_ethdev.h	2446
rte_eth_tx_burst	app/test-pipeline/runtime.c	166
rte_eth_tx_burst	app/test-pmd/csumonly.c	676
rte_eth_tx_burst	app/test-pmd/flowgen.c	219
rte_eth_tx_burst	app/test-pmd/icmpecho.c	470
rte_eth_tx_burst	app/test-pmd/ieee1588fwd.c	614
rte_eth_tx_burst	app/test-pmd/iofwd.c	106
rte_eth_tx_burst	app/test-pmd/macfwd-retry.c	128
rte_eth_tx_burst	app/test-pmd/macfwd-retry.c	136
rte_eth_tx_burst	app/test-pmd/macfwd.c	126
rte_eth_tx_burst	app/test-pmd/macswap.c	128
rte_eth_tx_burst	app/test-pmd/txonly.c	275
rte_eth_tx_burst	app/test/test_link_bonding.c	1392
rte_eth_tx_burst	app/test/test_link_bonding.c	1420
rte_eth_tx_burst	app/test/test_link_bonding.c	1501
rte_eth_tx_burst	app/test/test_link_bonding.c	1914
rte_eth_tx_burst	app/test/test_link_bonding.c	1915
rte_eth_tx_burst	app/test/test_link_bonding.c	2115
rte_eth_tx_burst	app/test/test_link_bonding.c	2151
rte_eth_tx_burst	app/test/test_link_bonding.c	2487
rte_eth_tx_burst	app/test/test_link_bonding.c	2489
rte_eth_tx_burst	app/test/test_link_bonding.c	2665
rte_eth_tx_burst	app/test/test_link_bonding.c	2700
rte_eth_tx_burst	app/test/test_link_bonding.c	2743
rte_eth_tx_burst	app/test/test_link_bonding.c	2748
rte_eth_tx_burst	app/test/test_link_bonding.c	2780
rte_eth_tx_burst	app/test/test_link_bonding.c	2855
rte_eth_tx_burst	app/test/test_link_bonding.c	2860
rte_eth_tx_burst	app/test/test_link_bonding.c	2893
rte_eth_tx_burst	app/test/test_link_bonding.c	2996
rte_eth_tx_burst	app/test/test_link_bonding.c	3013
rte_eth_tx_burst	app/test/test_link_bonding.c	3373
rte_eth_tx_burst	app/test/test_link_bonding.c	3375
rte_eth_tx_burst	app/test/test_link_bonding.c	3377
rte_eth_tx_burst	app/test/test_link_bonding.c	3379
rte_eth_tx_burst	app/test/test_link_bonding.c	3414
rte_eth_tx_burst	app/test/test_link_bonding.c	3416
rte_eth_tx_burst	app/test/test_link_bonding.c	3510
rte_eth_tx_burst	app/test/test_link_bonding.c	3541
rte_eth_tx_burst	app/test/test_link_bonding.c	3606
rte_eth_tx_burst	app/test/test_link_bonding.c	3938
rte_eth_tx_burst	app/test/test_link_bonding.c	3940
rte_eth_tx_burst	app/test/test_link_bonding.c	4085
rte_eth_tx_burst	app/test/test_link_bonding.c	4132
rte_eth_tx_burst	app/test/test_link_bonding.c	4469
rte_eth_tx_burst	app/test/test_link_bonding.c	4471
rte_eth_tx_burst	app/test/test_pmd_perf.c	402
rte_eth_tx_burst	app/test/test_pmd_perf.c	442
rte_eth_tx_burst	app/test/test_pmd_perf.c	480
rte_eth_tx_burst	app/test/test_pmd_perf.c	525
rte_eth_tx_burst	app/test/test_pmd_perf.c	669
rte_eth_tx_burst	app/test/test_pmd_ring.c	137
rte_eth_tx_burst	app/test/test_pmd_ring.c	174
rte_eth_tx_burst	app/test/test_pmd_ring.c	213
rte_eth_tx_burst	app/test/test_pmd_ring.c	284
rte_eth_tx_burst	app/test/test_pmd_ring.c	314
rte_eth_tx_burst	app/test/test_pmd_ring.c	344
rte_eth_tx_burst	app/test/test_pmd_ring.c	374
rte_eth_tx_burst	examples/distributor/main.c	270
rte_eth_tx_burst	examples/dpdk_qat/main.c	235
rte_eth_tx_burst	examples/dpdk_qat/main.c	270
rte_eth_tx_burst	examples/exception_path/main.c	291
rte_eth_tx_burst	examples/ip_fragmentation/main.c	257
rte_eth_tx_burst	examples/ip_pipeline/pipeline_tx.c	264
rte_eth_tx_burst	examples/ip_reassembly/main.c	297
rte_eth_tx_burst	examples/ipv4_multicast/main.c	212
rte_eth_tx_burst	examples/kni/main.c	299
rte_eth_tx_burst	examples/l2fwd-ivshmem/host/host.c	409
rte_eth_tx_burst	examples/l2fwd/main.c	200
rte_eth_tx_burst	examples/l3fwd-acl/main.c	1310
rte_eth_tx_burst	examples/l3fwd-power/main.c	444
rte_eth_tx_burst	examples/l3fwd-vf/main.c	319
rte_eth_tx_burst	examples/l3fwd/main.c	508
rte_eth_tx_burst	examples/l3fwd/main.c	556
rte_eth_tx_burst	examples/link_status_interrupt/main.c	218
rte_eth_tx_burst	examples/load_balancer/runtime.c	384
rte_eth_tx_burst	examples/load_balancer/runtime.c	432
rte_eth_tx_burst	examples/multi_process/client_server_mp/mp_client/client.c	181
rte_eth_tx_burst	examples/multi_process/l2fwd_fork/main.c	596
rte_eth_tx_burst	examples/multi_process/symmetric_mp/main.c	350
rte_eth_tx_burst	examples/netmap_compat/lib/compat_netmap.c	561
rte_eth_tx_burst	examples/qos_meter/main.c	201
rte_eth_tx_burst	examples/qos_meter/main.c	234
rte_eth_tx_burst	examples/qos_sched/app_thread.c	141
rte_eth_tx_burst	examples/quota_watermark/qw/main.c	110
rte_eth_tx_burst	examples/quota_watermark/qw/main.c	299
rte_eth_tx_burst	examples/skeleton/basicfwd.c	131
rte_eth_tx_burst	examples/vhost/main.c	1170
rte_eth_tx_burst	examples/vhost/main.c	1232
rte_eth_tx_burst	examples/vhost/main.c	1844
rte_eth_tx_burst	examples/vhost/main.c	2050
rte_eth_tx_burst	examples/vhost_xen/main.c	889
rte_eth_tx_burst	examples/vhost_xen/main.c	1025
rte_eth_tx_burst	examples/vmdq/main.c	531
rte_eth_tx_burst	examples/vmdq_dcb/main.c	360
rte_eth_tx_burst	lib/librte_ether/rte_ethdev.c	2736
rte_eth_tx_burst	lib/librte_ether/rte_ethdev.h	2459
rte_eth_tx_burst	lib/librte_ether/rte_ethdev.h	2464
rte_eth_tx_burst	lib/librte_ether/rte_ethdev.h	2467
rte_eth_tx_burst	lib/librte_ether/rte_ethdev.h	2478
rte_eth_tx_burst	lib/librte_ether/rte_ethdev.h	2481
rte_eth_tx_burst	lib/librte_ether/rte_ethdev.h	2486
rte_eth_tx_burst	lib/librte_ether/rte_ethdev.h	2489
rte_eth_tx_burst	lib/librte_ether/rte_ethdev.h	2494
rte_eth_tx_burst	lib/librte_ether/rte_ethdev.h	2516
rte_eth_tx_burst	lib/librte_ether/rte_ethdev.h	2520
rte_eth_tx_burst	lib/librte_pmd_bond/rte_eth_bond_pmd.c	218
rte_eth_tx_burst	lib/librte_pmd_bond/rte_eth_bond_pmd.c	251
rte_eth_tx_burst	lib/librte_pmd_bond/rte_eth_bond_pmd.c	521
rte_eth_tx_burst	lib/librte_pmd_bond/rte_eth_bond_pmd.c	572
rte_eth_tx_burst	lib/librte_pmd_bond/rte_eth_bond_pmd.c	663
rte_eth_tx_burst	lib/librte_pmd_bond/rte_eth_bond_pmd.c	718
rte_eth_tx_burst	lib/librte_port/rte_port_ethdev.c	152
rte_eth_tx_burst	lib/librte_port/rte_port_ethdev.c	232
rte_eth_dev_fdir_add_signature_filter	app/test-pmd/config.c	1784
rte_eth_dev_fdir_add_signature_filter	app/test-pmd/config.c	1789
rte_eth_dev_fdir_add_signature_filter	app/test-pmd/config.c	1824
rte_eth_dev_fdir_add_signature_filter	lib/librte_ether/rte_ethdev.c	1710
rte_eth_dev_fdir_add_signature_filter	lib/librte_ether/rte_ethdev.h	2552
rte_eth_dev_fdir_update_signature_filter	app/test-pmd/config.c	1802
rte_eth_dev_fdir_update_signature_filter	app/test-pmd/config.c	1807
rte_eth_dev_fdir_update_signature_filter	lib/librte_ether/rte_ethdev.c	1744
rte_eth_dev_fdir_update_signature_filter	lib/librte_ether/rte_ethdev.h	2578
rte_eth_dev_fdir_remove_signature_filter	app/test-pmd/config.c	1820
rte_eth_dev_fdir_remove_signature_filter	lib/librte_ether/rte_ethdev.c	1779
rte_eth_dev_fdir_remove_signature_filter	lib/librte_ether/rte_ethdev.h	2600
rte_eth_dev_fdir_get_infos	app/test-pmd/config.c	1896
rte_eth_dev_fdir_get_infos	lib/librte_ether/rte_ethdev.c	1811
rte_eth_dev_fdir_get_infos	lib/librte_ether/rte_ethdev.h	2617
rte_eth_dev_fdir_add_perfect_filter	app/test-pmd/config.c	1966
rte_eth_dev_fdir_add_perfect_filter	app/test-pmd/config.c	1971
rte_eth_dev_fdir_add_perfect_filter	lib/librte_ether/rte_ethdev.c	1833
rte_eth_dev_fdir_add_perfect_filter	lib/librte_ether/rte_ethdev.h	2647
rte_eth_dev_fdir_update_perfect_filter	app/test-pmd/config.c	1984
rte_eth_dev_fdir_update_perfect_filter	app/test-pmd/config.c	1989
rte_eth_dev_fdir_update_perfect_filter	app/test-pmd/config.c	2007
rte_eth_dev_fdir_update_perfect_filter	lib/librte_ether/rte_ethdev.c	1873
rte_eth_dev_fdir_update_perfect_filter	lib/librte_ether/rte_ethdev.h	2681
rte_eth_dev_fdir_remove_perfect_filter	app/test-pmd/config.c	2002
rte_eth_dev_fdir_remove_perfect_filter	lib/librte_ether/rte_ethdev.c	1912
rte_eth_dev_fdir_remove_perfect_filter	lib/librte_ether/rte_ethdev.h	2707
rte_eth_dev_fdir_set_masks	app/test-pmd/config.c	2019
rte_eth_dev_fdir_set_masks	lib/librte_ether/rte_ethdev.c	1950
rte_eth_dev_fdir_set_masks	lib/librte_ether/rte_ethdev.h	2743
rte_eth_dev_callback_register	app/test/test_link_bonding.c	1236
rte_eth_dev_callback_register	app/test/test_link_bonding.c	2036
rte_eth_dev_callback_register	examples/link_status_interrupt/main.c	706
rte_eth_dev_callback_register	lib/librte_ether/rte_ethdev.c	2790
rte_eth_dev_callback_register	lib/librte_ether/rte_ethdev.h	2777
rte_eth_dev_callback_register	lib/librte_pmd_bond/rte_eth_bond_api.c	410
rte_eth_dev_callback_unregister	app/test/test_link_bonding.c	1303
rte_eth_dev_callback_unregister	app/test/test_link_bonding.c	2064
rte_eth_dev_callback_unregister	lib/librte_ether/rte_ethdev.c	2830
rte_eth_dev_callback_unregister	lib/librte_ether/rte_ethdev.h	2798
rte_eth_dev_callback_unregister	lib/librte_pmd_bond/rte_eth_bond_api.c	486
rte_eth_led_on	lib/librte_ether/rte_ethdev.c	2228
rte_eth_led_on	lib/librte_ether/rte_ethdev.h	2830
rte_eth_led_off	lib/librte_ether/rte_ethdev.c	2243
rte_eth_led_off	lib/librte_ether/rte_ethdev.h	2844
rte_eth_dev_flow_ctrl_get	app/test-pmd/cmdline.c	5220
rte_eth_dev_flow_ctrl_get	lib/librte_ether/rte_ethdev.c	1970
rte_eth_dev_flow_ctrl_get	lib/librte_ether/rte_ethdev.h	2858
rte_eth_dev_flow_ctrl_set	app/test-pmd/cmdline.c	5265
rte_eth_dev_flow_ctrl_set	examples/quota_watermark/qw/init.c	105
rte_eth_dev_flow_ctrl_set	lib/librte_ether/rte_ethdev.c	1986
rte_eth_dev_flow_ctrl_set	lib/librte_ether/rte_ethdev.h	2875
rte_eth_dev_priority_flow_ctrl_set	app/test-pmd/cmdline.c	5313
rte_eth_dev_priority_flow_ctrl_set	lib/librte_ether/rte_ethdev.c	2006
rte_eth_dev_priority_flow_ctrl_set	lib/librte_ether/rte_ethdev.h	2893
rte_eth_dev_mac_addr_add	app/test-pmd/cmdline.c	6076
rte_eth_dev_mac_addr_add	app/test-pmd/cmdline.c	6558
rte_eth_dev_mac_addr_add	examples/vhost/main.c	946
rte_eth_dev_mac_addr_add	examples/vhost_xen/main.c	728
rte_eth_dev_mac_addr_add	examples/vmdq/main.c	314
rte_eth_dev_mac_addr_add	lib/librte_ether/rte_ethdev.c	2280
rte_eth_dev_mac_addr_add	lib/librte_ether/rte_ethdev.h	2914
rte_eth_dev_mac_addr_remove	app/test-pmd/cmdline.c	6078
rte_eth_dev_mac_addr_remove	examples/vhost/main.c	974
rte_eth_dev_mac_addr_remove	examples/vhost_xen/main.c	758
rte_eth_dev_mac_addr_remove	lib/librte_ether/rte_ethdev.c	2334
rte_eth_dev_mac_addr_remove	lib/librte_ether/rte_ethdev.h	2930
rte_eth_dev_rss_reta_update	app/test-pmd/cmdline.c	1809
rte_eth_dev_rss_reta_update	lib/librte_ether/rte_ethdev.c	2083
rte_eth_dev_rss_reta_update	lib/librte_ether/rte_ethdev.h	2947
rte_eth_dev_rss_reta_query	app/test-pmd/config.c	807
rte_eth_dev_rss_reta_query	lib/librte_ether/rte_ethdev.c	2113
rte_eth_dev_rss_reta_query	lib/librte_ether/rte_ethdev.h	2966
rte_eth_dev_uc_hash_table_set	app/test-pmd/cmdline.c	6188
rte_eth_dev_uc_hash_table_set	lib/librte_ether/rte_ethdev.c	2422
rte_eth_dev_uc_hash_table_set	lib/librte_ether/rte_ethdev.h	2988
rte_eth_dev_uc_all_hash_table_set	app/test-pmd/cmdline.c	6250
rte_eth_dev_uc_all_hash_table_set	lib/librte_ether/rte_ethdev.c	2478
rte_eth_dev_uc_all_hash_table_set	lib/librte_ether/rte_ethdev.h	3008
rte_eth_dev_set_vf_rxmode	app/test-pmd/cmdline.c	6491
rte_eth_dev_set_vf_rxmode	lib/librte_ether/rte_ethdev.c	2367
rte_eth_dev_set_vf_rxmode	lib/librte_ether/rte_ethdev.h	3032
rte_eth_dev_set_vf_tx	app/test-pmd/config.c	2098
rte_eth_dev_set_vf_tx	app/test-pmd/config.c	2105
rte_eth_dev_set_vf_tx	lib/librte_ether/rte_ethdev.c	2521
rte_eth_dev_set_vf_tx	lib/librte_ether/rte_ethdev.h	3052
rte_eth_dev_set_vf_rx	app/test-pmd/cmdline.c	6491
rte_eth_dev_set_vf_rx	app/test-pmd/config.c	2096
rte_eth_dev_set_vf_rx	app/test-pmd/config.c	2102
rte_eth_dev_set_vf_rx	lib/librte_ether/rte_ethdev.c	2367
rte_eth_dev_set_vf_rx	lib/librte_ether/rte_ethdev.c	2495
rte_eth_dev_set_vf_rx	lib/librte_ether/rte_ethdev.h	3032
rte_eth_dev_set_vf_rx	lib/librte_ether/rte_ethdev.h	3071
rte_eth_dev_set_vf_vlan_filter	app/test-pmd/config.c	2119
rte_eth_dev_set_vf_vlan_filter	app/test-pmd/config.c	2122
rte_eth_dev_set_vf_vlan_filter	lib/librte_ether/rte_ethdev.c	2547
rte_eth_dev_set_vf_vlan_filter	lib/librte_ether/rte_ethdev.h	3093
rte_eth_mirror_rule_set	app/test-pmd/cmdline.c	7094
rte_eth_mirror_rule_set	app/test-pmd/cmdline.c	7097
rte_eth_mirror_rule_set	app/test-pmd/cmdline.c	7182
rte_eth_mirror_rule_set	app/test-pmd/cmdline.c	7185
rte_eth_mirror_rule_set	lib/librte_ether/rte_ethdev.c	2648
rte_eth_mirror_rule_set	lib/librte_ether/rte_ethdev.h	3118
rte_eth_mirror_rule_reset	app/test-pmd/cmdline.c	7246
rte_eth_mirror_rule_reset	lib/librte_ether/rte_ethdev.c	2691
rte_eth_mirror_rule_reset	lib/librte_ether/rte_ethdev.h	3136
rte_eth_set_queue_rate_limit	app/test-pmd/config.c	2140
rte_eth_set_queue_rate_limit	app/test-pmd/config.c	2143
rte_eth_set_queue_rate_limit	lib/librte_ether/rte_ethdev.c	2576
rte_eth_set_queue_rate_limit	lib/librte_ether/rte_ethdev.h	3154
rte_eth_set_vf_rate_limit	app/test-pmd/config.c	2165
rte_eth_set_vf_rate_limit	app/test-pmd/config.c	2168
rte_eth_set_vf_rate_limit	lib/librte_ether/rte_ethdev.c	2610
rte_eth_set_vf_rate_limit	lib/librte_ether/rte_ethdev.h	3174
rte_eth_dev_bypass_init	app/test-pmd/testpmd.c	1756
rte_eth_dev_bypass_init	lib/librte_ether/rte_ethdev.c	2897
rte_eth_dev_bypass_init	lib/librte_ether/rte_ethdev.h	3188
rte_eth_dev_bypass_state_show	app/test-pmd/cmdline.c	3533
rte_eth_dev_bypass_state_show	lib/librte_ether/rte_ethdev.c	2917
rte_eth_dev_bypass_state_show	lib/librte_ether/rte_ethdev.h	3205
rte_eth_dev_bypass_state_set	app/test-pmd/cmdline.c	3293
rte_eth_dev_bypass_state_set	lib/librte_ether/rte_ethdev.c	2936
rte_eth_dev_bypass_state_set	lib/librte_ether/rte_ethdev.h	3222
rte_eth_dev_wd_timeout_store	app/test-pmd/cmdline.c	3379
rte_eth_dev_wd_timeout_store	lib/librte_ether/rte_ethdev.c	2996
rte_eth_dev_wd_timeout_store	lib/librte_ether/rte_ethdev.h	3294
rte_eth_dev_bypass_ver_show	lib/librte_ether/rte_ethdev.c	3016
rte_eth_dev_bypass_ver_show	lib/librte_ether/rte_ethdev.h	3308
rte_eth_dev_bypass_wd_timeout_show	lib/librte_ether/rte_ethdev.c	3036
rte_eth_dev_bypass_wd_timeout_show	lib/librte_ether/rte_ethdev.h	3330
rte_eth_dev_bypass_wd_reset	lib/librte_ether/rte_ethdev.c	3056
rte_eth_dev_bypass_wd_reset	lib/librte_ether/rte_ethdev.h	3342
rte_eth_dev_rss_hash_update	app/test-pmd/cmdline.c	1494
rte_eth_dev_rss_hash_update	app/test-pmd/config.c	898
rte_eth_dev_rss_hash_update	lib/librte_ether/rte_ethdev.c	2136
rte_eth_dev_rss_hash_update	lib/librte_ether/rte_ethdev.h	3357
rte_eth_dev_rss_hash_conf_get	app/test-pmd/config.c	840
rte_eth_dev_rss_hash_conf_get	app/test-pmd/config.c	895
rte_eth_dev_rss_hash_conf_get	lib/librte_ether/rte_ethdev.c	2159
rte_eth_dev_rss_hash_conf_get	lib/librte_ether/rte_ethdev.h	3374
rte_eth_dev_udp_tunnel_add	app/test-pmd/cmdline.c	6977
rte_eth_dev_udp_tunnel_add	lib/librte_ether/rte_ethdev.c	2175
rte_eth_dev_udp_tunnel_add	lib/librte_ether/rte_ethdev.h	3392
rte_eth_dev_udp_tunnel_delete	app/test-pmd/cmdline.c	6979
rte_eth_dev_udp_tunnel_delete	lib/librte_ether/rte_ethdev.c	2201
rte_eth_dev_udp_tunnel_delete	lib/librte_ether/rte_ethdev.h	3409
rte_eth_dev_add_syn_filter	app/test-pmd/cmdline.c	7396
rte_eth_dev_add_syn_filter	lib/librte_ether/rte_ethdev.c	3077
rte_eth_dev_add_syn_filter	lib/librte_ether/rte_ethdev.h	3426
rte_eth_dev_remove_syn_filter	app/test-pmd/cmdline.c	7399
rte_eth_dev_remove_syn_filter	lib/librte_ether/rte_ethdev.c	3093
rte_eth_dev_remove_syn_filter	lib/librte_ether/rte_ethdev.h	3439
rte_eth_dev_get_syn_filter	app/test-pmd/config.c	2181
rte_eth_dev_get_syn_filter	lib/librte_ether/rte_ethdev.c	3108
rte_eth_dev_get_syn_filter	lib/librte_ether/rte_ethdev.h	3455
rte_eth_dev_add_2tuple_filter	app/test-pmd/cmdline.c	7506
rte_eth_dev_add_2tuple_filter	lib/librte_ether/rte_ethdev.c	3127
rte_eth_dev_add_2tuple_filter	lib/librte_ether/rte_ethdev.h	3479
rte_eth_dev_remove_2tuple_filter	app/test-pmd/cmdline.c	7509
rte_eth_dev_remove_2tuple_filter	lib/librte_ether/rte_ethdev.c	3151
rte_eth_dev_remove_2tuple_filter	lib/librte_ether/rte_ethdev.h	3495
rte_eth_dev_get_2tuple_filter	app/test-pmd/config.c	2202
rte_eth_dev_get_2tuple_filter	lib/librte_ether/rte_ethdev.c	3166
rte_eth_dev_get_2tuple_filter	lib/librte_ether/rte_ethdev.h	3516
rte_eth_dev_add_5tuple_filter	app/test-pmd/cmdline.c	7694
rte_eth_dev_add_5tuple_filter	lib/librte_ether/rte_ethdev.c	3185
rte_eth_dev_add_5tuple_filter	lib/librte_ether/rte_ethdev.h	3539
rte_eth_dev_remove_5tuple_filter	app/test-pmd/cmdline.c	7697
rte_eth_dev_remove_5tuple_filter	lib/librte_ether/rte_ethdev.c	3209
rte_eth_dev_remove_5tuple_filter	lib/librte_ether/rte_ethdev.h	3555
rte_eth_dev_get_5tuple_filter	app/test-pmd/config.c	2231
rte_eth_dev_get_5tuple_filter	lib/librte_ether/rte_ethdev.c	3224
rte_eth_dev_get_5tuple_filter	lib/librte_ether/rte_ethdev.h	3575
rte_eth_dev_add_flex_filter	app/test-pmd/cmdline.c	7959
rte_eth_dev_add_flex_filter	app/test-pmd/cmdline.c	7963
rte_eth_dev_add_flex_filter	lib/librte_ether/rte_ethdev.c	3244
rte_eth_dev_add_flex_filter	lib/librte_ether/rte_ethdev.h	3599
rte_eth_dev_remove_flex_filter	app/test-pmd/cmdline.c	7967
rte_eth_dev_remove_flex_filter	lib/librte_ether/rte_ethdev.c	3260
rte_eth_dev_remove_flex_filter	lib/librte_ether/rte_ethdev.h	3615
rte_eth_dev_get_flex_filter	app/test-pmd/config.c	2270
rte_eth_dev_get_flex_filter	lib/librte_ether/rte_ethdev.c	3275
rte_eth_dev_get_flex_filter	lib/librte_ether/rte_ethdev.h	3636
rte_eth_dev_filter_supported	app/test-pmd/cmdline.c	8129
rte_eth_dev_filter_supported	app/test-pmd/cmdline.c	8303
rte_eth_dev_filter_supported	app/test-pmd/cmdline.c	8555
rte_eth_dev_filter_supported	app/test-pmd/cmdline.c	8799
rte_eth_dev_filter_supported	app/test-pmd/cmdline.c	8855
rte_eth_dev_filter_supported	app/test-pmd/cmdline.c	8944
rte_eth_dev_filter_supported	app/test-pmd/cmdline.c	9027
rte_eth_dev_filter_supported	app/test-pmd/config.c	1891
rte_eth_dev_filter_supported	lib/librte_ether/rte_ethdev.c	3295
rte_eth_dev_filter_supported	lib/librte_ether/rte_ethdev.h	3652
rte_eth_dev_filter_ctrl	app/test-pmd/cmdline.c	6333
rte_eth_dev_filter_ctrl	app/test-pmd/cmdline.c	6338
rte_eth_dev_filter_ctrl	app/test-pmd/cmdline.c	6879
rte_eth_dev_filter_ctrl	app/test-pmd/cmdline.c	6884
rte_eth_dev_filter_ctrl	app/test-pmd/cmdline.c	8149
rte_eth_dev_filter_ctrl	app/test-pmd/cmdline.c	8154
rte_eth_dev_filter_ctrl	app/test-pmd/cmdline.c	8383
rte_eth_dev_filter_ctrl	app/test-pmd/cmdline.c	8386
rte_eth_dev_filter_ctrl	app/test-pmd/cmdline.c	8562
rte_eth_dev_filter_ctrl	app/test-pmd/cmdline.c	8808
rte_eth_dev_filter_ctrl	app/test-pmd/cmdline.c	8866
rte_eth_dev_filter_ctrl	app/test-pmd/cmdline.c	8953
rte_eth_dev_filter_ctrl	app/test-pmd/cmdline.c	9052
rte_eth_dev_filter_ctrl	app/test-pmd/config.c	1917
rte_eth_dev_filter_ctrl	app/test-pmd/config.c	1920
rte_eth_dev_filter_ctrl	lib/librte_ether/rte_ethdev.c	3311
rte_eth_dev_filter_ctrl	lib/librte_ether/rte_ethdev.h	3673
  
Iremonger, Bernard Feb. 18, 2015, 9:27 a.m. UTC | #7
> -----Original Message-----
> From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Tetsuya Mukawa
> Sent: Wednesday, February 18, 2015 6:10 AM
> To: Thomas Monjalon
> Cc: dev@dpdk.org; Neil Horman
> Subject: Re: [dpdk-dev] [PATCH v8 03/14] eal/pci, ethdev: Remove assumption that port will not be
> detached
> 
> On 2015/02/18 10:54, Tetsuya Mukawa wrote:
> > On 2015/02/18 9:31, Thomas Monjalon wrote:
> >> 2015-02-17 15:14, Tetsuya Mukawa:
> >>> On 2015/02/17 9:36, Thomas Monjalon wrote:
> >>>> 2015-02-16 13:14, Tetsuya Mukawa:
> >>>> Is uint8_t sill a good size for hotpluggable virtual device ids?
> >>> I am not sure it's enough, but uint8_t is widely used in "rte_ethdev.c"
> >>> as port id.
> >>> If someone reports it doesn't enough, I guess it will be the time to
> >>> write a patch to change all uint_8 in one patch.
> >> It's a big ABI breakage. So if we feel it's going to be required,
> >> it's better to do it now in 2.0 release I think.
> >>
> >> Any opinion?
> >>
> > Hi Thomas,
> >
> > I agree with it.
> > I will add an one more patch to change uint8_t to uint16_t.
> >
> > Thanks,
> > Tetsuya
> >
> 
> Hi Thomas,
> 
> Could I make sure.
> After changing uint8_t to uint16_t in "rte_ethdev.[ch]", must I also need to change other applications
> and libraries that call ethdev APIs?
> If so, I would not finish it by 23rd.
> 
> I've counted how many lines call ethdev APIs that are related to port_id.
> Could you please check an attached file?
> It's over 1200 lines. Probably to fix  one of caller, I will need to check how port_id is used, and fix more
> related lines. So probably thousands lines may need to be fixed.
> 
> When is deadline for fixing this changing?
> Also, if you have a good idea to fix it easier, could you please let me know?
> 
> Thanks,
> Tetsuya

Hi Tetsuya, Thomas,

As uint8_t is already widely used for port_id, I don't think it should be changed in this patchset.
If it is to be changed to uint16_t it should be done as a separate task (in a new patchset).

Regards,

Bernard.
  
Thomas Monjalon Feb. 18, 2015, 9:57 a.m. UTC | #8
2015-02-18 15:10, Tetsuya Mukawa:
> On 2015/02/18 10:54, Tetsuya Mukawa wrote:
> > On 2015/02/18 9:31, Thomas Monjalon wrote:
> >> 2015-02-17 15:14, Tetsuya Mukawa:
> >>> On 2015/02/17 9:36, Thomas Monjalon wrote:
> >>>> 2015-02-16 13:14, Tetsuya Mukawa:
> >>>> Is uint8_t sill a good size for hotpluggable virtual device ids?
> >>> I am not sure it's enough, but uint8_t is widely used in "rte_ethdev.c"
> >>> as port id.
> >>> If someone reports it doesn't enough, I guess it will be the time to
> >>> write a patch to change all uint_8 in one patch.
> >> It's a big ABI breakage. So if we feel it's going to be required,
> >> it's better to do it now in 2.0 release I think.
> >>
> >> Any opinion?
> >>
> > Hi Thomas,
> >
> > I agree with it.
> > I will add an one more patch to change uint8_t to uint16_t.
> >
> > Thanks,
> > Tetsuya
> >
> 
> Hi Thomas,
> 
> Could I make sure.
> After changing uint8_t to uint16_t in "rte_ethdev.[ch]", must I also
> need to change other applications and libraries that call ethdev APIs?
> If so, I would not finish it by 23rd.
> 
> I've counted how many lines call ethdev APIs that are related to port_id.
> Could you please check an attached file?
> It's over 1200 lines. Probably to fix  one of caller, I will need to
> check how port_id is used, and fix more related lines. So probably
> thousands lines may need to be fixed.
> 
> When is deadline for fixing this changing?
> Also, if you have a good idea to fix it easier, could you please let me
> know?

It was an open question.
If everybody is fine with 255 ports maximum, let's keep it as is.
  
Bruce Richardson Feb. 18, 2015, 10:03 a.m. UTC | #9
On Wed, Feb 18, 2015 at 10:57:25AM +0100, Thomas Monjalon wrote:
> 2015-02-18 15:10, Tetsuya Mukawa:
> > On 2015/02/18 10:54, Tetsuya Mukawa wrote:
> > > On 2015/02/18 9:31, Thomas Monjalon wrote:
> > >> 2015-02-17 15:14, Tetsuya Mukawa:
> > >>> On 2015/02/17 9:36, Thomas Monjalon wrote:
> > >>>> 2015-02-16 13:14, Tetsuya Mukawa:
> > >>>> Is uint8_t sill a good size for hotpluggable virtual device ids?
> > >>> I am not sure it's enough, but uint8_t is widely used in "rte_ethdev.c"
> > >>> as port id.
> > >>> If someone reports it doesn't enough, I guess it will be the time to
> > >>> write a patch to change all uint_8 in one patch.
> > >> It's a big ABI breakage. So if we feel it's going to be required,
> > >> it's better to do it now in 2.0 release I think.
> > >>
> > >> Any opinion?
> > >>
> > > Hi Thomas,
> > >
> > > I agree with it.
> > > I will add an one more patch to change uint8_t to uint16_t.
> > >
> > > Thanks,
> > > Tetsuya
> > >
> > 
> > Hi Thomas,
> > 
> > Could I make sure.
> > After changing uint8_t to uint16_t in "rte_ethdev.[ch]", must I also
> > need to change other applications and libraries that call ethdev APIs?
> > If so, I would not finish it by 23rd.
> > 
> > I've counted how many lines call ethdev APIs that are related to port_id.
> > Could you please check an attached file?
> > It's over 1200 lines. Probably to fix  one of caller, I will need to
> > check how port_id is used, and fix more related lines. So probably
> > thousands lines may need to be fixed.
> > 
> > When is deadline for fixing this changing?
> > Also, if you have a good idea to fix it easier, could you please let me
> > know?
> 
> It was an open question.
> If everybody is fine with 255 ports maximum, let's keep it as is.
> 
I think we are probably ok for now (and forseeable future) with 255 max.

However, if we did change it, I agree that in 2.0 is a very good time to do so.
Since we are expanding the field, rather than shrinking it, I don't see why we
can't just make the change at the ethdev level (and in libs API) in 2.0 and then in
later releases (e.g. 2.1) update the apps and examples to match. That way the
ABI stays the same from 2.0 onwards, and we don't have a huge amount of churn
changing it everywhere late in the 2.0 release cycle.

/Bruce
  
Tetsuya Mukawa Feb. 18, 2015, 10:58 a.m. UTC | #10
On 2015/02/18 19:03, Bruce Richardson wrote:
> On Wed, Feb 18, 2015 at 10:57:25AM +0100, Thomas Monjalon wrote:
>> 2015-02-18 15:10, Tetsuya Mukawa:
>>> On 2015/02/18 10:54, Tetsuya Mukawa wrote:
>>>> On 2015/02/18 9:31, Thomas Monjalon wrote:
>>>>> 2015-02-17 15:14, Tetsuya Mukawa:
>>>>>> On 2015/02/17 9:36, Thomas Monjalon wrote:
>>>>>>> 2015-02-16 13:14, Tetsuya Mukawa:
>>>>>>> Is uint8_t sill a good size for hotpluggable virtual device ids?
>>>>>> I am not sure it's enough, but uint8_t is widely used in "rte_ethdev.c"
>>>>>> as port id.
>>>>>> If someone reports it doesn't enough, I guess it will be the time to
>>>>>> write a patch to change all uint_8 in one patch.
>>>>> It's a big ABI breakage. So if we feel it's going to be required,
>>>>> it's better to do it now in 2.0 release I think.
>>>>>
>>>>> Any opinion?
>>>>>
>>>> Hi Thomas,
>>>>
>>>> I agree with it.
>>>> I will add an one more patch to change uint8_t to uint16_t.
>>>>
>>>> Thanks,
>>>> Tetsuya
>>>>
>>> Hi Thomas,
>>>
>>> Could I make sure.
>>> After changing uint8_t to uint16_t in "rte_ethdev.[ch]", must I also
>>> need to change other applications and libraries that call ethdev APIs?
>>> If so, I would not finish it by 23rd.
>>>
>>> I've counted how many lines call ethdev APIs that are related to port_id.
>>> Could you please check an attached file?
>>> It's over 1200 lines. Probably to fix  one of caller, I will need to
>>> check how port_id is used, and fix more related lines. So probably
>>> thousands lines may need to be fixed.
>>>
>>> When is deadline for fixing this changing?
>>> Also, if you have a good idea to fix it easier, could you please let me
>>> know?
>> It was an open question.
>> If everybody is fine with 255 ports maximum, let's keep it as is.
>>
> I think we are probably ok for now (and forseeable future) with 255 max.
>
> However, if we did change it, I agree that in 2.0 is a very good time to do so.
> Since we are expanding the field, rather than shrinking it, I don't see why we
> can't just make the change at the ethdev level (and in libs API) in 2.0 and then in
> later releases (e.g. 2.1) update the apps and examples to match. That way the
> ABI stays the same from 2.0 onwards, and we don't have a huge amount of churn
> changing it everywhere late in the 2.0 release cycle.

Hi Bruce,

Could you please check my RFC patch I will send soon?
I wrote the patch like below.

1. Copy header file like below.
$ cp lib/librte_ether/rte_ethdev.h lib/librte_ether/rte_ethdev_internal.h
2. Change "rte_ethdev.c" to include "rte_ethdev_internal.h"
3. Change type of port id in "rte_ethdev.c" and "rte_ethdev_internal.h".

If the patch is OK, I wll send it with hotplug patches.

Thanks,
Tetsuya


> /Bruce
  
Bruce Richardson Feb. 18, 2015, 12:23 p.m. UTC | #11
On Wed, Feb 18, 2015 at 07:58:06PM +0900, Tetsuya Mukawa wrote:
> On 2015/02/18 19:03, Bruce Richardson wrote:
> > On Wed, Feb 18, 2015 at 10:57:25AM +0100, Thomas Monjalon wrote:
> >> 2015-02-18 15:10, Tetsuya Mukawa:
> >>> On 2015/02/18 10:54, Tetsuya Mukawa wrote:
> >>>> On 2015/02/18 9:31, Thomas Monjalon wrote:
> >>>>> 2015-02-17 15:14, Tetsuya Mukawa:
> >>>>>> On 2015/02/17 9:36, Thomas Monjalon wrote:
> >>>>>>> 2015-02-16 13:14, Tetsuya Mukawa:
> >>>>>>> Is uint8_t sill a good size for hotpluggable virtual device ids?
> >>>>>> I am not sure it's enough, but uint8_t is widely used in "rte_ethdev.c"
> >>>>>> as port id.
> >>>>>> If someone reports it doesn't enough, I guess it will be the time to
> >>>>>> write a patch to change all uint_8 in one patch.
> >>>>> It's a big ABI breakage. So if we feel it's going to be required,
> >>>>> it's better to do it now in 2.0 release I think.
> >>>>>
> >>>>> Any opinion?
> >>>>>
> >>>> Hi Thomas,
> >>>>
> >>>> I agree with it.
> >>>> I will add an one more patch to change uint8_t to uint16_t.
> >>>>
> >>>> Thanks,
> >>>> Tetsuya
> >>>>
> >>> Hi Thomas,
> >>>
> >>> Could I make sure.
> >>> After changing uint8_t to uint16_t in "rte_ethdev.[ch]", must I also
> >>> need to change other applications and libraries that call ethdev APIs?
> >>> If so, I would not finish it by 23rd.
> >>>
> >>> I've counted how many lines call ethdev APIs that are related to port_id.
> >>> Could you please check an attached file?
> >>> It's over 1200 lines. Probably to fix  one of caller, I will need to
> >>> check how port_id is used, and fix more related lines. So probably
> >>> thousands lines may need to be fixed.
> >>>
> >>> When is deadline for fixing this changing?
> >>> Also, if you have a good idea to fix it easier, could you please let me
> >>> know?
> >> It was an open question.
> >> If everybody is fine with 255 ports maximum, let's keep it as is.
> >>
> > I think we are probably ok for now (and forseeable future) with 255 max.
> >
> > However, if we did change it, I agree that in 2.0 is a very good time to do so.
> > Since we are expanding the field, rather than shrinking it, I don't see why we
> > can't just make the change at the ethdev level (and in libs API) in 2.0 and then in
> > later releases (e.g. 2.1) update the apps and examples to match. That way the
> > ABI stays the same from 2.0 onwards, and we don't have a huge amount of churn
> > changing it everywhere late in the 2.0 release cycle.
> 
> Hi Bruce,
> 
> Could you please check my RFC patch I will send soon?
> I wrote the patch like below.
> 
> 1. Copy header file like below.
> $ cp lib/librte_ether/rte_ethdev.h lib/librte_ether/rte_ethdev_internal.h
> 2. Change "rte_ethdev.c" to include "rte_ethdev_internal.h"
> 3. Change type of port id in "rte_ethdev.c" and "rte_ethdev_internal.h".
> 
> If the patch is OK, I wll send it with hotplug patches.
> 
> Thanks,
> Tetsuya
> 
>
Why the new ethdev internal file?
  
Iremonger, Bernard Feb. 18, 2015, 12:33 p.m. UTC | #12
> -----Original Message-----
> From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Tetsuya Mukawa
> Sent: Wednesday, February 18, 2015 10:58 AM
> To: Richardson, Bruce; Thomas Monjalon
> Cc: dev@dpdk.org; Neil Horman
> Subject: Re: [dpdk-dev] [PATCH v8 03/14] eal/pci, ethdev: Remove assumption that port will not be
> detached
> 
> On 2015/02/18 19:03, Bruce Richardson wrote:
> > On Wed, Feb 18, 2015 at 10:57:25AM +0100, Thomas Monjalon wrote:
> >> 2015-02-18 15:10, Tetsuya Mukawa:
> >>> On 2015/02/18 10:54, Tetsuya Mukawa wrote:
> >>>> On 2015/02/18 9:31, Thomas Monjalon wrote:
> >>>>> 2015-02-17 15:14, Tetsuya Mukawa:
> >>>>>> On 2015/02/17 9:36, Thomas Monjalon wrote:
> >>>>>>> 2015-02-16 13:14, Tetsuya Mukawa:
> >>>>>>> Is uint8_t sill a good size for hotpluggable virtual device ids?
> >>>>>> I am not sure it's enough, but uint8_t is widely used in "rte_ethdev.c"
> >>>>>> as port id.
> >>>>>> If someone reports it doesn't enough, I guess it will be the time
> >>>>>> to write a patch to change all uint_8 in one patch.
> >>>>> It's a big ABI breakage. So if we feel it's going to be required,
> >>>>> it's better to do it now in 2.0 release I think.
> >>>>>
> >>>>> Any opinion?
> >>>>>
> >>>> Hi Thomas,
> >>>>
> >>>> I agree with it.
> >>>> I will add an one more patch to change uint8_t to uint16_t.
> >>>>
> >>>> Thanks,
> >>>> Tetsuya
> >>>>
> >>> Hi Thomas,
> >>>
> >>> Could I make sure.
> >>> After changing uint8_t to uint16_t in "rte_ethdev.[ch]", must I also
> >>> need to change other applications and libraries that call ethdev APIs?
> >>> If so, I would not finish it by 23rd.
> >>>
> >>> I've counted how many lines call ethdev APIs that are related to port_id.
> >>> Could you please check an attached file?
> >>> It's over 1200 lines. Probably to fix  one of caller, I will need to
> >>> check how port_id is used, and fix more related lines. So probably
> >>> thousands lines may need to be fixed.
> >>>
> >>> When is deadline for fixing this changing?
> >>> Also, if you have a good idea to fix it easier, could you please let
> >>> me know?
> >> It was an open question.
> >> If everybody is fine with 255 ports maximum, let's keep it as is.
> >>
> > I think we are probably ok for now (and forseeable future) with 255 max.
> >
> > However, if we did change it, I agree that in 2.0 is a very good time to do so.
> > Since we are expanding the field, rather than shrinking it, I don't
> > see why we can't just make the change at the ethdev level (and in libs
> > API) in 2.0 and then in later releases (e.g. 2.1) update the apps and
> > examples to match. That way the ABI stays the same from 2.0 onwards,
> > and we don't have a huge amount of churn changing it everywhere late in the 2.0 release cycle.
> 
> Hi Bruce,
> 
> Could you please check my RFC patch I will send soon?
> I wrote the patch like below.
> 
> 1. Copy header file like below.
> $ cp lib/librte_ether/rte_ethdev.h lib/librte_ether/rte_ethdev_internal.h
> 2. Change "rte_ethdev.c" to include "rte_ethdev_internal.h"
> 3. Change type of port id in "rte_ethdev.c" and "rte_ethdev_internal.h".
> 
> If the patch is OK, I wll send it with hotplug patches.
> 
> Thanks,
> Tetsuya
> 
> 
> > /Bruce
> 
Hi Tetsuya,

After this change there will be two header files with a lot of the same information.
lib/librte_ether/rte_ethdev.h
lib/librte_ether/rte_ethdev_internal.h
I don't think this is a good idea for maintenance in the future.
If 255 is ok for the foreseeable future, why change it now.

Regards,

Bernard.
  
Tetsuya Mukawa Feb. 18, 2015, 12:38 p.m. UTC | #13
On 2015/02/18 21:23, Bruce Richardson wrote:
> On Wed, Feb 18, 2015 at 07:58:06PM +0900, Tetsuya Mukawa wrote:
>> On 2015/02/18 19:03, Bruce Richardson wrote:
>>> On Wed, Feb 18, 2015 at 10:57:25AM +0100, Thomas Monjalon wrote:
>>>> 2015-02-18 15:10, Tetsuya Mukawa:
>>>>> On 2015/02/18 10:54, Tetsuya Mukawa wrote:
>>>>>> On 2015/02/18 9:31, Thomas Monjalon wrote:
>>>>>>> 2015-02-17 15:14, Tetsuya Mukawa:
>>>>>>>> On 2015/02/17 9:36, Thomas Monjalon wrote:
>>>>>>>>> 2015-02-16 13:14, Tetsuya Mukawa:
>>>>>>>>> Is uint8_t sill a good size for hotpluggable virtual device ids?
>>>>>>>> I am not sure it's enough, but uint8_t is widely used in "rte_ethdev.c"
>>>>>>>> as port id.
>>>>>>>> If someone reports it doesn't enough, I guess it will be the time to
>>>>>>>> write a patch to change all uint_8 in one patch.
>>>>>>> It's a big ABI breakage. So if we feel it's going to be required,
>>>>>>> it's better to do it now in 2.0 release I think.
>>>>>>>
>>>>>>> Any opinion?
>>>>>>>
>>>>>> Hi Thomas,
>>>>>>
>>>>>> I agree with it.
>>>>>> I will add an one more patch to change uint8_t to uint16_t.
>>>>>>
>>>>>> Thanks,
>>>>>> Tetsuya
>>>>>>
>>>>> Hi Thomas,
>>>>>
>>>>> Could I make sure.
>>>>> After changing uint8_t to uint16_t in "rte_ethdev.[ch]", must I also
>>>>> need to change other applications and libraries that call ethdev APIs?
>>>>> If so, I would not finish it by 23rd.
>>>>>
>>>>> I've counted how many lines call ethdev APIs that are related to port_id.
>>>>> Could you please check an attached file?
>>>>> It's over 1200 lines. Probably to fix  one of caller, I will need to
>>>>> check how port_id is used, and fix more related lines. So probably
>>>>> thousands lines may need to be fixed.
>>>>>
>>>>> When is deadline for fixing this changing?
>>>>> Also, if you have a good idea to fix it easier, could you please let me
>>>>> know?
>>>> It was an open question.
>>>> If everybody is fine with 255 ports maximum, let's keep it as is.
>>>>
>>> I think we are probably ok for now (and forseeable future) with 255 max.
>>>
>>> However, if we did change it, I agree that in 2.0 is a very good time to do so.
>>> Since we are expanding the field, rather than shrinking it, I don't see why we
>>> can't just make the change at the ethdev level (and in libs API) in 2.0 and then in
>>> later releases (e.g. 2.1) update the apps and examples to match. That way the
>>> ABI stays the same from 2.0 onwards, and we don't have a huge amount of churn
>>> changing it everywhere late in the 2.0 release cycle.
>> Hi Bruce,
>>
>> Could you please check my RFC patch I will send soon?
>> I wrote the patch like below.
>>
>> 1. Copy header file like below.
>> $ cp lib/librte_ether/rte_ethdev.h lib/librte_ether/rte_ethdev_internal.h
>> 2. Change "rte_ethdev.c" to include "rte_ethdev_internal.h"
>> 3. Change type of port id in "rte_ethdev.c" and "rte_ethdev_internal.h".
>>
>> If the patch is OK, I wll send it with hotplug patches.
>>
>> Thanks,
>> Tetsuya
>>
>>
> Why the new ethdev internal file? 

I guess some libraries that  include "rte_ethdev.h". To compile these
libraries, I thought such a header was needed.
But, it seems it's not the time to change type of port_id.
I appreciate for your checking.

Tetsuya
  
Tetsuya Mukawa Feb. 18, 2015, 12:41 p.m. UTC | #14
On 2015/02/18 21:33, Iremonger, Bernard wrote:
>
>> -----Original Message-----
>> From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Tetsuya Mukawa
>> Sent: Wednesday, February 18, 2015 10:58 AM
>> To: Richardson, Bruce; Thomas Monjalon
>> Cc: dev@dpdk.org; Neil Horman
>> Subject: Re: [dpdk-dev] [PATCH v8 03/14] eal/pci, ethdev: Remove assumption that port will not be
>> detached
>>
>> On 2015/02/18 19:03, Bruce Richardson wrote:
>>> On Wed, Feb 18, 2015 at 10:57:25AM +0100, Thomas Monjalon wrote:
>>>> 2015-02-18 15:10, Tetsuya Mukawa:
>>>>> On 2015/02/18 10:54, Tetsuya Mukawa wrote:
>>>>>> On 2015/02/18 9:31, Thomas Monjalon wrote:
>>>>>>> 2015-02-17 15:14, Tetsuya Mukawa:
>>>>>>>> On 2015/02/17 9:36, Thomas Monjalon wrote:
>>>>>>>>> 2015-02-16 13:14, Tetsuya Mukawa:
>>>>>>>>> Is uint8_t sill a good size for hotpluggable virtual device ids?
>>>>>>>> I am not sure it's enough, but uint8_t is widely used in "rte_ethdev.c"
>>>>>>>> as port id.
>>>>>>>> If someone reports it doesn't enough, I guess it will be the time
>>>>>>>> to write a patch to change all uint_8 in one patch.
>>>>>>> It's a big ABI breakage. So if we feel it's going to be required,
>>>>>>> it's better to do it now in 2.0 release I think.
>>>>>>>
>>>>>>> Any opinion?
>>>>>>>
>>>>>> Hi Thomas,
>>>>>>
>>>>>> I agree with it.
>>>>>> I will add an one more patch to change uint8_t to uint16_t.
>>>>>>
>>>>>> Thanks,
>>>>>> Tetsuya
>>>>>>
>>>>> Hi Thomas,
>>>>>
>>>>> Could I make sure.
>>>>> After changing uint8_t to uint16_t in "rte_ethdev.[ch]", must I also
>>>>> need to change other applications and libraries that call ethdev APIs?
>>>>> If so, I would not finish it by 23rd.
>>>>>
>>>>> I've counted how many lines call ethdev APIs that are related to port_id.
>>>>> Could you please check an attached file?
>>>>> It's over 1200 lines. Probably to fix  one of caller, I will need to
>>>>> check how port_id is used, and fix more related lines. So probably
>>>>> thousands lines may need to be fixed.
>>>>>
>>>>> When is deadline for fixing this changing?
>>>>> Also, if you have a good idea to fix it easier, could you please let
>>>>> me know?
>>>> It was an open question.
>>>> If everybody is fine with 255 ports maximum, let's keep it as is.
>>>>
>>> I think we are probably ok for now (and forseeable future) with 255 max.
>>>
>>> However, if we did change it, I agree that in 2.0 is a very good time to do so.
>>> Since we are expanding the field, rather than shrinking it, I don't
>>> see why we can't just make the change at the ethdev level (and in libs
>>> API) in 2.0 and then in later releases (e.g. 2.1) update the apps and
>>> examples to match. That way the ABI stays the same from 2.0 onwards,
>>> and we don't have a huge amount of churn changing it everywhere late in the 2.0 release cycle.
>> Hi Bruce,
>>
>> Could you please check my RFC patch I will send soon?
>> I wrote the patch like below.
>>
>> 1. Copy header file like below.
>> $ cp lib/librte_ether/rte_ethdev.h lib/librte_ether/rte_ethdev_internal.h
>> 2. Change "rte_ethdev.c" to include "rte_ethdev_internal.h"
>> 3. Change type of port id in "rte_ethdev.c" and "rte_ethdev_internal.h".
>>
>> If the patch is OK, I wll send it with hotplug patches.
>>
>> Thanks,
>> Tetsuya
>>
>>
>>> /Bruce
> Hi Tetsuya,
>
> After this change there will be two header files with a lot of the same information.
> lib/librte_ether/rte_ethdev.h
> lib/librte_ether/rte_ethdev_internal.h
> I don't think this is a good idea for maintenance in the future.
> If 255 is ok for the foreseeable future, why change it now.

Hi Bernard,

I appreciate for your checking.
Agree, it will not be good to have almost same headers.

Thanks,
Tetsuya

> Regards,
>
> Bernard.
>  
>
  

Patch

diff --git a/lib/librte_eal/common/include/rte_pci.h b/lib/librte_eal/common/include/rte_pci.h
index 7b48b55..7f2d699 100644
--- a/lib/librte_eal/common/include/rte_pci.h
+++ b/lib/librte_eal/common/include/rte_pci.h
@@ -207,6 +207,8 @@  struct rte_pci_driver {
 #define RTE_PCI_DRV_FORCE_UNBIND 0x0004
 /** Device driver supports link state interrupt */
 #define RTE_PCI_DRV_INTR_LSC	0x0008
+/** Device driver supports detaching capability */
+#define RTE_PCI_DRV_DETACHABLE	0x0010
 
 /**< Internal use only - Macro used by pci addr parsing functions **/
 #define GET_PCIADDR_FIELD(in, fd, lim, dlm)                   \
diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c
index ea3a1fb..a79fa5b 100644
--- a/lib/librte_ether/rte_ethdev.c
+++ b/lib/librte_ether/rte_ethdev.c
@@ -175,6 +175,16 @@  enum {
 	STAT_QMAP_RX
 };
 
+enum {
+	DEV_INVALID = 0,
+	DEV_VALID,
+};
+
+enum {
+	DEV_DISCONNECTED = 0,
+	DEV_CONNECTED
+};
+
 static inline void
 rte_eth_dev_data_alloc(void)
 {
@@ -201,19 +211,34 @@  rte_eth_dev_allocated(const char *name)
 {
 	unsigned i;
 
-	for (i = 0; i < nb_ports; i++) {
-		if (strcmp(rte_eth_devices[i].data->name, name) == 0)
+	for (i = 0; i < RTE_MAX_ETHPORTS; i++) {
+		if ((rte_eth_devices[i].attached == DEV_CONNECTED) &&
+		    strcmp(rte_eth_devices[i].data->name, name) == 0)
 			return &rte_eth_devices[i];
 	}
 	return NULL;
 }
 
+static uint8_t
+rte_eth_dev_allocate_new_port(void)
+{
+	unsigned i;
+
+	for (i = 0; i < RTE_MAX_ETHPORTS; i++) {
+		if (rte_eth_devices[i].attached == DEV_DISCONNECTED)
+			return i;
+	}
+	return RTE_MAX_ETHPORTS;
+}
+
 struct rte_eth_dev *
 rte_eth_dev_allocate(const char *name)
 {
+	uint8_t port_id;
 	struct rte_eth_dev *eth_dev;
 
-	if (nb_ports == RTE_MAX_ETHPORTS) {
+	port_id = rte_eth_dev_allocate_new_port();
+	if (port_id == RTE_MAX_ETHPORTS) {
 		PMD_DEBUG_TRACE("Reached maximum number of Ethernet ports\n");
 		return NULL;
 	}
@@ -226,10 +251,12 @@  rte_eth_dev_allocate(const char *name)
 		return NULL;
 	}
 
-	eth_dev = &rte_eth_devices[nb_ports];
-	eth_dev->data = &rte_eth_dev_data[nb_ports];
+	eth_dev = &rte_eth_devices[port_id];
+	eth_dev->data = &rte_eth_dev_data[port_id];
 	snprintf(eth_dev->data->name, sizeof(eth_dev->data->name), "%s", name);
-	eth_dev->data->port_id = nb_ports++;
+	eth_dev->data->port_id = port_id;
+	eth_dev->attached = DEV_CONNECTED;
+	nb_ports++;
 	return eth_dev;
 }
 
@@ -283,6 +310,7 @@  rte_eth_dev_init(struct rte_pci_driver *pci_drv,
 			(unsigned) pci_dev->id.device_id);
 	if (rte_eal_process_type() == RTE_PROC_PRIMARY)
 		rte_free(eth_dev->data->dev_private);
+	eth_dev->attached = DEV_DISCONNECTED;
 	nb_ports--;
 	return diag;
 }
@@ -308,10 +336,28 @@  rte_eth_driver_register(struct eth_driver *eth_drv)
 	rte_eal_pci_register(&eth_drv->pci_drv);
 }
 
+enum {
+	NO_TRACE = 0,
+	TRACE
+};
+
+static int
+rte_eth_dev_validate_port(uint8_t port_id, int trace)
+{
+	if (port_id >= RTE_MAX_ETHPORTS ||
+	    rte_eth_devices[port_id].attached != DEV_CONNECTED) {
+		if (trace) {
+			PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+		}
+		return DEV_INVALID;
+	} else
+		return DEV_VALID;
+}
+
 int
 rte_eth_dev_socket_id(uint8_t port_id)
 {
-	if (port_id >= nb_ports)
+	if (rte_eth_dev_validate_port(port_id, NO_TRACE) == DEV_INVALID)
 		return -1;
 	return rte_eth_devices[port_id].pci_dev->numa_node;
 }
@@ -369,10 +415,8 @@  rte_eth_dev_rx_queue_start(uint8_t port_id, uint16_t rx_queue_id)
 	 * in a multi-process setup*/
 	PROC_PRIMARY_OR_ERR_RET(-E_RTE_SECONDARY);
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return -EINVAL;
-	}
 
 	dev = &rte_eth_devices[port_id];
 	if (rx_queue_id >= dev->data->nb_rx_queues) {
@@ -395,10 +439,8 @@  rte_eth_dev_rx_queue_stop(uint8_t port_id, uint16_t rx_queue_id)
 	 * in a multi-process setup*/
 	PROC_PRIMARY_OR_ERR_RET(-E_RTE_SECONDARY);
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return -EINVAL;
-	}
 
 	dev = &rte_eth_devices[port_id];
 	if (rx_queue_id >= dev->data->nb_rx_queues) {
@@ -421,10 +463,8 @@  rte_eth_dev_tx_queue_start(uint8_t port_id, uint16_t tx_queue_id)
 	 * in a multi-process setup*/
 	PROC_PRIMARY_OR_ERR_RET(-E_RTE_SECONDARY);
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return -EINVAL;
-	}
 
 	dev = &rte_eth_devices[port_id];
 	if (tx_queue_id >= dev->data->nb_tx_queues) {
@@ -447,10 +487,8 @@  rte_eth_dev_tx_queue_stop(uint8_t port_id, uint16_t tx_queue_id)
 	 * in a multi-process setup*/
 	PROC_PRIMARY_OR_ERR_RET(-E_RTE_SECONDARY);
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return -EINVAL;
-	}
 
 	dev = &rte_eth_devices[port_id];
 	if (tx_queue_id >= dev->data->nb_tx_queues) {
@@ -703,10 +741,9 @@  rte_eth_dev_configure(uint8_t port_id, uint16_t nb_rx_q, uint16_t nb_tx_q,
 	 * in a multi-process setup*/
 	PROC_PRIMARY_OR_ERR_RET(-E_RTE_SECONDARY);
 
-	if (port_id >= nb_ports || port_id >= RTE_MAX_ETHPORTS) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return (-EINVAL);
-	}
+
 	dev = &rte_eth_devices[port_id];
 
 	FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_infos_get, -ENOTSUP);
@@ -888,10 +925,9 @@  rte_eth_dev_start(uint8_t port_id)
 	 * in a multi-process setup*/
 	PROC_PRIMARY_OR_ERR_RET(-E_RTE_SECONDARY);
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%" PRIu8 "\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return (-EINVAL);
-	}
+
 	dev = &rte_eth_devices[port_id];
 
 	FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_start, -ENOTSUP);
@@ -923,10 +959,9 @@  rte_eth_dev_stop(uint8_t port_id)
 	 * in a multi-process setup*/
 	PROC_PRIMARY_OR_RET();
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%" PRIu8 "\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return;
-	}
+
 	dev = &rte_eth_devices[port_id];
 
 	FUNC_PTR_OR_RET(*dev->dev_ops->dev_stop);
@@ -951,10 +986,9 @@  rte_eth_dev_set_link_up(uint8_t port_id)
 	 * in a multi-process setup*/
 	PROC_PRIMARY_OR_ERR_RET(-E_RTE_SECONDARY);
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return -EINVAL;
-	}
+
 	dev = &rte_eth_devices[port_id];
 
 	FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_set_link_up, -ENOTSUP);
@@ -970,10 +1004,9 @@  rte_eth_dev_set_link_down(uint8_t port_id)
 	 * in a multi-process setup*/
 	PROC_PRIMARY_OR_ERR_RET(-E_RTE_SECONDARY);
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return -EINVAL;
-	}
+
 	dev = &rte_eth_devices[port_id];
 
 	FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_set_link_down, -ENOTSUP);
@@ -989,10 +1022,8 @@  rte_eth_dev_close(uint8_t port_id)
 	 * in a multi-process setup*/
 	PROC_PRIMARY_OR_RET();
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return;
-	}
 
 	dev = &rte_eth_devices[port_id];
 
@@ -1017,10 +1048,9 @@  rte_eth_rx_queue_setup(uint8_t port_id, uint16_t rx_queue_id,
 	 * in a multi-process setup*/
 	PROC_PRIMARY_OR_ERR_RET(-E_RTE_SECONDARY);
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return (-EINVAL);
-	}
+
 	dev = &rte_eth_devices[port_id];
 	if (rx_queue_id >= dev->data->nb_rx_queues) {
 		PMD_DEBUG_TRACE("Invalid RX queue_id=%d\n", rx_queue_id);
@@ -1090,10 +1120,9 @@  rte_eth_tx_queue_setup(uint8_t port_id, uint16_t tx_queue_id,
 	 * in a multi-process setup*/
 	PROC_PRIMARY_OR_ERR_RET(-E_RTE_SECONDARY);
 
-	if (port_id >= RTE_MAX_ETHPORTS || port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return (-EINVAL);
-	}
+
 	dev = &rte_eth_devices[port_id];
 	if (tx_queue_id >= dev->data->nb_tx_queues) {
 		PMD_DEBUG_TRACE("Invalid TX queue_id=%d\n", tx_queue_id);
@@ -1123,10 +1152,9 @@  rte_eth_promiscuous_enable(uint8_t port_id)
 {
 	struct rte_eth_dev *dev;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return;
-	}
+
 	dev = &rte_eth_devices[port_id];
 
 	FUNC_PTR_OR_RET(*dev->dev_ops->promiscuous_enable);
@@ -1139,10 +1167,9 @@  rte_eth_promiscuous_disable(uint8_t port_id)
 {
 	struct rte_eth_dev *dev;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return;
-	}
+
 	dev = &rte_eth_devices[port_id];
 
 	FUNC_PTR_OR_RET(*dev->dev_ops->promiscuous_disable);
@@ -1155,10 +1182,8 @@  rte_eth_promiscuous_get(uint8_t port_id)
 {
 	struct rte_eth_dev *dev;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return -1;
-	}
 
 	dev = &rte_eth_devices[port_id];
 	return dev->data->promiscuous;
@@ -1169,10 +1194,9 @@  rte_eth_allmulticast_enable(uint8_t port_id)
 {
 	struct rte_eth_dev *dev;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return;
-	}
+
 	dev = &rte_eth_devices[port_id];
 
 	FUNC_PTR_OR_RET(*dev->dev_ops->allmulticast_enable);
@@ -1185,10 +1209,9 @@  rte_eth_allmulticast_disable(uint8_t port_id)
 {
 	struct rte_eth_dev *dev;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return;
-	}
+
 	dev = &rte_eth_devices[port_id];
 
 	FUNC_PTR_OR_RET(*dev->dev_ops->allmulticast_disable);
@@ -1201,10 +1224,8 @@  rte_eth_allmulticast_get(uint8_t port_id)
 {
 	struct rte_eth_dev *dev;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return -1;
-	}
 
 	dev = &rte_eth_devices[port_id];
 	return dev->data->all_multicast;
@@ -1229,10 +1250,9 @@  rte_eth_link_get(uint8_t port_id, struct rte_eth_link *eth_link)
 {
 	struct rte_eth_dev *dev;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return;
-	}
+
 	dev = &rte_eth_devices[port_id];
 
 	if (dev->data->dev_conf.intr_conf.lsc != 0)
@@ -1249,10 +1269,9 @@  rte_eth_link_get_nowait(uint8_t port_id, struct rte_eth_link *eth_link)
 {
 	struct rte_eth_dev *dev;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return;
-	}
+
 	dev = &rte_eth_devices[port_id];
 
 	if (dev->data->dev_conf.intr_conf.lsc != 0)
@@ -1269,10 +1288,9 @@  rte_eth_stats_get(uint8_t port_id, struct rte_eth_stats *stats)
 {
 	struct rte_eth_dev *dev;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return;
-	}
+
 	dev = &rte_eth_devices[port_id];
 	memset(stats, 0, sizeof(*stats));
 
@@ -1286,10 +1304,9 @@  rte_eth_stats_reset(uint8_t port_id)
 {
 	struct rte_eth_dev *dev;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return;
-	}
+
 	dev = &rte_eth_devices[port_id];
 
 	FUNC_PTR_OR_RET(*dev->dev_ops->stats_reset);
@@ -1307,10 +1324,9 @@  rte_eth_xstats_get(uint8_t port_id, struct rte_eth_xstats *xstats,
 	uint64_t val;
 	char *stats_ptr;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return -1;
-	}
+
 	dev = &rte_eth_devices[port_id];
 
 	/* implemented by the driver */
@@ -1376,10 +1392,9 @@  rte_eth_xstats_reset(uint8_t port_id)
 {
 	struct rte_eth_dev *dev;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return;
-	}
+
 	dev = &rte_eth_devices[port_id];
 
 	/* implemented by the driver */
@@ -1398,10 +1413,9 @@  set_queue_stats_mapping(uint8_t port_id, uint16_t queue_id, uint8_t stat_idx,
 {
 	struct rte_eth_dev *dev;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return -ENODEV;
-	}
+
 	dev = &rte_eth_devices[port_id];
 
 	FUNC_PTR_OR_ERR_RET(*dev->dev_ops->queue_stats_mapping_set, -ENOTSUP);
@@ -1433,10 +1447,9 @@  rte_eth_dev_info_get(uint8_t port_id, struct rte_eth_dev_info *dev_info)
 {
 	struct rte_eth_dev *dev;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return;
-	}
+
 	dev = &rte_eth_devices[port_id];
 
 	memset(dev_info, 0, sizeof(struct rte_eth_dev_info));
@@ -1453,10 +1466,9 @@  rte_eth_macaddr_get(uint8_t port_id, struct ether_addr *mac_addr)
 {
 	struct rte_eth_dev *dev;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return;
-	}
+
 	dev = &rte_eth_devices[port_id];
 	ether_addr_copy(&dev->data->mac_addrs[0], mac_addr);
 }
@@ -1467,10 +1479,8 @@  rte_eth_dev_get_mtu(uint8_t port_id, uint16_t *mtu)
 {
 	struct rte_eth_dev *dev;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return (-ENODEV);
-	}
 
 	dev = &rte_eth_devices[port_id];
 	*mtu = dev->data->mtu;
@@ -1483,10 +1493,8 @@  rte_eth_dev_set_mtu(uint8_t port_id, uint16_t mtu)
 	int ret;
 	struct rte_eth_dev *dev;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return (-ENODEV);
-	}
 
 	dev = &rte_eth_devices[port_id];
 	FUNC_PTR_OR_ERR_RET(*dev->dev_ops->mtu_set, -ENOTSUP);
@@ -1503,10 +1511,9 @@  rte_eth_dev_vlan_filter(uint8_t port_id, uint16_t vlan_id, int on)
 {
 	struct rte_eth_dev *dev;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return (-ENODEV);
-	}
+
 	dev = &rte_eth_devices[port_id];
 	if (! (dev->data->dev_conf.rxmode.hw_vlan_filter)) {
 		PMD_DEBUG_TRACE("port %d: vlan-filtering disabled\n", port_id);
@@ -1528,10 +1535,8 @@  rte_eth_dev_set_vlan_strip_on_queue(uint8_t port_id, uint16_t rx_queue_id, int o
 {
 	struct rte_eth_dev *dev;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return (-ENODEV);
-	}
 
 	dev = &rte_eth_devices[port_id];
 	if (rx_queue_id >= dev->data->nb_rx_queues) {
@@ -1550,10 +1555,8 @@  rte_eth_dev_set_vlan_ether_type(uint8_t port_id, uint16_t tpid)
 {
 	struct rte_eth_dev *dev;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return (-ENODEV);
-	}
 
 	dev = &rte_eth_devices[port_id];
 	FUNC_PTR_OR_ERR_RET(*dev->dev_ops->vlan_tpid_set, -ENOTSUP);
@@ -1570,10 +1573,8 @@  rte_eth_dev_set_vlan_offload(uint8_t port_id, int offload_mask)
 	int mask = 0;
 	int cur, org = 0;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return (-ENODEV);
-	}
 
 	dev = &rte_eth_devices[port_id];
 
@@ -1615,10 +1616,8 @@  rte_eth_dev_get_vlan_offload(uint8_t port_id)
 	struct rte_eth_dev *dev;
 	int ret = 0;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return (-ENODEV);
-	}
 
 	dev = &rte_eth_devices[port_id];
 
@@ -1639,10 +1638,9 @@  rte_eth_dev_set_vlan_pvid(uint8_t port_id, uint16_t pvid, int on)
 {
 	struct rte_eth_dev *dev;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return (-ENODEV);
-	}
+
 	dev = &rte_eth_devices[port_id];
 	FUNC_PTR_OR_ERR_RET(*dev->dev_ops->vlan_pvid_set, -ENOTSUP);
 	(*dev->dev_ops->vlan_pvid_set)(dev, pvid, on);
@@ -1657,10 +1655,8 @@  rte_eth_dev_fdir_add_signature_filter(uint8_t port_id,
 {
 	struct rte_eth_dev *dev;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return (-ENODEV);
-	}
 
 	dev = &rte_eth_devices[port_id];
 
@@ -1691,10 +1687,8 @@  rte_eth_dev_fdir_update_signature_filter(uint8_t port_id,
 {
 	struct rte_eth_dev *dev;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return (-ENODEV);
-	}
 
 	dev = &rte_eth_devices[port_id];
 
@@ -1725,10 +1719,8 @@  rte_eth_dev_fdir_remove_signature_filter(uint8_t port_id,
 {
 	struct rte_eth_dev *dev;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return (-ENODEV);
-	}
 
 	dev = &rte_eth_devices[port_id];
 
@@ -1756,10 +1748,8 @@  rte_eth_dev_fdir_get_infos(uint8_t port_id, struct rte_eth_fdir *fdir)
 {
 	struct rte_eth_dev *dev;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return (-ENODEV);
-	}
 
 	dev = &rte_eth_devices[port_id];
 	if (! (dev->data->dev_conf.fdir_conf.mode)) {
@@ -1781,10 +1771,8 @@  rte_eth_dev_fdir_add_perfect_filter(uint8_t port_id,
 {
 	struct rte_eth_dev *dev;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return (-ENODEV);
-	}
 
 	dev = &rte_eth_devices[port_id];
 
@@ -1821,10 +1809,8 @@  rte_eth_dev_fdir_update_perfect_filter(uint8_t port_id,
 {
 	struct rte_eth_dev *dev;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return (-ENODEV);
-	}
 
 	dev = &rte_eth_devices[port_id];
 
@@ -1859,10 +1845,8 @@  rte_eth_dev_fdir_remove_perfect_filter(uint8_t port_id,
 {
 	struct rte_eth_dev *dev;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return (-ENODEV);
-	}
 
 	dev = &rte_eth_devices[port_id];
 
@@ -1895,10 +1879,8 @@  rte_eth_dev_fdir_set_masks(uint8_t port_id, struct rte_fdir_masks *fdir_mask)
 {
 	struct rte_eth_dev *dev;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return (-ENODEV);
-	}
 
 	dev = &rte_eth_devices[port_id];
 	if (! (dev->data->dev_conf.fdir_conf.mode)) {
@@ -1915,10 +1897,8 @@  rte_eth_dev_flow_ctrl_get(uint8_t port_id, struct rte_eth_fc_conf *fc_conf)
 {
 	struct rte_eth_dev *dev;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return (-ENODEV);
-	}
 
 	dev = &rte_eth_devices[port_id];
 	FUNC_PTR_OR_ERR_RET(*dev->dev_ops->flow_ctrl_get, -ENOTSUP);
@@ -1931,10 +1911,8 @@  rte_eth_dev_flow_ctrl_set(uint8_t port_id, struct rte_eth_fc_conf *fc_conf)
 {
 	struct rte_eth_dev *dev;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return (-ENODEV);
-	}
 
 	if ((fc_conf->send_xon != 0) && (fc_conf->send_xon != 1)) {
 		PMD_DEBUG_TRACE("Invalid send_xon, only 0/1 allowed\n");
@@ -1951,10 +1929,8 @@  rte_eth_dev_priority_flow_ctrl_set(uint8_t port_id, struct rte_eth_pfc_conf *pfc
 {
 	struct rte_eth_dev *dev;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return (-ENODEV);
-	}
 
 	if (pfc_conf->priority > (ETH_DCB_NUM_USER_PRIORITIES - 1)) {
 		PMD_DEBUG_TRACE("Invalid priority, only 0-7 allowed\n");
@@ -2030,10 +2006,8 @@  rte_eth_dev_rss_reta_update(uint8_t port_id,
 	struct rte_eth_dev *dev;
 	int ret;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return -ENODEV;
-	}
 
 	/* Check mask bits */
 	ret = rte_eth_check_reta_mask(reta_conf, reta_size);
@@ -2081,10 +2055,9 @@  rte_eth_dev_rss_hash_update(uint8_t port_id, struct rte_eth_rss_conf *rss_conf)
 	struct rte_eth_dev *dev;
 	uint16_t rss_hash_protos;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return (-ENODEV);
-	}
+
 	rss_hash_protos = rss_conf->rss_hf;
 	if ((rss_hash_protos != 0) &&
 	    ((rss_hash_protos & ETH_RSS_PROTO_MASK) == 0)) {
@@ -2103,10 +2076,9 @@  rte_eth_dev_rss_hash_conf_get(uint8_t port_id,
 {
 	struct rte_eth_dev *dev;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return (-ENODEV);
-	}
+
 	dev = &rte_eth_devices[port_id];
 	FUNC_PTR_OR_ERR_RET(*dev->dev_ops->rss_hash_conf_get, -ENOTSUP);
 	return (*dev->dev_ops->rss_hash_conf_get)(dev, rss_conf);
@@ -2118,10 +2090,8 @@  rte_eth_dev_udp_tunnel_add(uint8_t port_id,
 {
 	struct rte_eth_dev *dev;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return -ENODEV;
-	}
 
 	if (udp_tunnel == NULL) {
 		PMD_DEBUG_TRACE("Invalid udp_tunnel parameter\n");
@@ -2144,10 +2114,9 @@  rte_eth_dev_udp_tunnel_delete(uint8_t port_id,
 {
 	struct rte_eth_dev *dev;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return -ENODEV;
-	}
+
 	dev = &rte_eth_devices[port_id];
 
 	if (udp_tunnel == NULL) {
@@ -2169,10 +2138,8 @@  rte_eth_led_on(uint8_t port_id)
 {
 	struct rte_eth_dev *dev;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return (-ENODEV);
-	}
 
 	dev = &rte_eth_devices[port_id];
 	FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_led_on, -ENOTSUP);
@@ -2184,10 +2151,8 @@  rte_eth_led_off(uint8_t port_id)
 {
 	struct rte_eth_dev *dev;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return (-ENODEV);
-	}
 
 	dev = &rte_eth_devices[port_id];
 	FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_led_off, -ENOTSUP);
@@ -2224,10 +2189,9 @@  rte_eth_dev_mac_addr_add(uint8_t port_id, struct ether_addr *addr,
 	int index;
 	uint64_t pool_mask;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return (-ENODEV);
-	}
+
 	dev = &rte_eth_devices[port_id];
 	FUNC_PTR_OR_ERR_RET(*dev->dev_ops->mac_addr_add, -ENOTSUP);
 
@@ -2275,10 +2239,9 @@  rte_eth_dev_mac_addr_remove(uint8_t port_id, struct ether_addr *addr)
 	struct rte_eth_dev *dev;
 	int index;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return (-ENODEV);
-	}
+
 	dev = &rte_eth_devices[port_id];
 	FUNC_PTR_OR_ERR_RET(*dev->dev_ops->mac_addr_remove, -ENOTSUP);
 
@@ -2309,7 +2272,7 @@  rte_eth_dev_set_vf_rxmode(uint8_t port_id,  uint16_t vf,
 	struct rte_eth_dev *dev;
 	struct rte_eth_dev_info dev_info;
 
-	if (port_id >= nb_ports) {
+	if (rte_eth_dev_validate_port(port_id, NO_TRACE) == DEV_INVALID) {
 		PMD_DEBUG_TRACE("set VF RX mode:Invalid port_id=%d\n",
 				port_id);
 		return (-ENODEV);
@@ -2364,7 +2327,7 @@  rte_eth_dev_uc_hash_table_set(uint8_t port_id, struct ether_addr *addr,
 	int ret;
 	struct rte_eth_dev *dev;
 
-	if (port_id >= nb_ports) {
+	if (rte_eth_dev_validate_port(port_id, NO_TRACE) == DEV_INVALID) {
 		PMD_DEBUG_TRACE("unicast hash setting:Invalid port_id=%d\n",
 			port_id);
 		return (-ENODEV);
@@ -2417,7 +2380,7 @@  rte_eth_dev_uc_all_hash_table_set(uint8_t port_id, uint8_t on)
 {
 	struct rte_eth_dev *dev;
 
-	if (port_id >= nb_ports) {
+	if (rte_eth_dev_validate_port(port_id, NO_TRACE) == DEV_INVALID) {
 		PMD_DEBUG_TRACE("unicast hash setting:Invalid port_id=%d\n",
 			port_id);
 		return (-ENODEV);
@@ -2436,10 +2399,8 @@  rte_eth_dev_set_vf_rx(uint8_t port_id,uint16_t vf, uint8_t on)
 	struct rte_eth_dev *dev;
 	struct rte_eth_dev_info dev_info;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return (-ENODEV);
-	}
 
 	dev = &rte_eth_devices[port_id];
 	rte_eth_dev_info_get(port_id, &dev_info);
@@ -2462,7 +2423,7 @@  rte_eth_dev_set_vf_tx(uint8_t port_id,uint16_t vf, uint8_t on)
 	struct rte_eth_dev *dev;
 	struct rte_eth_dev_info dev_info;
 
-	if (port_id >= nb_ports) {
+	if (rte_eth_dev_validate_port(port_id, NO_TRACE) == DEV_INVALID) {
 		PMD_DEBUG_TRACE("set pool tx:Invalid port_id=%d\n", port_id);
 		return (-ENODEV);
 	}
@@ -2487,7 +2448,7 @@  rte_eth_dev_set_vf_vlan_filter(uint8_t port_id, uint16_t vlan_id,
 {
 	struct rte_eth_dev *dev;
 
-	if (port_id >= nb_ports) {
+	if (rte_eth_dev_validate_port(port_id, NO_TRACE) == DEV_INVALID) {
 		PMD_DEBUG_TRACE("VF VLAN filter:invalid port id=%d\n",
 				port_id);
 		return (-ENODEV);
@@ -2518,7 +2479,7 @@  int rte_eth_set_queue_rate_limit(uint8_t port_id, uint16_t queue_idx,
 	struct rte_eth_dev_info dev_info;
 	struct rte_eth_link link;
 
-	if (port_id >= nb_ports) {
+	if (rte_eth_dev_validate_port(port_id, NO_TRACE) == DEV_INVALID) {
 		PMD_DEBUG_TRACE("set queue rate limit:invalid port id=%d\n",
 				port_id);
 		return -ENODEV;
@@ -2555,7 +2516,7 @@  int rte_eth_set_vf_rate_limit(uint8_t port_id, uint16_t vf, uint16_t tx_rate,
 	if (q_msk == 0)
 		return 0;
 
-	if (port_id >= nb_ports) {
+	if (rte_eth_dev_validate_port(port_id, NO_TRACE) == DEV_INVALID) {
 		PMD_DEBUG_TRACE("set VF rate limit:invalid port id=%d\n",
 				port_id);
 		return -ENODEV;
@@ -2589,10 +2550,8 @@  rte_eth_mirror_rule_set(uint8_t port_id,
 {
 	struct rte_eth_dev *dev = &rte_eth_devices[port_id];
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return (-ENODEV);
-	}
 
 	if (mirror_conf->rule_type_mask == 0) {
 		PMD_DEBUG_TRACE("mirror rule type can not be 0.\n");
@@ -2630,10 +2589,8 @@  rte_eth_mirror_rule_reset(uint8_t port_id, uint8_t rule_id)
 {
 	struct rte_eth_dev *dev = &rte_eth_devices[port_id];
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return (-ENODEV);
-	}
 
 	if(rule_id >= ETH_VMDQ_NUM_MIRROR_RULE)
 	{
@@ -2655,10 +2612,9 @@  rte_eth_rx_burst(uint8_t port_id, uint16_t queue_id,
 {
 	struct rte_eth_dev *dev;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return 0;
-	}
+
 	dev = &rte_eth_devices[port_id];
 	FUNC_PTR_OR_ERR_RET(*dev->rx_pkt_burst, 0);
 	if (queue_id >= dev->data->nb_rx_queues) {
@@ -2675,10 +2631,9 @@  rte_eth_tx_burst(uint8_t port_id, uint16_t queue_id,
 {
 	struct rte_eth_dev *dev;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return 0;
-	}
+
 	dev = &rte_eth_devices[port_id];
 
 	FUNC_PTR_OR_ERR_RET(*dev->tx_pkt_burst, 0);
@@ -2695,10 +2650,9 @@  rte_eth_rx_queue_count(uint8_t port_id, uint16_t queue_id)
 {
 	struct rte_eth_dev *dev;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return 0;
-	}
+
 	dev = &rte_eth_devices[port_id];
 	FUNC_PTR_OR_ERR_RET(*dev->dev_ops->rx_queue_count, 0);
 	return (*dev->dev_ops->rx_queue_count)(dev, queue_id);
@@ -2709,10 +2663,9 @@  rte_eth_rx_descriptor_done(uint8_t port_id, uint16_t queue_id, uint16_t offset)
 {
 	struct rte_eth_dev *dev;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return (-ENODEV);
-	}
+
 	dev = &rte_eth_devices[port_id];
 	FUNC_PTR_OR_ERR_RET(*dev->dev_ops->rx_descriptor_done, -ENOTSUP);
 	return (*dev->dev_ops->rx_descriptor_done)( \
@@ -2730,10 +2683,8 @@  rte_eth_dev_callback_register(uint8_t port_id,
 
 	if (!cb_fn)
 		return (-EINVAL);
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return (-EINVAL);
-	}
 
 	dev = &rte_eth_devices[port_id];
 	rte_spinlock_lock(&rte_eth_dev_cb_lock);
@@ -2770,10 +2721,8 @@  rte_eth_dev_callback_unregister(uint8_t port_id,
 
 	if (!cb_fn)
 		return (-EINVAL);
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return (-EINVAL);
-	}
 
 	dev = &rte_eth_devices[port_id];
 	rte_spinlock_lock(&rte_eth_dev_cb_lock);
@@ -2830,10 +2779,8 @@  int rte_eth_dev_bypass_init(uint8_t port_id)
 {
 	struct rte_eth_dev *dev;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return (-ENODEV);
-	}
 
 	if ((dev= &rte_eth_devices[port_id]) == NULL) {
 		PMD_DEBUG_TRACE("Invalid port device\n");
@@ -2850,10 +2797,8 @@  rte_eth_dev_bypass_state_show(uint8_t port_id, uint32_t *state)
 {
 	struct rte_eth_dev *dev;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return (-ENODEV);
-	}
 
 	if ((dev= &rte_eth_devices[port_id]) == NULL) {
 		PMD_DEBUG_TRACE("Invalid port device\n");
@@ -2869,10 +2814,8 @@  rte_eth_dev_bypass_state_set(uint8_t port_id, uint32_t *new_state)
 {
 	struct rte_eth_dev *dev;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return (-ENODEV);
-	}
 
 	if ((dev= &rte_eth_devices[port_id]) == NULL) {
 		PMD_DEBUG_TRACE("Invalid port device\n");
@@ -2889,10 +2832,8 @@  rte_eth_dev_bypass_event_show(uint8_t port_id, uint32_t event, uint32_t *state)
 {
 	struct rte_eth_dev *dev;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return (-ENODEV);
-	}
 
 	if ((dev= &rte_eth_devices[port_id]) == NULL) {
 		PMD_DEBUG_TRACE("Invalid port device\n");
@@ -2909,10 +2850,8 @@  rte_eth_dev_bypass_event_store(uint8_t port_id, uint32_t event, uint32_t state)
 {
 	struct rte_eth_dev *dev;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return (-ENODEV);
-	}
 
 	if ((dev= &rte_eth_devices[port_id]) == NULL) {
 		PMD_DEBUG_TRACE("Invalid port device\n");
@@ -2929,10 +2868,8 @@  rte_eth_dev_wd_timeout_store(uint8_t port_id, uint32_t timeout)
 {
 	struct rte_eth_dev *dev;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return (-ENODEV);
-	}
 
 	if ((dev= &rte_eth_devices[port_id]) == NULL) {
 		PMD_DEBUG_TRACE("Invalid port device\n");
@@ -2949,10 +2886,8 @@  rte_eth_dev_bypass_ver_show(uint8_t port_id, uint32_t *ver)
 {
 	struct rte_eth_dev *dev;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return (-ENODEV);
-	}
 
 	if ((dev= &rte_eth_devices[port_id]) == NULL) {
 		PMD_DEBUG_TRACE("Invalid port device\n");
@@ -2969,10 +2904,8 @@  rte_eth_dev_bypass_wd_timeout_show(uint8_t port_id, uint32_t *wd_timeout)
 {
 	struct rte_eth_dev *dev;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return (-ENODEV);
-	}
 
 	if ((dev= &rte_eth_devices[port_id]) == NULL) {
 		PMD_DEBUG_TRACE("Invalid port device\n");
@@ -2989,10 +2922,8 @@  rte_eth_dev_bypass_wd_reset(uint8_t port_id)
 {
 	struct rte_eth_dev *dev;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return (-ENODEV);
-	}
 
 	if ((dev= &rte_eth_devices[port_id]) == NULL) {
 		PMD_DEBUG_TRACE("Invalid port device\n");
@@ -3011,10 +2942,8 @@  rte_eth_dev_add_syn_filter(uint8_t port_id,
 {
 	struct rte_eth_dev *dev;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return -ENODEV;
-	}
 
 	dev = &rte_eth_devices[port_id];
 	FUNC_PTR_OR_ERR_RET(*dev->dev_ops->add_syn_filter, -ENOTSUP);
@@ -3026,10 +2955,8 @@  rte_eth_dev_remove_syn_filter(uint8_t port_id)
 {
 	struct rte_eth_dev *dev;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return -ENODEV;
-	}
 
 	dev = &rte_eth_devices[port_id];
 	FUNC_PTR_OR_ERR_RET(*dev->dev_ops->remove_syn_filter, -ENOTSUP);
@@ -3045,10 +2972,8 @@  rte_eth_dev_get_syn_filter(uint8_t port_id,
 	if (filter == NULL || rx_queue == NULL)
 		return -EINVAL;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return -ENODEV;
-	}
 
 	dev = &rte_eth_devices[port_id];
 	FUNC_PTR_OR_ERR_RET(*dev->dev_ops->get_syn_filter, -ENOTSUP);
@@ -3061,10 +2986,9 @@  rte_eth_dev_add_2tuple_filter(uint8_t port_id, uint16_t index,
 {
 	struct rte_eth_dev *dev;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return -ENODEV;
-	}
+
 	if (filter->protocol != IPPROTO_TCP &&
 		filter->tcp_flags != 0){
 		PMD_DEBUG_TRACE("tcp flags is 0x%x, but the protocol value"
@@ -3083,10 +3007,8 @@  rte_eth_dev_remove_2tuple_filter(uint8_t port_id, uint16_t index)
 {
 	struct rte_eth_dev *dev;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return -ENODEV;
-	}
 
 	dev = &rte_eth_devices[port_id];
 	FUNC_PTR_OR_ERR_RET(*dev->dev_ops->remove_2tuple_filter, -ENOTSUP);
@@ -3102,10 +3024,8 @@  rte_eth_dev_get_2tuple_filter(uint8_t port_id, uint16_t index,
 	if (filter == NULL || rx_queue == NULL)
 		return -EINVAL;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return -ENODEV;
-	}
 
 	dev = &rte_eth_devices[port_id];
 	FUNC_PTR_OR_ERR_RET(*dev->dev_ops->get_2tuple_filter, -ENOTSUP);
@@ -3118,10 +3038,8 @@  rte_eth_dev_add_5tuple_filter(uint8_t port_id, uint16_t index,
 {
 	struct rte_eth_dev *dev;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return -ENODEV;
-	}
 
 	if (filter->protocol != IPPROTO_TCP &&
 		filter->tcp_flags != 0){
@@ -3141,10 +3059,8 @@  rte_eth_dev_remove_5tuple_filter(uint8_t port_id, uint16_t index)
 {
 	struct rte_eth_dev *dev;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return -ENODEV;
-	}
 
 	dev = &rte_eth_devices[port_id];
 	FUNC_PTR_OR_ERR_RET(*dev->dev_ops->remove_5tuple_filter, -ENOTSUP);
@@ -3160,10 +3076,8 @@  rte_eth_dev_get_5tuple_filter(uint8_t port_id, uint16_t index,
 	if (filter == NULL || rx_queue == NULL)
 		return -EINVAL;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return -ENODEV;
-	}
 
 	dev = &rte_eth_devices[port_id];
 	FUNC_PTR_OR_ERR_RET(*dev->dev_ops->get_5tuple_filter, -ENOTSUP);
@@ -3177,10 +3091,8 @@  rte_eth_dev_add_flex_filter(uint8_t port_id, uint16_t index,
 {
 	struct rte_eth_dev *dev;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return -ENODEV;
-	}
 
 	dev = &rte_eth_devices[port_id];
 	FUNC_PTR_OR_ERR_RET(*dev->dev_ops->add_flex_filter, -ENOTSUP);
@@ -3192,10 +3104,8 @@  rte_eth_dev_remove_flex_filter(uint8_t port_id, uint16_t index)
 {
 	struct rte_eth_dev *dev;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return -ENODEV;
-	}
 
 	dev = &rte_eth_devices[port_id];
 	FUNC_PTR_OR_ERR_RET(*dev->dev_ops->remove_flex_filter, -ENOTSUP);
@@ -3211,10 +3121,8 @@  rte_eth_dev_get_flex_filter(uint8_t port_id, uint16_t index,
 	if (filter == NULL || rx_queue == NULL)
 		return -EINVAL;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return -ENODEV;
-	}
 
 	dev = &rte_eth_devices[port_id];
 	FUNC_PTR_OR_ERR_RET(*dev->dev_ops->get_flex_filter, -ENOTSUP);
@@ -3227,10 +3135,8 @@  rte_eth_dev_filter_supported(uint8_t port_id, enum rte_filter_type filter_type)
 {
 	struct rte_eth_dev *dev;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return -ENODEV;
-	}
 
 	dev = &rte_eth_devices[port_id];
 	FUNC_PTR_OR_ERR_RET(*dev->dev_ops->filter_ctrl, -ENOTSUP);
@@ -3244,10 +3150,8 @@  rte_eth_dev_filter_ctrl(uint8_t port_id, enum rte_filter_type filter_type,
 {
 	struct rte_eth_dev *dev;
 
-	if (port_id >= nb_ports) {
-		PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
+	if (rte_eth_dev_validate_port(port_id, TRACE) == DEV_INVALID)
 		return -ENODEV;
-	}
 
 	dev = &rte_eth_devices[port_id];
 	FUNC_PTR_OR_ERR_RET(*dev->dev_ops->filter_ctrl, -ENOTSUP);
diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h
index 1200c1c..ca101f5 100644
--- a/lib/librte_ether/rte_ethdev.h
+++ b/lib/librte_ether/rte_ethdev.h
@@ -1539,6 +1539,7 @@  struct rte_eth_dev {
 	struct eth_dev_ops *dev_ops;    /**< Functions exported by PMD */
 	struct rte_pci_device *pci_dev; /**< PCI info. supplied by probing */
 	struct rte_eth_dev_cb_list callbacks; /**< User application callbacks */
+	uint8_t attached; /**< Flag indicating the port is attached */
 };
 
 struct rte_eth_dev_sriov {
@@ -1604,6 +1605,10 @@  extern struct rte_eth_dev rte_eth_devices[];
  * initialized by the [matching] Ethernet driver during the PCI probing phase.
  * All devices whose port identifier is in the range
  * [0,  rte_eth_dev_count() - 1] can be operated on by network applications.
+ * immediately after invoking rte_eal_init().
+ * If the application unplugs a port using hotplug function, The enabled port
+ * numbers may be noncontiguous. In the case, the applications need to manage
+ * enabled port by themselves.
  *
  * @return
  *   - The total number of usable Ethernet devices.