brbrooks replied on github web page:

include/odp/api/spec/pool.h
line 17
@@ -294,6 +294,22 @@ odp_pool_t odp_pool_lookup(const char *name);
 typedef struct odp_pool_info_t {
        const char *name;          /**< pool name */
        odp_pool_param_t params;   /**< pool parameters */
+
+       /** Minimum data address.
+        * This is the minimum address that application accessible data of any
+        * object (event) allocated from the pool may locate. When there's no
+        * application accessible data (e.g. ODP_POOL_TIMEOUT pools), the
+        * value maybe zero.
+        */
+       uintptr_t min_data_addr;
+
+       /** Maximum data address.
+        * This is the maximum address that application accessible data of any
+        * object (event) allocated from the pool may locate. When there's no
+        * application accessible data (e.g. ODP_POOL_TIMEOUT pools), the
+        * value maybe zero.


Comment:
"maybe" -> "may be"

> brbrooks wrote
> "maybe" -> "may be"


>> sachin-saxena wrote
>> Sure.


>>> Petri Savolainen(psavol) wrote:
>>> While adding commit log text, modify the style in these comments to begin 
>>> each row with a *.
>>> 
>>> /**
>>>   *
>>>   *
>>>   */


>>>> sachin-saxena wrote
>>>> Looks much better. Thank you @psavol for your suggestions.


>>>>> Petri Savolainen(psavol) wrote:
>>>>> This spec should apply for all pool types (also other than packet). 0 
>>>>> address may be used when there's no data in an event (e.g. timeout).
>>>>> 
>>>>> /** Minimum data address.
>>>>>    * This is the minimum address that application accessible data of any 
>>>>>    * object (event) allocated from the pool may locate. When there's no 
>>>>>    * application accessible data (e.g. ODP_POOL_TIMEOUT pools), the 
>>>>>    * value maybe zero. */
>>>>> uintptr_t min_data_addr;
>>>>> 
>>>>> /** Maximum data address.
>>>>>    * This is the maximum address that application accessible data of any 
>>>>>    * object (event) allocated from the pool may locate. When there's no 
>>>>>    * application accessible data (e.g. ODP_POOL_TIMEOUT pools), the 
>>>>>    * value maybe zero.  */
>>>>> uintptr_t max_data_addr;


>>>>>> sachin-saxena wrote
>>>>>> I will wait for other's comments, if any, before sending V3 patchset


>>>>>>> sachin-saxena wrote
>>>>>>> 1.  Agreed for first suggestion.
>>>>>>> 2.  For Second, As per my understanding, the VPP only needs to know the 
>>>>>>> range of addresses in order to calculate OFFSET within. VPP doesn't 
>>>>>>> assume/store packet address beyond its lifetime (Rx to Tx)


>>>>>>>> sachin-saxena wrote
>>>>>>>> OK. agreed


>>>>>>>>> Bill Fischofer(Bill-Fischofer-Linaro) wrote:
>>>>>>>>> The only other ambiguity is whether the address that applications see 
>>>>>>>>> for a packet is constant. VPP clearly assumes this but this is not 
>>>>>>>>> implied by the ODP spec. The "lifetime" of packet visibility is from 
>>>>>>>>> the time a call like `odp_packet_data()` is made until the thread 
>>>>>>>>> releases the `odp_packet_t` that was used to obtain this address. If 
>>>>>>>>> some other thread receives that handle and calls `odp_packet_data()` 
>>>>>>>>> there's no requirement or guarantee that it will get the same address 
>>>>>>>>> as the previous owner. 


>>>>>>>>>> Bill Fischofer(Bill-Fischofer-Linaro) wrote:
>>>>>>>>>> I'd change these to "visible address" rather than "address". The 
>>>>>>>>>> point is that the spec says nothing about how packets are 
>>>>>>>>>> represented within an implementation. It only states what 
>>>>>>>>>> applications may see by using other ODP APIs that manipulate 
>>>>>>>>>> odp_packet_t object.


>>>>>>>>>>> Bill Fischofer(Bill-Fischofer-Linaro) wrote:
>>>>>>>>>>> I'd delete this note as it's not necessary and not complete for the 
>>>>>>>>>>> ODP API spec. 


>>>>>>>>>>>> Bill Fischofer(Bill-Fischofer-Linaro) wrote:
>>>>>>>>>>>> As we discussed earlier today. We should only need an extension to 
>>>>>>>>>>>> `odp_pool_info()` to return the `min_addr` and `max_addr` of any 
>>>>>>>>>>>> packet contained in the pool. This can simply be added to the end 
>>>>>>>>>>>> of the `odp_pool_info_t` struct. The application (in this case 
>>>>>>>>>>>> VPP) can then verify that the range is usable by it (_i.e.,_ is 
>>>>>>>>>>>> containable in 32 bits) and can store the info it needs to do its 
>>>>>>>>>>>> indexing from this info. 


>>>>>>>>>>>>> Petri Savolainen(psavol) wrote:
>>>>>>>>>>>>> How sparse a "linear pool" may be? All implementations can claim 
>>>>>>>>>>>>> linear pool support by returning info.first_addr = 0, 
>>>>>>>>>>>>> info.last_addr = (uintptr_t) -1, where address size may be 64bits.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> Addresses could be used for debugging, but not much more than 
>>>>>>>>>>>>> that. What VPP is going to do with this information ?
>>>>>>>>>>>>>  
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 


>>>>>>>>>>>>>> Bill Fischofer(Bill-Fischofer-Linaro) wrote:
>>>>>>>>>>>>>> @muvarov To your points:
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 1. No, VPP only deals with packets so there's no need to 
>>>>>>>>>>>>>> generalize this since it is an accommodation for VPP, not 
>>>>>>>>>>>>>> something we want to encourage other applications to use.
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 2. We abandoned that approach because it required the 
>>>>>>>>>>>>>> application to know how much memory the ODP implementation 
>>>>>>>>>>>>>> needed for its internal use, which is not something it can 
>>>>>>>>>>>>>> reasonably know. So `odp_pool_create()` is responsible for 
>>>>>>>>>>>>>> allocating any shm used by the pool based on input provided by 
>>>>>>>>>>>>>> the caller. 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 3. Agree, the union seems strange here. Since having an output 
>>>>>>>>>>>>>> parameter in the `odp_pool_param_t` is not something we want 
>>>>>>>>>>>>>> this will have to be reworked anyway.


>>>>>>>>>>>>>>> muvarov wrote
>>>>>>>>>>>>>>> 1) is it needed for tmo and bufs also? why it's on only inside 
>>>>>>>>>>>>>>> packets? 2) How memory for *start_addr is allocated in VPP? In 
>>>>>>>>>>>>>>> previous version of odp_pool_create() was odp_shm_t parameter 
>>>>>>>>>>>>>>> which said to reuse already created shm.  Maybe that needs to 
>>>>>>>>>>>>>>> be reconsidered. 3) why union is needed? why it's not with 
>>>>>>>>>>>>>>> uintptr_t ?


