He Yi(heyi-linaro) replied on github web page: platform/linux-generic/include/odp_pktio_ops_subsystem.h @@ -88,10 +89,40 @@ typedef ODP_MODULE_CLASS(pktio_ops) { /* Maximum size of pktio specific ops data.*/ #define ODP_PKTIO_ODPS_DATA_MAX_SIZE 80000 +/* Pktio ops data pool */ +#define ODP_PKTIO_OPS_DATA_POOL_SIZE 160000 +#define ODP_PKTIO_OPS_DATA_POOL_NAME "ODP_PKTIO_OPS_DATA" + /* Extract pktio ops data from pktio entry structure */ #define odp_ops_data(_p, _mod) \
Comment: 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_r151592945 updated_at 2017-11-17 16:48:29