bogdanPricope replied on github web page:

platform/linux-generic/pktio/tap.c
line 10
@@ -92,23 +92,30 @@ static int tap_pktio_open(odp_pktio_t id ODP_UNUSED,
        int fd, skfd, flags;
        uint32_t mtu;
        struct ifreq ifr;
-       pktio_ops_tap_data_t *tap = odp_ops_data(pktio_entry, tap);
+       pktio_ops_tap_data_t *tap = NULL;
 
        if (strncmp(devname, "tap:", 4) != 0)
                return -1;
 
+       if (pool == ODP_POOL_INVALID)


Comment:
I agree, this check should  be part of odp_pktio_open() or setup_pktio_entry() 
but this should be done in another PR. Here, I only move this check upper in 
the function (is not a new code).

> nagarahalli wrote
> This file is for allocating the shmem for storing the driver's global data.
> 
> The name 'pool' seems to be creating confusion with the packet/buffer pool. 
> May be we should change the name of 
> '_odp_ishm_pool_create/odpdrv_shm_pool_create'.


>> Bill Fischofer(Bill-Fischofer-Linaro) wrote:
>> This is a parameter passed through from `odp_pktio_open()`. The spec simply 
>> says that this must be of type `ODP_POOL_PACKET`, so results are undefined 
>> if the caller doesn't abide by the spec. A courtesy validation check doesn't 
>> seem unreasonable, but any validation checking should be done in the main 
>> API, not in each individual driver. As such drivers should assume that 
>> `pool` is valid at entry since these entry points cannot be invoked directly 
>> by applications.


>>> Bill Fischofer(Bill-Fischofer-Linaro) wrote:
>>> `ODP_OPS_DATA_FREE()`


>>>> Bill Fischofer(Bill-Fischofer-Linaro) wrote:
>>>> 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_r151917124
updated_at 2017-11-20 12:52:30

Reply via email to