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(-) > >