Matias Elo(matiaselo) replied on github web page:

platform/linux-generic/pktio/socket_mmap.c
line 187
@@ -361,11 +365,13 @@ static void mmap_fill_ring(struct ring *ring, odp_pool_t 
pool_hdl, int fanout)
                                   pool->tailroom + TPACKET_HDRLEN +
                                   TPACKET_ALIGNMENT + + (pz - 1)) & (-pz);
 
-       /* Calculate how many pages do we need to hold all pool packets


Comment:
Will fix.

> Matias Elo(matiaselo) wrote:
> This array is used to update `stats.out_octets` correctly if `enq_multi()` 
> fails to enqueue all packets. Without it a second for loop would be required 
> inside `if (ret > 0)` clause below.


>> Matias Elo(matiaselo) wrote:
>> The most specific error type an application can see is 
>> odp_packet_has_l2_error(), so it cannot trust packet contents anyway.


>>> Matias Elo(matiaselo) wrote:
>>> Will fix.


>>>> Bill Fischofer(Bill-Fischofer-Linaro) wrote:
>>>> The error bit simply says the packet was truncated to max length. Perhaps 
>>>> the application is only interested in the first few bytes of a packet?


>>>>> Bill Fischofer(Bill-Fischofer-Linaro) wrote:
>>>>> `ring->frame_num = next_frame(first_frame_num + nb_tx - 1, frame_count);` 
>>>>> is an alternative here.


>>>>>> Bill Fischofer(Bill-Fischofer-Linaro) wrote:
>>>>>> Since `ring->rd_num` is a power of two, is the concern here that the `%` 
>>>>>> operator might result in a division if the compiler doesn't know that 
>>>>>> it's a power of two? In that case:
>>>>>> ```
>>>>>> return ++cur_frame & (frame_count - 1);
>>>>>> ```
>>>>>> solves that problem and avoids conditional branching.


>>>>>>> Bill Fischofer(Bill-Fischofer-Linaro) wrote:
>>>>>>> If we're cleaning up, might as well delete that extraneous `+` in the 
>>>>>>> above line: `TPACKET_ALIGNMENT + + (pz - 1)) & (-pz);` I'm surprised 
>>>>>>> the compiler doesn't flag that since it's normally so picky about 
>>>>>>> issuing warnings.


>>>>>>>> Bill Fischofer(Bill-Fischofer-Linaro) wrote:
>>>>>>>> Not sure I understand what `out_octets_tbl` is accumulating here. If 
>>>>>>>> I'm sending three 100 byte packets this will set `out_octets_tbl[0]` 
>>>>>>>> to 100, `out_octets_tbl[1]` to 200, and `out_octets_tbl[2]` to 300. 


>>>>>>>>> Bill Fischofer(Bill-Fischofer-Linaro) wrote:
>>>>>>>>> Since you're doing miscellaneous cleanups anyway, perhaps changing 
>>>>>>>>> `len` to `num` here should be considered? `len` is confusing since it 
>>>>>>>>> doesn't represent packet length.


>>>>>>>>>> Matias Elo(matiaselo) wrote:
>>>>>>>>>> The odp_pktin_maxlen() API states:
>>>>>>>>>> > Maximum frame length in bytes that the packet IO interface can 
>>>>>>>>>> > receive.
>>>>>>>>>> 
>>>>>>>>>> I interpret this so that the application shouln't see packets which 
>>>>>>>>>> exceed pktin max length.
>>>>>>>>>> 


>>>>>>>>>>> muvarov wrote
>>>>>>>>>>> same here.


>>>>>>>>>>>> muvarov wrote
>>>>>>>>>>>> maybe to just set error bit and deliver this packet to application?


https://github.com/Linaro/odp/pull/397#discussion_r162326988
updated_at 2018-01-18 12:27:57

Reply via email to