[dpdk-dev,v2] ethdev: remove driver name from device private data

Message ID 20170606151008.62680-1-ferruh.yigit@intel.com (mailing list archive)
State Changes Requested, archived
Delegated to: Ferruh Yigit
Headers

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation fail Compilation issues

Commit Message

Ferruh Yigit June 6, 2017, 3:10 p.m. UTC
  rte_driver->name has the driver name and all physical and virtual
devices has access to it.

Previously it was not possible for virtual ethernet devices to access
rte_driver->name field (because eth_dev used to keep only pci_dev),
and it was required to save driver name in the device private struct.

After re-works on bus and vdev, it is possible for all bus types to
access rte_driver.

It is able to remove the driver name from ethdev device private data and
use eth_dev->device->driver->name.

Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
---
Cc: Gaetan Rivet <gaetan.rivet@6wind.com>
Cc: Jan Blunck <jblunck@infradead.org>

v2:
* rebase on latest next-net
---
 drivers/net/bnxt/bnxt_ethdev.c         | 2 +-
 drivers/net/bonding/rte_eth_bond_api.c | 4 ++--
 drivers/net/cxgbe/sge.c                | 6 +++---
 drivers/net/dpaa2/dpaa2_ethdev.c       | 1 -
 drivers/net/i40e/i40e_ethdev.c         | 3 +--
 drivers/net/i40e/i40e_fdir.c           | 2 +-
 drivers/net/ixgbe/ixgbe_ethdev.c       | 2 +-
 drivers/net/ring/rte_eth_ring.c        | 1 -
 drivers/net/tap/rte_eth_tap.c          | 1 -
 drivers/net/vmxnet3/vmxnet3_ethdev.c   | 2 +-
 drivers/net/xenvirt/rte_eth_xenvirt.c  | 1 -
 lib/librte_ether/rte_ethdev.c          | 8 ++++----
 lib/librte_ether/rte_ethdev.h          | 1 -
 lib/librte_ether/rte_ethdev_pci.h      | 1 -
 lib/librte_ether/rte_ethdev_vdev.h     | 1 -
 15 files changed, 14 insertions(+), 22 deletions(-)
  

Comments

Gaëtan Rivet June 6, 2017, 3:31 p.m. UTC | #1
Hi Ferruh,

On Tue, Jun 06, 2017 at 04:10:08PM +0100, Ferruh Yigit wrote:
> rte_driver->name has the driver name and all physical and virtual
> devices has access to it.
> 
> Previously it was not possible for virtual ethernet devices to access
> rte_driver->name field (because eth_dev used to keep only pci_dev),
> and it was required to save driver name in the device private struct.
> 
> After re-works on bus and vdev, it is possible for all bus types to
> access rte_driver.
> 
> It is able to remove the driver name from ethdev device private data and
> use eth_dev->device->driver->name.
> 
> Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
> ---
> Cc: Gaetan Rivet <gaetan.rivet@6wind.com>
> Cc: Jan Blunck <jblunck@infradead.org>
> 

I'm not sure I am the one who should give his opinion on this, I only
took the work from Jan and ported it for integration.

However, as far as I am concerned, I agree with this change.

