Lines Matching refs:vars

373 static void cobalt_newton_step(struct cobalt_vars *vars)
378 invsqrt = vars->rec_inv_sqrt;
380 val = (3LL << 32) - ((u64)vars->count * invsqrt2);
385 vars->rec_inv_sqrt = val;
388 static void cobalt_invsqrt(struct cobalt_vars *vars)
390 if (vars->count < REC_INV_SQRT_CACHE)
391 vars->rec_inv_sqrt = cobalt_rec_inv_sqrt_cache[vars->count];
393 cobalt_newton_step(vars);
424 static void cobalt_vars_init(struct cobalt_vars *vars)
426 memset(vars, 0, sizeof(*vars));
449 static bool cobalt_queue_full(struct cobalt_vars *vars,
455 if (ktime_to_ns(ktime_sub(now, vars->blue_timer)) > p->target) {
456 up = !vars->p_drop;
457 vars->p_drop += p->p_inc;
458 if (vars->p_drop < p->p_inc)
459 vars->p_drop = ~0;
460 vars->blue_timer = now;
462 vars->dropping = true;
463 vars->drop_next = now;
464 if (!vars->count)
465 vars->count = 1;
473 static bool cobalt_queue_empty(struct cobalt_vars *vars,
479 if (vars->p_drop &&
480 ktime_to_ns(ktime_sub(now, vars->blue_timer)) > p->target) {
481 if (vars->p_drop < p->p_dec)
482 vars->p_drop = 0;
484 vars->p_drop -= p->p_dec;
485 vars->blue_timer = now;
486 down = !vars->p_drop;
488 vars->dropping = false;
490 if (vars->count && ktime_to_ns(ktime_sub(now, vars->drop_next)) >= 0) {
491 vars->count--;
492 cobalt_invsqrt(vars);
493 vars->drop_next = cobalt_control(vars->drop_next,
495 vars->rec_inv_sqrt);
504 static bool cobalt_should_drop(struct cobalt_vars *vars,
530 schedule = ktime_sub(now, vars->drop_next);
534 next_due = vars->count && ktime_to_ns(schedule) >= 0;
536 vars->ecn_marked = false;
539 if (!vars->dropping) {
540 vars->dropping = true;
541 vars->drop_next = cobalt_control(now,
543 vars->rec_inv_sqrt);
545 if (!vars->count)
546 vars->count = 1;
547 } else if (vars->dropping) {
548 vars->dropping = false;
551 if (next_due && vars->dropping) {
553 drop = !(vars->ecn_marked = INET_ECN_set_ce(skb));
555 vars->count++;
556 if (!vars->count)
557 vars->count--;
558 cobalt_invsqrt(vars);
559 vars->drop_next = cobalt_control(vars->drop_next,
561 vars->rec_inv_sqrt);
562 schedule = ktime_sub(now, vars->drop_next);
565 vars->count--;
566 cobalt_invsqrt(vars);
567 vars->drop_next = cobalt_control(vars->drop_next,
569 vars->rec_inv_sqrt);
570 schedule = ktime_sub(now, vars->drop_next);
571 next_due = vars->count && ktime_to_ns(schedule) >= 0;
576 if (vars->p_drop)
577 drop |= (get_random_u32() < vars->p_drop);
580 if (!vars->count)
581 vars->drop_next = ktime_add_ns(now, p->interval);
583 vars->drop_next = now;