[dpdk-dev,v7,02/28] librte_ether: add fields from rte_pci_driver to rte_eth_dev_data

Message ID 1446217733-9887-3-git-send-email-bernard.iremonger@intel.com (mailing list archive)
State Superseded, archived
Headers

Commit Message

Iremonger, Bernard Oct. 30, 2015, 3:08 p.m. UTC
  add dev_flags to rte_eth_dev_data, add macros for dev_flags.
add kdrv to rte_eth_dev_data.
add numa_node to rte_eth_dev_data.
add drv_name to rte_eth_dev_data.

Signed-off-by: Bernard Iremonger <bernard.iremonger@intel.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
---
 lib/librte_ether/rte_ethdev.h | 15 +++++++++++++++
 1 file changed, 15 insertions(+)
  

Comments

Thomas Monjalon Nov. 1, 2015, 9:12 p.m. UTC | #1
2015-10-30 15:08, Bernard Iremonger:
> add dev_flags to rte_eth_dev_data, add macros for dev_flags.
> add kdrv to rte_eth_dev_data.
> add numa_node to rte_eth_dev_data.
> add drv_name to rte_eth_dev_data.

A commit message should explain why things are done.

> +	uint32_t dev_flags; /**< Flags controlling handling of device. */

Where are defined this flags? What is the scope?
  
Thomas Monjalon Nov. 1, 2015, 9:41 p.m. UTC | #2
2015-10-30 15:08, Bernard Iremonger:
> +/** Device needs PCI BAR mapping (done with either IGB_UIO or VFIO) */
> +#define RTE_ETH_DEV_DRV_NEED_MAPPING   RTE_PCI_DRV_NEED_MAPPING
> +/** Device needs to be unbound even if no module is provided */
> +#define RTE_ETH_DEV_DRV_FORCE_UNBIND   RTE_PCI_DRV_FORCE_UNBIND
> +/** Device supports link state interrupt */
> +#define RTE_ETH_DEV_INTR_LSC   RTE_PCI_DRV_INTR_LSC
> +/** Device  supports detaching capability */
> +#define RTE_ETH_DEV_DETACHABLE RTE_PCI_DRV_DETACHABLE

Please, use an enum which has a name and can be referenced in the API,
e.g. the variable X contains some X_flags.
You should not try to re-use the same values as the PCI layer since it
will not be possible to map it forever when new buses will enter in the game.

> +/** Device  is a bonded device */
> +#define RTE_ETH_DEV_BONDED 0x0020

Why not having RTE_ETH_DEV_PCAPED? ;)
Please try to remove this flag.
  
Iremonger, Bernard Nov. 2, 2015, 10:33 a.m. UTC | #3
Hi Thomas,

<snip>

> Subject: Re: [dpdk-dev] [PATCH v7 02/28] librte_ether: add fields from
> rte_pci_driver to rte_eth_dev_data
> 
> 2015-10-30 15:08, Bernard Iremonger:
> > +/** Device needs PCI BAR mapping (done with either IGB_UIO or VFIO)
> */
> > +#define RTE_ETH_DEV_DRV_NEED_MAPPING
> RTE_PCI_DRV_NEED_MAPPING
> > +/** Device needs to be unbound even if no module is provided */
> > +#define RTE_ETH_DEV_DRV_FORCE_UNBIND
> RTE_PCI_DRV_FORCE_UNBIND
> > +/** Device supports link state interrupt */
> > +#define RTE_ETH_DEV_INTR_LSC   RTE_PCI_DRV_INTR_LSC
> > +/** Device  supports detaching capability */ #define
> > +RTE_ETH_DEV_DETACHABLE RTE_PCI_DRV_DETACHABLE
> 
> Please, use an enum which has a name and can be referenced in the API, e.g.
> the variable X contains some X_flags.
> You should not try to re-use the same values as the PCI layer since it will not
> be possible to map it forever when new buses will enter in the game.

