> > #define DIV_ROUND_DOWN_ULL(ll, d) \ > ????({ unsigned long long _tmp = (ll); do_div(_tmp, d); _tmp; }) > > #define DIV_ROUND_UP_ULL(ll, d)??????? DIV_ROUND_DOWN_ULL((ll) + (d) - > 1, (d)) > > > It uses intermediate unsigned long long _tmp for your "multiply", namely > MSEC_PER_SEC * drto_clks * drto_div, which could solves the problem. > So I don't see why DIV_ROUND_UP_ULL can't work for you? Take back. I misunderstood your "multiply", sorry. > > >> ????? /* add a bit spare time */ >> > > >