/* The result is a convex window growth curve.  */
static u32 alpha(struct illinois *ca, u32 da, u32 dm)
/* The result is a convex window growth curve.  */
static u32 alpha(struct illinois *ca, u32 da, u32 dm)
{
	u32 d1 = dm / 100;
	if (da <= d1) {
		if (!ca->rtt_above)
			return ALPHA_MAX;
		if (++ca->rtt_low < theta)
			return ca->alpha;
		ca->rtt_low = 0;
		ca->rtt_above = 0;
		return ALPHA_MAX;
	}
	ca->rtt_above = 1;
	dm -= d1;
	da -= d1;
	return (dm * ALPHA_MAX) /
		(dm + (da  * (ALPHA_MAX - ALPHA_MIN)) / ALPHA_MIN);
}