[dpdk-dev] NXP DPAA2: Symbol renaming issue: Request for Suggestions
Shreyansh Jain
shreyansh.jain at nxp.com
Wed Jan 25 14:00:37 CET 2017
On Wednesday 25 January 2017 06:07 PM, Neil Horman wrote:
> On Tue, Jan 24, 2017 at 02:39:56PM +0000, Shreyansh Jain wrote:
>> Hello,
>>
>> We are facing a peculiar problem with respect to symbol namespace in DPDK. I
>> think Ferruh and Thomas would have fair idea about it as they have already
>> reviewed and commented on it. I was hoping to get some input to take it
>> forward from here.
>>
>> Brief Intro to DPAA2 Architecture:
>>
>> This is brief about NXP's DPAA2 PMD to start with:
>> (A lot more information is available at [1])
>>
>>
>>
>> +-------------------------------+
>> | Application |
>> +----.--------------------.-----+
>> | |
>> +----'------+ +-----'-----+
>> drivers/---->| DPIO | | DPIO |<---drivers/bus/fslmc
>> bus/fslmc +----.------+ +------.----+
>> | |
>> +----/-||--------------||--/----+
>> | Queue/Buffer Manager |<--- drivers/common/dpaa2
>> +----\-||--------------||--\----+ qbman
>> | |
>> +----'------+ +------'----+
>> drivers/ --->| DPNI | | DPSEC |<---drivers/cyrpto
>> net/dpaa2 +----|------+ +-----|-----+ dpaa2_sec
>> | |
>> +----|------+ +------|-----+ +----------------+
>> | PHY H/W | | SEC H/W | .> FSL MC BUS |
>> +-----------+ +------------+ / +----------------+
>> drivers/bus/fslmc
>>
>>
>> If we consider the above layout, drivers/crypto/dpaa_sec (NXP's DPAA2 Crypto
>> PMD, already available on ML [2]), and drivers/net/dpaa2 (NXP's DPAA2 PMD) are
>> using a common code (drivers/common/dpaa2/qbman).
>>
>> QBMAN (drivers/common/dpaa2/qbman) is essentially a Queue and Buffer Manager
>> set of APIs which allow DPIO (Data Path IO interfaces) to communicate with the
>> Hardware through queues (and buffers).
>>
>> At the scan time, FSLMC bus is scanned and all devices (Phy or Sec) are
>> identified and added to a list. For each such device, appropriate I/O portals
>> are opened which are essentially gateway between user-space and DP* devices
>> using the hardware queues/buffers (qbman)
>>
>> Problem:
>>
>> You might have noticed that we have exposed a lot of symbols from
>> drivers/common and drivers/bus for drivers/net and drivers/crypto. All these
>> symbols are not rte_* as what has been suggested for exported symbols.
>>
>> Review comments have been received for renaming these to make them rte_* or
>> _rte_* prefixed.
>>
>> Just as a side note, these symbols are being exposed _internally_ within
>> drivers/* area.
>>
>> There are (3) possible solutions we have:
>>
>> 1/ Rename all the symbols:
>> - This is a difficult option for us. Renaming means breaking our linkage
>> with existing code (Linux Kernel upstream candidate as well as internal
>> repository).
>> - Changing it means maintaining this change set internally/independently
>> which is not a feasible long term solution.
>>
>> 2/ Merge all the libraries together:
>> - In the initial RFC days, there were review comments which suggested that
>> we should break the PMD into common libraries and place it in drivers/*
>> parallel folders.
>> - This is precisely the reason we are facing the situation.
>> - Another possibility is to start duplicating the code for common. But, this
>> too has a technical limitation for us as some data structures are shared
>> across net and crypto and it is not possible to have multiple instances of
>> those.
>> - One more offshoot option could have been to keep the library external
>> of the DPDK framework (external location and linked on demand basis,
>> manually). We don't prefer this as this will make it difficult for any user
>> to use DPAA2 easily.
>>
>> 3/ Finding a way to keep symbols internal to drivers/* independent of rte_*
>> prefix:
>> - For example, allowing symbols to be exposed limited to drivers/* area
>> and not allowing them to be available across lib/* (not sure how, though!)
>>
>> <This is where I need you help - is there some suggestion or comments which
>> can help us arrive to a solution?>
>>
>> My argument for this:
>> - With new bus infra in place, there would be more drivers being contributed.
>> It also means that there would be PMDs having their own code and symbol
>> models. It would be difficult to ask all of them to mandatorily adhere
>> to a naming scheme.
>> This argument bodes well for lib/* because that is core (libraries) which
>> should be controlled for uniformity and performance.
>>
>> [1] https://www.kernel.org/doc/readme/drivers-staging-fsl-mc-README.txt
>> [2] http://dpdk.org/ml/archives/dev/2017-January/054251.html
>>
>>
>
> So, Option 3 seems pretty easy, just use symbol aliasing. Make all your
> exported symbols static, and use the MAP_SATIC_SYMBOL macro (or use your own
> inline asm if you want), to create rte_ aliases for them all, add the rte_*
> variants to your version map and it should all work out. You get to keep your
> naming in tact, you can create some macro ifdeffery to make your names static or
> not depending on your build environment (upstream linux kernel vs. dpdk, vs
> something else), and just use the aliases when it suit you (like for dpdk naming
> conventions)
Thanks. Sounds interesting, though something I will need to
investigate. I will experiment on this.
>
> Neil
>
>
More information about the dev
mailing list