I will use an enum  instead.

 
> > +/** Device  is a bonded device */
> > +#define RTE_ETH_DEV_BONDED 0x0020
> 
> Why not having RTE_ETH_DEV_PCAPED? ;)
> Please try to remove this flag.

I will remove this flag.

Regards,

Bernard.
  
Iremonger, Bernard Nov. 2, 2015, 10:36 a.m. UTC | #4
Hi Thomas,

> -----Original Message-----
> From: Thomas Monjalon [mailto:thomas.monjalon@6wind.com]
> Sent: Sunday, November 1, 2015 9:12 PM
> To: Iremonger, Bernard <bernard.iremonger@intel.com>
> Cc: dev@dpdk.org
> Subject: Re: [dpdk-dev] [PATCH v7 02/28] librte_ether: add fields from
> rte_pci_driver to rte_eth_dev_data
> 
> 2015-10-30 15:08, Bernard Iremonger:
> > add dev_flags to rte_eth_dev_data, add macros for dev_flags.
> > add kdrv to rte_eth_dev_data.
> > add numa_node to rte_eth_dev_data.
> > add drv_name to rte_eth_dev_data.
> 
> A commit message should explain why things are done.
> 
> > +	uint32_t dev_flags; /**< Flags controlling handling of device. */
> 
> Where are defined this flags? What is the scope?

These flags are defined in the following file:

lib/librte_ether/rte_ethdev.h

These flags are visible to all the vdevs and pdevs.

Regards,

Bernard.
  
Thomas Monjalon Nov. 2, 2015, 4:32 p.m. UTC | #5
2015-11-02 10:36, Iremonger, Bernard:
> From: Thomas Monjalon [mailto:thomas.monjalon@6wind.com]
> > 2015-10-30 15:08, Bernard Iremonger:
> > > add dev_flags to rte_eth_dev_data, add macros for dev_flags.
> > > add kdrv to rte_eth_dev_data.
> > > add numa_node to rte_eth_dev_data.
> > > add drv_name to rte_eth_dev_data.
> > 
> > A commit message should explain why things are done.
> > 
> > > +	uint32_t dev_flags; /**< Flags controlling handling of device. */
> > 
> > Where are defined this flags? What is the scope?
> 
> These flags are defined in the following file:
> 
> lib/librte_ether/rte_ethdev.h
> 
> These flags are visible to all the vdevs and pdevs.

I mean it should be more explicit. Having an enum name will help.
Note: I understand your patch. I'm just asking the questions an user
will ask when trying to use your new API.
Thanks
  
Iremonger, Bernard Nov. 2, 2015, 4:44 p.m. UTC | #6
Hi Thomas,

<snip>

> Subject: Re: [dpdk-dev] [PATCH v7 02/28] librte_ether: add fields from
> rte_pci_driver to rte_eth_dev_data
> 
> 2015-11-02 10:36, Iremonger, Bernard:
> > From: Thomas Monjalon [mailto:thomas.monjalon@6wind.com]
> > > 2015-10-30 15:08, Bernard Iremonger:
> > > > add dev_flags to rte_eth_dev_data, add macros for dev_flags.
> > > > add kdrv to rte_eth_dev_data.
> > > > add numa_node to rte_eth_dev_data.
> > > > add drv_name to rte_eth_dev_data.
> > >
> > > A commit message should explain why things are done.
> > >
> > > > +	uint32_t dev_flags; /**< Flags controlling handling of device.
> > > > +*/
> > >
> > > Where are defined this flags? What is the scope?
> >
> > These flags are defined in the following file:
> >
> > lib/librte_ether/rte_ethdev.h
> >
> > These flags are visible to all the vdevs and pdevs.
> 
> I mean it should be more explicit. Having an enum name will help.
> Note: I understand your patch. I'm just asking the questions an user will ask
> when trying to use your new API.
> Thanks

