Skip to content

Commit

Permalink
rrl: fix zero increment in KRU
Browse files Browse the repository at this point in the history
  • Loading branch information
Lukáš Ondráček authored and salzmdan committed Oct 3, 2024
1 parent 75d6162 commit 623bb9a
Showing 1 changed file with 4 additions and 3 deletions.
7 changes: 4 additions & 3 deletions src/knot/modules/rrl/kru.inc.c
Original file line number Diff line number Diff line change
Expand Up @@ -230,7 +230,8 @@ struct query_ctx {
struct load_cl *l[TABLE_COUNT];
uint32_t time_now;
kru_price_t price;
uint16_t price16, limit16;
uint16_t price16;
uint32_t limit16; // 2^16 has to be representable
uint16_t id;
uint16_t final_load_value; // set by kru_limited_update if not blocked
uint16_t *load;
Expand Down Expand Up @@ -360,7 +361,7 @@ static inline bool kru_limited_fetch(struct kru *kru, struct query_ctx *ctx)
const kru_price_t fract = price & ((((kru_price_t)1) << fract_bits) - 1);

ctx->price16 = price >> fract_bits;
ctx->limit16 = -ctx->price16;
ctx->limit16 = (1<<16) - ctx->price16;

if ((fract_bits > 0) && (fract > 0)) {
ctx->price16 += (rand_bits(fract_bits) < fract);
Expand Down Expand Up @@ -474,7 +475,7 @@ static inline bool kru_limited_update(struct kru *kru, struct query_ctx *ctx, bo

static_assert(ATOMIC_CHAR16_T_LOCK_FREE == 2, "insufficient atomics");
const uint16_t price = ctx->price16;
const uint16_t limit = ctx->limit16;
const uint32_t limit = ctx->limit16; // 2^16 has to be representable
uint16_t load_orig = atomic_load_explicit(load_at, memory_order_relaxed);
uint16_t load_new;
do {
Expand Down

0 comments on commit 623bb9a

Please sign in to comment.