if (unlikely(!lw->inv_weight))
lw->inv_weight = (WMULT_CONST-lw->weight/2) / (lw->weight+1);
Q1) This code is hit often in scenarios I run, is this really unlikely for others?
I think it became a lot more likely recently, perhaps removing that
unlikely is not such a bad idea.
Q2) The rest of the code in sched.c seems to make inv_weight == WMULT_CONST/weight and I was wondering if you could explain why this instance is different.
because the rest of the code is wrong, there are only 2 other sites, and
I have a patch that removes those div64_64() with =0;
The idea is to use rounding division: (x + y/2) / y
but we can't because 'x' is touching the limits of our modulo space,
hence we do: (x - y/2) / y
which comes in 1 short, that fixup has been lost along the way.