>>>>>>>>>>>>>>>> Dmitry Eremin-Solenikov(lumag) wrote:
>>>>>>>>>>>>>>>> @Bill-Fischofer-Linaro yes, this looks like a good approach.
>>>>>>>>>>>>>>>> @sachin-saxena could you please reimplement your PR following 
>>>>>>>>>>>>>>>> @Bill-Fischofer-Linaro 's suggestion?


>>>>>>>>>>>>>>>>> Dmitry Eremin-Solenikov(lumag) wrote:
>>>>>>>>>>>>>>>>> Got confused between single-segment packet and linear space 
>>>>>>>>>>>>>>>>> for packets, sorry.


>>>>>>>>>>>>>>>>>> Bill Fischofer(Bill-Fischofer-Linaro) wrote:
>>>>>>>>>>>>>>>>>> Yes the existing `seg_len` parameter is set to the minimum 
>>>>>>>>>>>>>>>>>> size segment that the application requires. This can be set 
>>>>>>>>>>>>>>>>>> to be equal to `max_len` to require single-segment packets.
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> However @sachin-saxena mentioned at SFO17 that VPP can deal 
>>>>>>>>>>>>>>>>>> with multi-segment packets, though I'm not sure how that 
>>>>>>>>>>>>>>>>>> works.


>>>>>>>>>>>>>>>>>>> Bill Fischofer(Bill-Fischofer-Linaro) wrote:
>>>>>>>>>>>>>>>>>>> VPP will not run on such platforms without modification. If 
>>>>>>>>>>>>>>>>>>> the goal is to not modify VPP then an 
>>>>>>>>>>>>>>>>>>> `odp_pool_capability()` output that says whether pools can 
>>>>>>>>>>>>>>>>>>> present a linear interface. During Connect @psavol also 
>>>>>>>>>>>>>>>>>>> mentioned that a separate API to get this info would be 
>>>>>>>>>>>>>>>>>>> more appropriate than bending the input to 
>>>>>>>>>>>>>>>>>>> `odp_pool_create()` to give output parameters.
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> My personal preference would be something like:
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> * `odp_pool_capability()` indicates whether pools can be 
>>>>>>>>>>>>>>>>>>> created that provide linear addressing.
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> * An option on `odp_pool_create()` to request a linear pool.
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> * A new API (or an extension to the existing 
>>>>>>>>>>>>>>>>>>> `odp_pool_info()` API) to get the mapping info that VPP 
>>>>>>>>>>>>>>>>>>> needs.
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> That would seem to be more consistent with overall ODP 
>>>>>>>>>>>>>>>>>>> structure.


>>>>>>>>>>>>>>>>>>>> Dmitry Eremin-Solenikov(lumag) wrote:
>>>>>>>>>>>>>>>>>>>> What will happen for platforms where `odp_packet_t` is not 
>>>>>>>>>>>>>>>>>>>> mapped to the virtual memory?


>>>>>>>>>>>>>>>>>>>>> Dmitry Eremin-Solenikov(lumag) wrote:
>>>>>>>>>>>>>>>>>>>>> Isn't setting `seg_len` enough? Maybe we should provide 
>>>>>>>>>>>>>>>>>>>>> an updated definition for `seg_len`  (e.g. in case 
>>>>>>>>>>>>>>>>>>>>> `seg_len > max_len`, always use single segment).


https://github.com/Linaro/odp/pull/200#discussion_r146438879
updated_at 2017-10-24 02:17:15

Reply via email to