Bill Fischofer(Bill-Fischofer-Linaro) replied on github web page:
platform/linux-generic/include/odp_pktio_ops_subsystem.h
@@ -87,12 +87,8 @@ typedef ODP_MODULE_CLASS(pktio_ops) {
odp_api_proto(pktio_ops, print) print;
} pktio_ops_module_t;
-/* Maximum size of pktio specific ops data.*/
-#define ODP_PKTIO_ODPS_DATA_MAX_SIZE 80000
-
/* Extract pktio ops data from pktio entry structure */
-#define odp_ops_data(_p, _mod) \
- ((pktio_ops_ ## _mod ## _data_t *)(uintptr_t)_p->s.ops_data)
+#define odp_ops_data(_p, _mod) _p->s.ops_data
#define odp_ops_data_alloc(_p, _size) \
Comment:
Again since this is a macro, the name should be `ODP_OPS_DATA_ALLOC()`.
> Bill Fischofer(Bill-Fischofer-Linaro) wrote:
> Macros should be CAPITALIZED to indicate that they are macros rather than
> callable APIs. So `ODP_OPS_DATA()` would be used here.
>> Bill Fischofer(Bill-Fischofer-Linaro) wrote:
>> Where does this number come from? Is it subject to configuration?
>>> Bill Fischofer(Bill-Fischofer-Linaro) wrote:
>>> 2017, not 2013 here.
>>>> Bill Fischofer(Bill-Fischofer-Linaro) wrote:
>>>> Are these intended to be new ODP APIs? If so they need to be specified in
>>>> `odp/api/spec/packet.h`. Or are they supposed to be new Southbound APIs
>>>> for use by drivers? Need some clarification here. The use of the `odp_`
>>>> prefix implies that these are Northbound APIs. If these are Southbound
>>>> APIs, then the prefix should be `odpdrv_`.
>>>>> Bill Fischofer(Bill-Fischofer-Linaro) wrote:
>>>>> Both pools and shmem's are ODP objects. The difference is a pool is a
>>>>> structured collection of objects that can be allocated and freed from the
>>>>> pool and that contain both data and metadata, while a shmem is a "slab"
>>>>> of memory that has no structure beyond how the application chooses to use
>>>>> it. Given this distinction, a pool seems more useful here.
>>>>>> Bill Fischofer(Bill-Fischofer-Linaro) wrote:
>>>>>> This definitely should not be part of the API spec. It's an
>>>>>> implementation artifact.
>>>>>>> nagarahalli wrote
>>>>>>> This should be part of odp_pktio_ops_subsystem.h file.
>>>>>>>> nagarahalli wrote
>>>>>>>> Should we rename it to odp_packet_io_shm.h and odp_packet_io_shm.c?
>>>>>>>>> nagarahalli wrote
>>>>>>>>> '_p' is not required as the macro is returning 'ops_data'. Makes the
>>>>>>>>> macro simple as well.
>>>>>>>>>
>>>>>>>>> Similarly for odp_ops_data_free can just take 'ops_data' as input.
>>>>>>>>>
>>>>>>>>> This will be inline with future plans to not expose 'pktio_entry_t'
>>>>>>>>> to the drivers.
>>>>>>>>>> He Yi(heyi-linaro) wrote:
>>>>>>>>>> In future, since each pktio_ops module will not expose their private
>>>>>>>>>> data type, this macro can be changed to
>>>>>>>>>> >`#define odp_ops_data(_entry, _pdata) \
>>>>>>>>>> pdata = (typeof(_pdata))(_entry->s.ops_data)`
>>>>>>>>>>
>>>>>>>>>> So the odp_pktio_ops_subsystem.h header won't need to know all
>>>>>>>>>> pktio_ops' private data structure declaration. Can be considered
>>>>>>>>>> next time.
>>>>>>>>>>> He Yi(heyi-linaro) wrote:
>>>>>>>>>>> Like this!
>>>>>>>>>>>> He Yi(heyi-linaro) wrote:
>>>>>>>>>>>> Look good no more comments from me to this commit after Honnappa
>>>>>>>>>>>> and Josep's, this is a step forward for the pktio ops data
>>>>>>>>>>>>
>>>>>>>>>>>> This commit also reveals how complex in ODP to allocate an
>>>>>>>>>>>> arbitrary sized piece of memory, need to prepare a pool (and guess
>>>>>>>>>>>> the largest usage), lookup this pool in every allocation/free by
>>>>>>>>>>>> name, and do the allocation/free after then.
>>>>>>>>>>>>> He Yi(heyi-linaro) wrote:
>>>>>>>>>>>>> seems no need to add an extra macro here?
>>>>>>>>>>>>>
>>>>>>>>>>>>> ODP_SUBSYSTEM_FOREACH_TEMPLATE(...) is extern
>>>>>>>>>>>>> we can just use to generate a static function use the same macro:
>>>>>>>>>>>>> static ODP_SUBSYSTEM_FOREACH_TEMPLATE(...)
>>>>>>>>>>>>>> nagarahalli wrote
>>>>>>>>>>>>>> Temporarily, roundup the size to cache line size. This way all
>>>>>>>>>>>>>> the memory allocations will be cache line aligned.
>>>>>>>>>>>>>>> nagarahalli wrote
>>>>>>>>>>>>>>> Should be odp_ops_data_alloc(_p, size).
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> As per the pkt I/O changes document, _p (pktio_entry_t) is not
>>>>>>>>>>>>>>> required to be exposed to drivers. Do you plan to do it as part
>>>>>>>>>>>>>>> of this PR?
>>>>>>>>>>>>>>>> nagarahalli wrote
>>>>>>>>>>>>>>>> Same here, this can be part of odp_pktio_term_global
>>>>>>>>>>>>>>>>> nagarahalli wrote
>>>>>>>>>>>>>>>>> This functionality can be done in odp_pktio_global_init
>>>>>>>>>>>>>>>>> function. This will avoid the changes to modular framework as
>>>>>>>>>>>>>>>>> well.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> When we have done additional enhancements to shared memory,
>>>>>>>>>>>>>>>>> this code will be deleted. So, can be part of
>>>>>>>>>>>>>>>>> odp_pktio_global_init without affecting the modular framework.
>>>>>>>>>>>>>>>>>> Josep Puigdemont(joseppc) wrote:
>>>>>>>>>>>>>>>>>> ah, yes, true, I didn't think about this detail...
>>>>>>>>>>>>>>>>>>> bogdanPricope wrote
>>>>>>>>>>>>>>>>>>> @joseppc Btw, 'odp_ops_data_alloc(_p, _mod)' vs.
>>>>>>>>>>>>>>>>>>> odp_ops_data_alloc(_p, _size) ?
>>>>>>>>>>>>>>>>>>>> bogdanPricope wrote
>>>>>>>>>>>>>>>>>>>> No, this pool is used to allocate packets (for recv side).
>>>>>>>>>>>>>>>>>>>>> Josep Puigdemont(joseppc) wrote:
>>>>>>>>>>>>>>>>>>>>> Ok, I may be splitting hairs now, but I thought we were
>>>>>>>>>>>>>>>>>>>>> just checking whether the pool parameter passed to
>>>>>>>>>>>>>>>>>>>>> pktio_open was valid, and bail out if not. We are not
>>>>>>>>>>>>>>>>>>>>> actually using this pool to allocate this pktio's private
>>>>>>>>>>>>>>>>>>>>> data, right?
>>>>>>>>>>>>>>>>>>>>>> bogdanPricope wrote
>>>>>>>>>>>>>>>>>>>>>> Alloc/free vs. array has this disadvantage: you need to
>>>>>>>>>>>>>>>>>>>>>> allocate the memory at some point and free it if the
>>>>>>>>>>>>>>>>>>>>>> operation fails for any reason. It is better to delay
>>>>>>>>>>>>>>>>>>>>>> the allocation until after some common checks.
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> stncmp: open calls are not on fast path ... no reason to
>>>>>>>>>>>>>>>>>>>>>> optimize the performance ... but repeated memory
>>>>>>>>>>>>>>>>>>>>>> alloc/free may affect some pool implementations
>>>>>>>>>>>>>>>>>>>>>>> bogdanPricope wrote
>>>>>>>>>>>>>>>>>>>>>>> It will require a cast when is called.
>>>>>>>>>>>>>>>>>>>>>>> A pktio_type may implement another way to allocate
>>>>>>>>>>>>>>>>>>>>>>> memory starting form the name of the pool / is not
>>>>>>>>>>>>>>>>>>>>>>> mandatory to use those macros but are helpful for
>>>>>>>>>>>>>>>>>>>>>>> existing pktio types.
>>>>>>>>>>>>>>>>>>>>>>>> bogdanPricope wrote
>>>>>>>>>>>>>>>>>>>>>>>> _p comes form (pktio_entry_t *)
>>>>>>>>>>>>>>>>>>>>>>>>> Josep Puigdemont(joseppc) wrote:
>>>>>>>>>>>>>>>>>>>>>>>>> It probably belongs to its own patch, but now that
>>>>>>>>>>>>>>>>>>>>>>>>> you are at it, it could even be moved even further
>>>>>>>>>>>>>>>>>>>>>>>>> up, as it is probably faster than checking for "tap:"
>>>>>>>>>>>>>>>>>>>>>>>>> in the device string.
>>>>>>>>>>>>>>>>>>>>>>>>>> Josep Puigdemont(joseppc) wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>> (_p)? There are a couple more, also in
>>>>>>>>>>>>>>>>>>>>>>>>>> odp_ops_data_free.
>>>>>>>>>>>>>>>>>>>>>>>>>>> Josep Puigdemont(joseppc) wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>> Maybe we can return (void *)? This way we would not
>>>>>>>>>>>>>>>>>>>>>>>>>>> care if pktios name (or define) their private
>>>>>>>>>>>>>>>>>>>>>>>>>>> structures according to the naming conventions
>>>>>>>>>>>>>>>>>>>>>>>>>>> implicit in the macro.
https://github.com/Linaro/odp/pull/297#discussion_r151800912
updated_at 2017-11-20 12:52:30