Anatoly, please could you look at this?

13/01/2023 14:14, Vipin P R:
> *** 
> In the lookahead logic, let's say after the Right-Shift-And operation to 
> check for contiguity, we hit case 
> http://code.dpdk.org/dpdk/latest/source/lib/eal/common/eal_common_fbarray.c#L235
> 
>             /* if first bit is not set, we've lost the run */
>             if ((lookahead_msk & 1) == 0) {
>                 /*
>                  * we've scanned this far, so we know there are
>                  * no runs in the space we've lookahead-scanned
>                  * as well, so skip that on next iteration.
>                  */
>                 ignore_msk = ~((1ULL << need) - 1);
>                 msk_idx = lookahead_idx;
>                 break;
>             }
>         lets say for mask size of 64 bits : in msk_idx 4 we need 4 
> consecutive bits.
>         let need = 4. 
>         lets say some of the bits starting from LSB are xx11011. 
>         Operating on the inverted mask for better clarity. RSA - 
> RightShiftAnd, xx -- don't-care bits before
> 
>         This condition could hit if there aren't "need" number of contiguous 
> bits starting from LSB.
>         But, that doesn't necessarily mean there aren't "need" number of such 
> bits elsewhere in the same lookahead_idx.
>         We seem to be ignoring "need" number of bits starting from the LSB 
> for the next iteration.
> 
>         Due to ignore_mask we might end losing some bits.
>         /* if we have an ignore mask, ignore once */
>         if (ignore_msk) {
>             cur_msk &= ignore_msk;
>             ignore_msk = 0;
>         }
> e.g.
> lookahead_msk before RSA logic : xx11100 , need = 4, 2 bits lost
> lookahead_msk before RSA logic : xx11011, need = 4, 1 bit lost
> lookahead_msk before RSA logic : xx11110, need = 4, 3 bits lost
> 
> NB : To understand the number of bits lost, look at need; that's the number 
> of bits (starting from LSB) that's cleared to zero before the next iteration.
> ***
> 
> Vipin P R (2):
>   Memory Allocation: Fixes ignore_msk during find_next_n() in fb_array
>     library
>   Memory Allocation: Alternative fix for ignore_msk during find_next_n()
>     in fb_array library
> 
>  lib/eal/common/eal_common_fbarray.c | 26 +++++++++++++++++++++++---
>  1 file changed, 23 insertions(+), 3 deletions(-)
> 
> 





Reply via email to