[dpdk-dev] [PATCH 03/15] pmd: Add PMD_REGISTER_DRIVER macro

Olivier MATZ olivier.matz at 6wind.com
Wed Apr 16 18:11:32 CEST 2014


Hi Neil,

On 04/16/2014 03:08 PM, Neil Horman wrote:
> On Wed, Apr 16, 2014 at 01:52:49PM +0200, Thomas Monjalon wrote:
>> 2014-04-15 14:05, Neil Horman:
>>> Rather than have each driver have to remember to add a constructor to it to
>>> make sure its gets registered properly, wrap that process up in a macro to
>>> make registration a one line affair.  This also sets the stage for us to
>>> make registration of vdev pmds and physical pmds a uniform process
>>>
>>> Signed-off-by: Neil Horman <nhorman at tuxdriver.com>
>>
>> Could you explain why having a macro is better than an explicit constructor
>> function?
>>
> Because its a one line declaration inside a driver function that points to the
> structure used to initilze the pmd?  Having to append ((__constructor__)) to
> each initalization function is both error prone during entry and exposes the
> possibiilty of developers doing "too much" in their constructor.  It also allows
> for easy updating to all drivers, if additional boilerplate work needs to be
> done in the future for all pmds.

Even if it's not critical, in my opinion, the following code is easier
to understand:

	__attribute__((constructor))
	static void
	rte_pmd_ring_init(void)
	{
		rte_eal_dev_driver_register(&pmd_ring_drv);
	}

Than:

	PMD_REGISTER_DRIVER(pmd_ring_drv);


The first version explicitly shows what you are doing: defining a
static function called at initialization that registers a driver
structure.

With the second, we're tempted to check what this macro does...


My 2 cents,
Olivier



More information about the dev mailing list