#endif
}
-/*
- * for given size, calculate required number of buckets.
- */
-static uint32_t
-replay_num_bucket(uint32_t wsz)
-{
- uint32_t nb;
-
- nb = rte_align32pow2(RTE_ALIGN_MUL_CEIL(wsz, WINDOW_BUCKET_SIZE) /
- WINDOW_BUCKET_SIZE);
- nb = RTE_MAX(nb, (uint32_t)WINDOW_BUCKET_MIN);
-
- return nb;
-}
-
/*
* According to RFC4303 A2.1, determine the high-order bit of sequence number.
* use 32bit arithmetic inside, return uint64_t.
n = *num;
if (SQN_ATOMIC(sa))
- sqn = (uint64_t)rte_atomic64_add_return(&sa->sqn.outb.atom, n);
+ sqn = __atomic_add_fetch(&sa->sqn.outb, n, __ATOMIC_RELAXED);
else {
- sqn = sa->sqn.outb.raw + n;
- sa->sqn.outb.raw = sqn;
+ sqn = sa->sqn.outb + n;
+ sa->sqn.outb = sqn;
}
/* overflow */
{
uint32_t bit, bucket, last_bucket, new_bucket, diff, i;
- /* replay not enabled */
- if (sa->replay.win_sz == 0)
- return 0;
-
/* handle ESN */
if (IS_ESN(sa))
sqn = reconstruct_esn(rsn->sqn, sqn, sa->replay.win_sz);
* between writer and readers.
*/
-/**
- * Based on number of buckets calculated required size for the
- * structure that holds replay window and sequence number (RSN) information.
- */
-static size_t
-rsn_size(uint32_t nb_bucket)
-{
- size_t sz;
- struct replay_sqn *rsn;
-
- sz = sizeof(*rsn) + nb_bucket * sizeof(rsn->window[0]);
- sz = RTE_ALIGN_CEIL(sz, RTE_CACHE_LINE_SIZE);
- return sz;
-}
-
/**
* Copy replay window and SQN.
*/
n = sa->sqn.inb.wridx;
RTE_ASSERT(n != sa->sqn.inb.rdidx);
- RTE_ASSERT(rsn - sa->sqn.inb.rsn == n);
+ RTE_ASSERT(rsn == sa->sqn.inb.rsn[n]);
rte_rwlock_write_unlock(&rsn->rwl);
sa->sqn.inb.rdidx = n;