How about
remaining_jiffies = msecs_to_jiffies(ktime_ms_delta(*timeout, now));
which only does one 64-bit division, and it's one that we can probably optimize out in the future (we can check in ktime_ms_delta whether the difference is more than 2^32 nanoseconds as the fast path).
Hi Arnd, I had thought about that, but discard that approach being confused about the truncation. ktime_ms_delta returns s64 and msecs_to_jiffies will truncate that input to int. However, I now realize that for the msecs value to be greater than 32 bits, the time delta has to be
= ((2^29)/(60*60*24*365)) or >= 17 years. So your solution is safe.
If that sounds ok, I will send out a v3.