> v2:
> * rebase on latest next-net
> ---
>  drivers/net/bnxt/bnxt_ethdev.c         | 2 +-
>  drivers/net/bonding/rte_eth_bond_api.c | 4 ++--
>  drivers/net/cxgbe/sge.c                | 6 +++---
>  drivers/net/dpaa2/dpaa2_ethdev.c       | 1 -
>  drivers/net/i40e/i40e_ethdev.c         | 3 +--
>  drivers/net/i40e/i40e_fdir.c           | 2 +-
>  drivers/net/ixgbe/ixgbe_ethdev.c       | 2 +-
>  drivers/net/ring/rte_eth_ring.c        | 1 -
>  drivers/net/tap/rte_eth_tap.c          | 1 -
>  drivers/net/vmxnet3/vmxnet3_ethdev.c   | 2 +-
>  drivers/net/xenvirt/rte_eth_xenvirt.c  | 1 -
>  lib/librte_ether/rte_ethdev.c          | 8 ++++----
>  lib/librte_ether/rte_ethdev.h          | 1 -
>  lib/librte_ether/rte_ethdev_pci.h      | 1 -
>  lib/librte_ether/rte_ethdev_vdev.h     | 1 -
>  15 files changed, 14 insertions(+), 22 deletions(-)
> 
> diff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c
> index f9bedf7..15195c3 100644
> --- a/drivers/net/bnxt/bnxt_ethdev.c
> +++ b/drivers/net/bnxt/bnxt_ethdev.c
> @@ -1940,7 +1940,7 @@ static struct rte_pci_driver bnxt_rte_pmd = {
>  static bool
>  is_device_supported(struct rte_eth_dev *dev, struct rte_pci_driver *drv)
>  {
> -	if (strcmp(dev->data->drv_name, drv->driver.name))
> +	if (strcmp(dev->device->driver->name, drv->driver.name))
>  		return false;
>  
>  	return true;
> diff --git a/drivers/net/bonding/rte_eth_bond_api.c b/drivers/net/bonding/rte_eth_bond_api.c
> index 36ec65d..164eb59 100644
> --- a/drivers/net/bonding/rte_eth_bond_api.c
> +++ b/drivers/net/bonding/rte_eth_bond_api.c
> @@ -48,11 +48,11 @@ int
>  check_for_bonded_ethdev(const struct rte_eth_dev *eth_dev)
>  {
>  	/* Check valid pointer */
> -	if (eth_dev->data->drv_name == NULL)
> +	if (eth_dev->device->driver->name == NULL)
>  		return -1;
>  
>  	/* return 0 if driver name matches */
> -	return eth_dev->data->drv_name != pmd_bond_drv.driver.name;
> +	return eth_dev->device->driver->name != pmd_bond_drv.driver.name;
>  }
>  
>  int
> diff --git a/drivers/net/cxgbe/sge.c b/drivers/net/cxgbe/sge.c
> index 9cbd4ec..d088065 100644
> --- a/drivers/net/cxgbe/sge.c
> +++ b/drivers/net/cxgbe/sge.c
> @@ -1691,7 +1691,7 @@ int t4_sge_alloc_rxq(struct adapter *adap, struct sge_rspq *iq, bool fwevtq,
>  	iq->size = cxgbe_roundup(iq->size, 16);
>  
>  	snprintf(z_name, sizeof(z_name), "%s_%s_%d_%d",
> -		 eth_dev->data->drv_name,
> +		 eth_dev->device->driver->name,
>  		 fwevtq ? "fwq_ring" : "rx_ring",
>  		 eth_dev->data->port_id, queue_id);
>  	snprintf(z_name_sw, sizeof(z_name_sw), "%s_sw_ring", z_name);
> @@ -1745,7 +1745,7 @@ int t4_sge_alloc_rxq(struct adapter *adap, struct sge_rspq *iq, bool fwevtq,
>  		fl->size = cxgbe_roundup(fl->size, 8);
>  
>  		snprintf(z_name, sizeof(z_name), "%s_%s_%d_%d",
> -			 eth_dev->data->drv_name,
> +			 eth_dev->device->driver->name,
>  			 fwevtq ? "fwq_ring" : "fl_ring",
>  			 eth_dev->data->port_id, queue_id);
>  		snprintf(z_name_sw, sizeof(z_name_sw), "%s_sw_ring", z_name);
> @@ -1945,7 +1945,7 @@ int t4_sge_alloc_eth_txq(struct adapter *adap, struct sge_eth_txq *txq,
>  	nentries = txq->q.size + s->stat_len / sizeof(struct tx_desc);
>  
>  	snprintf(z_name, sizeof(z_name), "%s_%s_%d_%d",
> -		 eth_dev->data->drv_name, "tx_ring",
> +		 eth_dev->device->driver->name, "tx_ring",
>  		 eth_dev->data->port_id, queue_id);
>  	snprintf(z_name_sw, sizeof(z_name_sw), "%s_sw_ring", z_name);
>  
> diff --git a/drivers/net/dpaa2/dpaa2_ethdev.c b/drivers/net/dpaa2/dpaa2_ethdev.c
> index 4de1e0c..da309ac 100644
> --- a/drivers/net/dpaa2/dpaa2_ethdev.c
> +++ b/drivers/net/dpaa2/dpaa2_ethdev.c
> @@ -1464,7 +1464,6 @@ dpaa2_dev_init(struct rte_eth_dev *eth_dev)
>  	}
>  
>  	eth_dev->dev_ops = &dpaa2_ethdev_ops;
> -	eth_dev->data->drv_name = rte_dpaa2_pmd.driver.name;
>  
>  	eth_dev->rx_pkt_burst = dpaa2_dev_prefetch_rx;
>  	eth_dev->tx_pkt_burst = dpaa2_dev_tx;
> diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c
> index 2f1cd85..078a808 100644
> --- a/drivers/net/i40e/i40e_ethdev.c
> +++ b/drivers/net/i40e/i40e_ethdev.c
> @@ -10738,8 +10738,7 @@ i40e_filter_restore(struct i40e_pf *pf)
>  static bool
>  is_device_supported(struct rte_eth_dev *dev, struct rte_pci_driver *drv)
>  {
> -	if (strcmp(dev->data->drv_name,
> -		   drv->driver.name))
> +	if (strcmp(dev->device->driver->name, drv->driver.name))
>  		return false;
>  
>  	return true;
> diff --git a/drivers/net/i40e/i40e_fdir.c b/drivers/net/i40e/i40e_fdir.c
> index 9c1ab6e..77c23e0 100644
> --- a/drivers/net/i40e/i40e_fdir.c
> +++ b/drivers/net/i40e/i40e_fdir.c
> @@ -256,7 +256,7 @@ i40e_fdir_setup(struct i40e_pf *pf)
>  
>  	/* reserve memory for the fdir programming packet */
>  	snprintf(z_name, sizeof(z_name), "%s_%s_%d",
> -			eth_dev->data->drv_name,
> +			eth_dev->device->driver->name,
>  			I40E_FDIR_MZ_NAME,
>  			eth_dev->data->port_id);
>  	mz = i40e_memzone_reserve(z_name, I40E_FDIR_PKT_LEN, SOCKET_ID_ANY);
> diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c
> index 504e951..ebc5467 100644
> --- a/drivers/net/ixgbe/ixgbe_ethdev.c
> +++ b/drivers/net/ixgbe/ixgbe_ethdev.c
> @@ -4659,7 +4659,7 @@ ixgbe_set_default_mac_addr(struct rte_eth_dev *dev, struct ether_addr *addr)
>  static bool
>  is_device_supported(struct rte_eth_dev *dev, struct rte_pci_driver *drv)
>  {
> -	if (strcmp(dev->data->drv_name, drv->driver.name))
> +	if (strcmp(dev->device->driver->name, drv->driver.name))
>  		return false;
>  
>  	return true;
> diff --git a/drivers/net/ring/rte_eth_ring.c b/drivers/net/ring/rte_eth_ring.c
> index d4dce95..bb5e322 100644
> --- a/drivers/net/ring/rte_eth_ring.c
> +++ b/drivers/net/ring/rte_eth_ring.c
> @@ -342,7 +342,6 @@ do_eth_dev_ring_create(const char *name,
>  	eth_dev->dev_ops = &ops;
>  	data->dev_flags = RTE_ETH_DEV_DETACHABLE;
>  	data->kdrv = RTE_KDRV_NONE;
> -	data->drv_name = pmd_ring_drv.driver.name;
>  	data->numa_node = numa_node;
>  
>  	/* finally assign rx and tx ops */
> diff --git a/drivers/net/tap/rte_eth_tap.c b/drivers/net/tap/rte_eth_tap.c
> index 1bb660e..305f018 100644
> --- a/drivers/net/tap/rte_eth_tap.c
> +++ b/drivers/net/tap/rte_eth_tap.c
> @@ -1220,7 +1220,6 @@ eth_dev_tap_create(struct rte_vdev_device *vdev, char *tap_name,
>  	data->dev_private = pmd;
>  	data->dev_flags = RTE_ETH_DEV_DETACHABLE | RTE_ETH_DEV_INTR_LSC;
>  	data->numa_node = numa_node;
> -	data->drv_name = pmd_tap_drv.driver.name;
>  
>  	data->dev_link = pmd_link;
>  	data->mac_addrs = &pmd->eth_addr;
> diff --git a/drivers/net/vmxnet3/vmxnet3_ethdev.c b/drivers/net/vmxnet3/vmxnet3_ethdev.c
> index ee48a9e..292a671 100644
> --- a/drivers/net/vmxnet3/vmxnet3_ethdev.c
> +++ b/drivers/net/vmxnet3/vmxnet3_ethdev.c
> @@ -141,7 +141,7 @@ gpa_zone_reserve(struct rte_eth_dev *dev, uint32_t size,
>  	const struct rte_memzone *mz;
>  
>  	snprintf(z_name, sizeof(z_name), "%s_%d_%s",
> -		 dev->data->drv_name, dev->data->port_id, post_string);
> +		 dev->device->driver->name, dev->data->port_id, post_string);
>  
>  	mz = rte_memzone_lookup(z_name);
>  	if (!reuse) {
> diff --git a/drivers/net/xenvirt/rte_eth_xenvirt.c b/drivers/net/xenvirt/rte_eth_xenvirt.c
> index 7bd29fa..e404b77 100644
> --- a/drivers/net/xenvirt/rte_eth_xenvirt.c
> +++ b/drivers/net/xenvirt/rte_eth_xenvirt.c
> @@ -672,7 +672,6 @@ eth_dev_xenvirt_create(const char *name, const char *params,
>  
>  	eth_dev->data->dev_flags = RTE_ETH_DEV_DETACHABLE;
>  	eth_dev->data->kdrv = RTE_KDRV_NONE;
> -	eth_dev->data->drv_name = pmd_xenvirt_drv.driver.name;
>  	eth_dev->data->numa_node = numa_node;
>  
>  	eth_dev->rx_pkt_burst = eth_xenvirt_rx;
> diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c
> index d257406..f5378a4 100644
> --- a/lib/librte_ether/rte_ethdev.c
> +++ b/lib/librte_ether/rte_ethdev.c
> @@ -753,13 +753,13 @@ rte_eth_dev_configure(uint8_t port_id, uint16_t nb_rx_q, uint16_t nb_tx_q,
>  	if ((dev_conf->intr_conf.lsc == 1) &&
>  		(!(dev->data->dev_flags & RTE_ETH_DEV_INTR_LSC))) {
>  			RTE_PMD_DEBUG_TRACE("driver %s does not support lsc\n",
> -					dev->data->drv_name);
> +					dev->device->driver->name);
>  			return -EINVAL;
>  	}
>  	if ((dev_conf->intr_conf.rmv == 1) &&
>  	    (!(dev->data->dev_flags & RTE_ETH_DEV_INTR_RMV))) {
>  		RTE_PMD_DEBUG_TRACE("driver %s does not support rmv\n",
> -				    dev->data->drv_name);
> +				    dev->device->driver->name);
>  		return -EINVAL;
>  	}
>  
> @@ -1900,7 +1900,7 @@ rte_eth_dev_info_get(uint8_t port_id, struct rte_eth_dev_info *dev_info)
>  
>  	RTE_FUNC_PTR_OR_RET(*dev->dev_ops->dev_infos_get);
>  	(*dev->dev_ops->dev_infos_get)(dev, dev_info);
> -	dev_info->driver_name = dev->data->drv_name;
> +	dev_info->driver_name = dev->device->driver->name;
>  	dev_info->nb_rx_queues = dev->data->nb_rx_queues;
>  	dev_info->nb_tx_queues = dev->data->nb_tx_queues;
>  }
> @@ -2789,7 +2789,7 @@ rte_eth_dma_zone_reserve(const struct rte_eth_dev *dev, const char *ring_name,
>  	const struct rte_memzone *mz;
>  
>  	snprintf(z_name, sizeof(z_name), "%s_%s_%d_%d",
> -		 dev->data->drv_name, ring_name,
> +		 dev->device->driver->name, ring_name,
>  		 dev->data->port_id, queue_id);
>  
>  	mz = rte_memzone_lookup(z_name);
> diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h
> index b9fd8d3..05ae574 100644
> --- a/lib/librte_ether/rte_ethdev.h
> +++ b/lib/librte_ether/rte_ethdev.h
> @@ -1674,7 +1674,6 @@ struct rte_eth_dev_data {
>  	uint32_t dev_flags; /**< Capabilities */
>  	enum rte_kernel_driver kdrv;    /**< Kernel driver passthrough */
>  	int numa_node;  /**< NUMA node connection */
> -	const char *drv_name;   /**< Driver name */
>  };
>  
>  /** Device supports hotplug detach */
> diff --git a/lib/librte_ether/rte_ethdev_pci.h b/lib/librte_ether/rte_ethdev_pci.h
> index d3bc03c..69aab03 100644
> --- a/lib/librte_ether/rte_ethdev_pci.h
> +++ b/lib/librte_ether/rte_ethdev_pci.h
> @@ -69,7 +69,6 @@ rte_eth_copy_pci_info(struct rte_eth_dev *eth_dev,
>  
>  	eth_dev->data->kdrv = pci_dev->kdrv;
>  	eth_dev->data->numa_node = pci_dev->device.numa_node;
> -	eth_dev->data->drv_name = pci_dev->driver->driver.name;
>  }
>  
>  /**
> diff --git a/lib/librte_ether/rte_ethdev_vdev.h b/lib/librte_ether/rte_ethdev_vdev.h
> index fa2cb61..4d2c3e2 100644
> --- a/lib/librte_ether/rte_ethdev_vdev.h
> +++ b/lib/librte_ether/rte_ethdev_vdev.h
> @@ -77,7 +77,6 @@ rte_eth_vdev_allocate(struct rte_vdev_device *dev, size_t private_data_size)
>  
>  	eth_dev->data->kdrv = RTE_KDRV_NONE;
>  	eth_dev->data->numa_node = dev->device.numa_node;
> -	eth_dev->data->drv_name = dev->device.driver->name;
>  	return eth_dev;
>  }
>  
> -- 
> 2.9.3
>
  
Shreyansh Jain June 7, 2017, 4:52 a.m. UTC | #2
On Tuesday 06 June 2017 08:40 PM, Ferruh Yigit wrote:
> rte_driver->name has the driver name and all physical and virtual
> devices has access to it.
> 
> Previously it was not possible for virtual ethernet devices to access
> rte_driver->name field (because eth_dev used to keep only pci_dev),
> and it was required to save driver name in the device private struct.
> 
> After re-works on bus and vdev, it is possible for all bus types to
> access rte_driver.
> 
> It is able to remove the driver name from ethdev device private data and
> use eth_dev->device->driver->name.
> 
> Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
> ---
> Cc: Gaetan Rivet <gaetan.rivet@6wind.com>
> Cc: Jan Blunck <jblunck@infradead.org>
> 
> v2:
> * rebase on latest next-net
> ---
>   drivers/net/bnxt/bnxt_ethdev.c         | 2 +-
>   drivers/net/bonding/rte_eth_bond_api.c | 4 ++--
>   drivers/net/cxgbe/sge.c                | 6 +++---
>   drivers/net/dpaa2/dpaa2_ethdev.c       | 1 -
>   drivers/net/i40e/i40e_ethdev.c         | 3 +--
>   drivers/net/i40e/i40e_fdir.c           | 2 +-
>   drivers/net/ixgbe/ixgbe_ethdev.c       | 2 +-
>   drivers/net/ring/rte_eth_ring.c        | 1 -
>   drivers/net/tap/rte_eth_tap.c          | 1 -
>   drivers/net/vmxnet3/vmxnet3_ethdev.c   | 2 +-
>   drivers/net/xenvirt/rte_eth_xenvirt.c  | 1 -
>   lib/librte_ether/rte_ethdev.c          | 8 ++++----
>   lib/librte_ether/rte_ethdev.h          | 1 -
>   lib/librte_ether/rte_ethdev_pci.h      | 1 -
>   lib/librte_ether/rte_ethdev_vdev.h     | 1 -
>   15 files changed, 14 insertions(+), 22 deletions(-)
> 

Apologies for delay in responding. I am OK with respect to the dpaa2 
change. Otherwise as well:

Acked-by: Shreyansh Jain <shreyansh.jain@nxp.com>
  
Jan Blunck June 7, 2017, 4:11 p.m. UTC | #3
On Tue, Jun 6, 2017 at 5:10 PM, Ferruh Yigit <ferruh.yigit@intel.com> wrote:
> rte_driver->name has the driver name and all physical and virtual
> devices has access to it.
>
> Previously it was not possible for virtual ethernet devices to access
> rte_driver->name field (because eth_dev used to keep only pci_dev),
> and it was required to save driver name in the device private struct.
>
> After re-works on bus and vdev, it is possible for all bus types to
> access rte_driver.
>
> It is able to remove the driver name from ethdev device private data and
> use eth_dev->device->driver->name.
>
> Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
> ---
> Cc: Gaetan Rivet <gaetan.rivet@6wind.com>
> Cc: Jan Blunck <jblunck@infradead.org>
>
> v2:
> * rebase on latest next-net

Acked-by: Jan Blunck <jblunck@infradead.org>
  
Thomas Monjalon June 8, 2017, 8:58 p.m. UTC | #4
06/06/2017 17:10, Ferruh Yigit:
> rte_driver->name has the driver name and all physical and virtual
> devices has access to it.
> 
> Previously it was not possible for virtual ethernet devices to access
> rte_driver->name field (because eth_dev used to keep only pci_dev),
> and it was required to save driver name in the device private struct.
> 
> After re-works on bus and vdev, it is possible for all bus types to
> access rte_driver.
> 
> It is able to remove the driver name from ethdev device private data and
> use eth_dev->device->driver->name.
> 
> Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
> ---
> Cc: Gaetan Rivet <gaetan.rivet@6wind.com>
> Cc: Jan Blunck <jblunck@infradead.org>
> 
> v2:
> * rebase on latest next-net

This patch must be applied after merging next-net.
Do you plan a pull request soon?
  
Ferruh Yigit June 9, 2017, 10:51 a.m. UTC | #5
On 6/8/2017 9:58 PM, Thomas Monjalon wrote:
> 06/06/2017 17:10, Ferruh Yigit:
>> rte_driver->name has the driver name and all physical and virtual
>> devices has access to it.
>>
>> Previously it was not possible for virtual ethernet devices to access
>> rte_driver->name field (because eth_dev used to keep only pci_dev),
>> and it was required to save driver name in the device private struct.
>>
>> After re-works on bus and vdev, it is possible for all bus types to
>> access rte_driver.
>>
>> It is able to remove the driver name from ethdev device private data and
>> use eth_dev->device->driver->name.
>>
>> Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
>> ---
>> Cc: Gaetan Rivet <gaetan.rivet@6wind.com>
>> Cc: Jan Blunck <jblunck@infradead.org>
>>
>> v2:
>> * rebase on latest next-net
> 
> This patch must be applied after merging next-net.
> Do you plan a pull request soon?

Agreed to sync drivers to main tree before upcoming eal changes.

I will send an early pull request on Monday. Including this patch in it.

There will be another pull request before integration (rc1) as usual.

Thanks,
ferruh
  
Ferruh Yigit June 9, 2017, 2:22 p.m. UTC | #6
On 6/7/2017 5:11 PM, Jan Blunck wrote:
> On Tue, Jun 6, 2017 at 5:10 PM, Ferruh Yigit <ferruh.yigit@intel.com> wrote:
>> rte_driver->name has the driver name and all physical and virtual
>> devices has access to it.
>>
>> Previously it was not possible for virtual ethernet devices to access
>> rte_driver->name field (because eth_dev used to keep only pci_dev),
>> and it was required to save driver name in the device private struct.
>>
>> After re-works on bus and vdev, it is possible for all bus types to
>> access rte_driver.
>>
>> It is able to remove the driver name from ethdev device private data and
>> use eth_dev->device->driver->name.
>>
>> Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
>> ---
>> Cc: Gaetan Rivet <gaetan.rivet@6wind.com>
>> Cc: Jan Blunck <jblunck@infradead.org>
>>
>> v2:
>> * rebase on latest next-net
> 
> Acked-by: Jan Blunck <jblunck@infradead.org>

Applied to dpdk-next-net/master, thanks.
  
Ferruh Yigit June 9, 2017, 3:49 p.m. UTC | #7
On 6/9/2017 3:22 PM, Ferruh Yigit wrote:
> On 6/7/2017 5:11 PM, Jan Blunck wrote:
>> On Tue, Jun 6, 2017 at 5:10 PM, Ferruh Yigit <ferruh.yigit@intel.com> wrote:
>>> rte_driver->name has the driver name and all physical and virtual
>>> devices has access to it.
>>>
>>> Previously it was not possible for virtual ethernet devices to access
>>> rte_driver->name field (because eth_dev used to keep only pci_dev),
>>> and it was required to save driver name in the device private struct.
>>>
>>> After re-works on bus and vdev, it is possible for all bus types to
>>> access rte_driver.
>>>
>>> It is able to remove the driver name from ethdev device private data and
>>> use eth_dev->device->driver->name.
>>>
>>> Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
>>> ---
>>> Cc: Gaetan Rivet <gaetan.rivet@6wind.com>
>>> Cc: Jan Blunck <jblunck@infradead.org>
>>>
>>> v2:
>>> * rebase on latest next-net
>>
>> Acked-by: Jan Blunck <jblunck@infradead.org>
> 
> Applied to dpdk-next-net/master, thanks.

Nope. This breaks ring PMD, because it doesn't set eth_dev->device properly.

And the API it provides to create ring PMD makes things more
complicated, because that API doesn't create vdev at all, so when ring
PMD created via API instead of generic way, it doesn't have rte_device
at all ...

I am dropping patch from the next-net, and will send a new version of it.

Thanks,
ferruh
  

Patch

diff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c
index f9bedf7..15195c3 100644
--- a/drivers/net/bnxt/bnxt_ethdev.c
+++ b/drivers/net/bnxt/bnxt_ethdev.c
@@ -1940,7 +1940,7 @@  static struct rte_pci_driver bnxt_rte_pmd = {
 static bool
 is_device_supported(struct rte_eth_dev *dev, struct rte_pci_driver *drv)
 {
-	if (strcmp(dev->data->drv_name, drv->driver.name))
+	if (strcmp(dev->device->driver->name, drv->driver.name))
 		return false;
 
 	return true;
diff --git a/drivers/net/bonding/rte_eth_bond_api.c b/drivers/net/bonding/rte_eth_bond_api.c
index 36ec65d..164eb59 100644
--- a/drivers/net/bonding/rte_eth_bond_api.c
+++ b/drivers/net/bonding/rte_eth_bond_api.c
@@ -48,11 +48,11 @@  int
 check_for_bonded_ethdev(const struct rte_eth_dev *eth_dev)
 {
 	/* Check valid pointer */
-	if (eth_dev->data->drv_name == NULL)
+	if (eth_dev->device->driver->name == NULL)
 		return -1;
 
 	/* return 0 if driver name matches */
-	return eth_dev->data->drv_name != pmd_bond_drv.driver.name;
+	return eth_dev->device->driver->name != pmd_bond_drv.driver.name;
 }
 
 int
diff --git a/drivers/net/cxgbe/sge.c b/drivers/net/cxgbe/sge.c
index 9cbd4ec..d088065 100644
--- a/drivers/net/cxgbe/sge.c
+++ b/drivers/net/cxgbe/sge.c
@@ -1691,7 +1691,7 @@  int t4_sge_alloc_rxq(struct adapter *adap, struct sge_rspq *iq, bool fwevtq,
 	iq->size = cxgbe_roundup(iq->size, 16);
 
 	snprintf(z_name, sizeof(z_name), "%s_%s_%d_%d",
-		 eth_dev->data->drv_name,
+		 eth_dev->device->driver->name,
 		 fwevtq ? "fwq_ring" : "rx_ring",
 		 eth_dev->data->port_id, queue_id);
 	snprintf(z_name_sw, sizeof(z_name_sw), "%s_sw_ring", z_name);
@@ -1745,7 +1745,7 @@  int t4_sge_alloc_rxq(struct adapter *adap, struct sge_rspq *iq, bool fwevtq,
 		fl->size = cxgbe_roundup(fl->size, 8);
 
 		snprintf(z_name, sizeof(z_name), "%s_%s_%d_%d",
-			 eth_dev->data->drv_name,
+			 eth_dev->device->driver->name,
 			 fwevtq ? "fwq_ring" : "fl_ring",
 			 eth_dev->data->port_id, queue_id);
 		snprintf(z_name_sw, sizeof(z_name_sw), "%s_sw_ring", z_name);
@@ -1945,7 +1945,7 @@  int t4_sge_alloc_eth_txq(struct adapter *adap, struct sge_eth_txq *txq,
 	nentries = txq->q.size + s->stat_len / sizeof(struct tx_desc);
 
 	snprintf(z_name, sizeof(z_name), "%s_%s_%d_%d",
-		 eth_dev->data->drv_name, "tx_ring",
+		 eth_dev->device->driver->name, "tx_ring",
 		 eth_dev->data->port_id, queue_id);
 	snprintf(z_name_sw, sizeof(z_name_sw), "%s_sw_ring", z_name);
 
diff --git a/drivers/net/dpaa2/dpaa2_ethdev.c b/drivers/net/dpaa2/dpaa2_ethdev.c
index 4de1e0c..da309ac 100644
--- a/drivers/net/dpaa2/dpaa2_ethdev.c
+++ b/drivers/net/dpaa2/dpaa2_ethdev.c
@@ -1464,7 +1464,6 @@  dpaa2_dev_init(struct rte_eth_dev *eth_dev)
 	}
 
 	eth_dev->dev_ops = &dpaa2_ethdev_ops;
-	eth_dev->data->drv_name = rte_dpaa2_pmd.driver.name;
 
 	eth_dev->rx_pkt_burst = dpaa2_dev_prefetch_rx;
 	eth_dev->tx_pkt_burst = dpaa2_dev_tx;
diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c
index 2f1cd85..078a808 100644
--- a/drivers/net/i40e/i40e_ethdev.c
+++ b/drivers/net/i40e/i40e_ethdev.c
@@ -10738,8 +10738,7 @@  i40e_filter_restore(struct i40e_pf *pf)
 static bool
 is_device_supported(struct rte_eth_dev *dev, struct rte_pci_driver *drv)
 {
-	if (strcmp(dev->data->drv_name,
-		   drv->driver.name))
+	if (strcmp(dev->device->driver->name, drv->driver.name))
 		return false;
 
 	return true;
diff --git a/drivers/net/i40e/i40e_fdir.c b/drivers/net/i40e/i40e_fdir.c
index 9c1ab6e..77c23e0 100644
--- a/drivers/net/i40e/i40e_fdir.c
+++ b/drivers/net/i40e/i40e_fdir.c
@@ -256,7 +256,7 @@  i40e_fdir_setup(struct i40e_pf *pf)
 
 	/* reserve memory for the fdir programming packet */
 	snprintf(z_name, sizeof(z_name), "%s_%s_%d",
-			eth_dev->data->drv_name,
+			eth_dev->device->driver->name,
 			I40E_FDIR_MZ_NAME,
 			eth_dev->data->port_id);
 	mz = i40e_memzone_reserve(z_name, I40E_FDIR_PKT_LEN, SOCKET_ID_ANY);
diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c
index 504e951..ebc5467 100644
--- a/drivers/net/ixgbe/ixgbe_ethdev.c
+++ b/drivers/net/ixgbe/ixgbe_ethdev.c
@@ -4659,7 +4659,7 @@  ixgbe_set_default_mac_addr(struct rte_eth_dev *dev, struct ether_addr *addr)
 static bool
 is_device_supported(struct rte_eth_dev *dev, struct rte_pci_driver *drv)
 {
-	if (strcmp(dev->data->drv_name, drv->driver.name))
+	if (strcmp(dev->device->driver->name, drv->driver.name))
 		return false;
 
 	return true;
diff --git a/drivers/net/ring/rte_eth_ring.c b/drivers/net/ring/rte_eth_ring.c
index d4dce95..bb5e322 100644
--- a/drivers/net/ring/rte_eth_ring.c
+++ b/drivers/net/ring/rte_eth_ring.c
@@ -342,7 +342,6 @@  do_eth_dev_ring_create(const char *name,
 	eth_dev->dev_ops = &ops;
 	data->dev_flags = RTE_ETH_DEV_DETACHABLE;
 	data->kdrv = RTE_KDRV_NONE;
-	data->drv_name = pmd_ring_drv.driver.name;
 	data->numa_node = numa_node;
 
 	/* finally assign rx and tx ops */
diff --git a/drivers/net/tap/rte_eth_tap.c b/drivers/net/tap/rte_eth_tap.c
index 1bb660e..305f018 100644
--- a/drivers/net/tap/rte_eth_tap.c
+++ b/drivers/net/tap/rte_eth_tap.c
@@ -1220,7 +1220,6 @@  eth_dev_tap_create(struct rte_vdev_device *vdev, char *tap_name,
 	data->dev_private = pmd;
 	data->dev_flags = RTE_ETH_DEV_DETACHABLE | RTE_ETH_DEV_INTR_LSC;
 	data->numa_node = numa_node;
-	data->drv_name = pmd_tap_drv.driver.name;
 
 	data->dev_link = pmd_link;
 	data->mac_addrs = &pmd->eth_addr;
diff --git a/drivers/net/vmxnet3/vmxnet3_ethdev.c b/drivers/net/vmxnet3/vmxnet3_ethdev.c
index ee48a9e..292a671 100644
--- a/drivers/net/vmxnet3/vmxnet3_ethdev.c
+++ b/drivers/net/vmxnet3/vmxnet3_ethdev.c
@@ -141,7 +141,7 @@  gpa_zone_reserve(struct rte_eth_dev *dev, uint32_t size,
 	const struct rte_memzone *mz;
 
 	snprintf(z_name, sizeof(z_name), "%s_%d_%s",
-		 dev->data->drv_name, dev->data->port_id, post_string);
+		 dev->device->driver->name, dev->data->port_id, post_string);
 
 	mz = rte_memzone_lookup(z_name);
 	if (!reuse) {
diff --git a/drivers/net/xenvirt/rte_eth_xenvirt.c b/drivers/net/xenvirt/rte_eth_xenvirt.c
index 7bd29fa..e404b77 100644
--- a/drivers/net/xenvirt/rte_eth_xenvirt.c
+++ b/drivers/net/xenvirt/rte_eth_xenvirt.c
@@ -672,7 +672,6 @@  eth_dev_xenvirt_create(const char *name, const char *params,
 
 	eth_dev->data->dev_flags = RTE_ETH_DEV_DETACHABLE;
 	eth_dev->data->kdrv = RTE_KDRV_NONE;
-	eth_dev->data->drv_name = pmd_xenvirt_drv.driver.name;
 	eth_dev->data->numa_node = numa_node;
 
 	eth_dev->rx_pkt_burst = eth_xenvirt_rx;
diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c
index d257406..f5378a4 100644
--- a/lib/librte_ether/rte_ethdev.c
+++ b/lib/librte_ether/rte_ethdev.c
@@ -753,13 +753,13 @@  rte_eth_dev_configure(uint8_t port_id, uint16_t nb_rx_q, uint16_t nb_tx_q,
 	if ((dev_conf->intr_conf.lsc == 1) &&
 		(!(dev->data->dev_flags & RTE_ETH_DEV_INTR_LSC))) {
 			RTE_PMD_DEBUG_TRACE("driver %s does not support lsc\n",
-					dev->data->drv_name);
+					dev->device->driver->name);
 			return -EINVAL;
 	}
 	if ((dev_conf->intr_conf.rmv == 1) &&
 	    (!(dev->data->dev_flags & RTE_ETH_DEV_INTR_RMV))) {
 		RTE_PMD_DEBUG_TRACE("driver %s does not support rmv\n",
-				    dev->data->drv_name);
+				    dev->device->driver->name);
 		return -EINVAL;
 	}
 
@@ -1900,7 +1900,7 @@  rte_eth_dev_info_get(uint8_t port_id, struct rte_eth_dev_info *dev_info)
 
 	RTE_FUNC_PTR_OR_RET(*dev->dev_ops->dev_infos_get);
 	(*dev->dev_ops->dev_infos_get)(dev, dev_info);
-	dev_info->driver_name = dev->data->drv_name;
+	dev_info->driver_name = dev->device->driver->name;
 	dev_info->nb_rx_queues = dev->data->nb_rx_queues;
 	dev_info->nb_tx_queues = dev->data->nb_tx_queues;
 }
@@ -2789,7 +2789,7 @@  rte_eth_dma_zone_reserve(const struct rte_eth_dev *dev, const char *ring_name,
 	const struct rte_memzone *mz;
 
 	snprintf(z_name, sizeof(z_name), "%s_%s_%d_%d",
-		 dev->data->drv_name, ring_name,
+		 dev->device->driver->name, ring_name,
 		 dev->data->port_id, queue_id);
 
 	mz = rte_memzone_lookup(z_name);
diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h
index b9fd8d3..05ae574 100644
--- a/lib/librte_ether/rte_ethdev.h
+++ b/lib/librte_ether/rte_ethdev.h
@@ -1674,7 +1674,6 @@  struct rte_eth_dev_data {
 	uint32_t dev_flags; /**< Capabilities */
 	enum rte_kernel_driver kdrv;    /**< Kernel driver passthrough */
 	int numa_node;  /**< NUMA node connection */
-	const char *drv_name;   /**< Driver name */
 };
 
 /** Device supports hotplug detach */
diff --git a/lib/librte_ether/rte_ethdev_pci.h b/lib/librte_ether/rte_ethdev_pci.h
index d3bc03c..69aab03 100644
--- a/lib/librte_ether/rte_ethdev_pci.h
+++ b/lib/librte_ether/rte_ethdev_pci.h
@@ -69,7 +69,6 @@  rte_eth_copy_pci_info(struct rte_eth_dev *eth_dev,
 
 	eth_dev->data->kdrv = pci_dev->kdrv;
 	eth_dev->data->numa_node = pci_dev->device.numa_node;
-	eth_dev->data->drv_name = pci_dev->driver->driver.name;
 }
 
 /**
diff --git a/lib/librte_ether/rte_ethdev_vdev.h b/lib/librte_ether/rte_ethdev_vdev.h
index fa2cb61..4d2c3e2 100644
--- a/lib/librte_ether/rte_ethdev_vdev.h
+++ b/lib/librte_ether/rte_ethdev_vdev.h
@@ -77,7 +77,6 @@  rte_eth_vdev_allocate(struct rte_vdev_device *dev, size_t private_data_size)
 
 	eth_dev->data->kdrv = RTE_KDRV_NONE;
 	eth_dev->data->numa_node = dev->device.numa_node;
-	eth_dev->data->drv_name = dev->device.driver->name;
 	return eth_dev;
 }