Bill Fischofer(Bill-Fischofer-Linaro) replied on github web page:

platform/linux-generic/include/odp_packet_io_pool.h
@@ -0,0 +1,27 @@
+/* Copyright (c) 2013, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier:     BSD-3-Clause
+ */
+
+/**
+ * @file
+ *
+ * ODP packet IO pool
+ */
+
+#ifndef ODP_PACKET_IO_POOL_H_
+#define ODP_PACKET_IO_POOL_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int odp_packet_io_pool_create(void);
+int odp_packet_io_pool_destroy(void);


Comment:
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_r151798925
updated_at 2017-11-20 12:52:30

Reply via email to