I will try to be clearer in the commit message.
I tried an enum for the dev_flags but it does not work well.
There can be multiple flags set in dev_flags, it is intended to be a bit field similar to the pci flags.

I have squashed down to 19 patches now, I don't want to over squash.

Regards,

Bernard.
  
Thomas Monjalon Nov. 2, 2015, 5:42 p.m. UTC | #7
2015-11-02 16:44, Iremonger, Bernard:
> Hi Thomas,
> 
> <snip>
> 
> > Subject: Re: [dpdk-dev] [PATCH v7 02/28] librte_ether: add fields from
> > rte_pci_driver to rte_eth_dev_data
> > 
> > 2015-11-02 10:36, Iremonger, Bernard:
> > > From: Thomas Monjalon [mailto:thomas.monjalon@6wind.com]
> > > > 2015-10-30 15:08, Bernard Iremonger:
> > > > > add dev_flags to rte_eth_dev_data, add macros for dev_flags.
> > > > > add kdrv to rte_eth_dev_data.
> > > > > add numa_node to rte_eth_dev_data.
> > > > > add drv_name to rte_eth_dev_data.
> > > >
> > > > A commit message should explain why things are done.
> > > >
> > > > > +	uint32_t dev_flags; /**< Flags controlling handling of device.
> > > > > +*/
> > > >
> > > > Where are defined this flags? What is the scope?
> > >
> > > These flags are defined in the following file:
> > >
> > > lib/librte_ether/rte_ethdev.h
> > >
> > > These flags are visible to all the vdevs and pdevs.
> > 
> > I mean it should be more explicit. Having an enum name will help.
> > Note: I understand your patch. I'm just asking the questions an user will ask
> > when trying to use your new API.
> > Thanks
> 
> I will try to be clearer in the commit message.
> I tried an enum for the dev_flags but it does not work well.
> There can be multiple flags set in dev_flags, it is intended to be a bit field similar to the pci flags.

Yes. You can assign some bits in an enum.
But if you prefer the defines, it's also OK if they are clearly identifiable:
with a prefix and good comments allowing to map the structure field and the flags.

> I have squashed down to 19 patches now, I don't want to over squash.

The proposal of 5 patches was good.
  

Patch

diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h
index 8a8c82b..1517fe2 100644
--- a/lib/librte_ether/rte_ethdev.h
+++ b/lib/librte_ether/rte_ethdev.h
@@ -1471,8 +1471,23 @@  struct rte_eth_dev_data {
 		all_multicast : 1, /**< RX all multicast mode ON(1) / OFF(0). */
 		dev_started : 1,   /**< Device state: STARTED(1) / STOPPED(0). */
 		lro         : 1;   /**< RX LRO is ON(1) / OFF(0) */
+	uint32_t dev_flags; /**< Flags controlling handling of device. */
+	enum rte_kernel_driver kdrv;    /**< Kernel driver passthrough */
+	int numa_node;  /**< NUMA node connection */
+	const char *drv_name;   /**< Driver name */
 };
 
+/** Device needs PCI BAR mapping (done with either IGB_UIO or VFIO) */
+#define RTE_ETH_DEV_DRV_NEED_MAPPING   RTE_PCI_DRV_NEED_MAPPING
+/** Device needs to be unbound even if no module is provided */
+#define RTE_ETH_DEV_DRV_FORCE_UNBIND   RTE_PCI_DRV_FORCE_UNBIND
+/** Device supports link state interrupt */
+#define RTE_ETH_DEV_INTR_LSC   RTE_PCI_DRV_INTR_LSC
+/** Device  supports detaching capability */
+#define RTE_ETH_DEV_DETACHABLE RTE_PCI_DRV_DETACHABLE
+/** Device  is a bonded device */
+#define RTE_ETH_DEV_BONDED 0x0020
+
 /**
  * @internal
  * The pool of *rte_eth_dev* structures. The size of the pool