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

Reply via email to