diff options
Diffstat (limited to 'kernel/timer.c')
| -rw-r--r-- | kernel/timer.c | 9 |
1 files changed, 3 insertions, 6 deletions
diff --git a/kernel/timer.c b/kernel/timer.c index f22f8ae13..f5bdb1b50 100644 --- a/kernel/timer.c +++ b/kernel/timer.c @@ -805,9 +805,7 @@ EXPORT_SYMBOL(mod_timer_pending); * Algorithm: * 1) calculate the maximum (absolute) time * 2) calculate the highest bit where the expires and new max are different - * 3) use this bit to make a mask - * 4) use the bitmask to round down the maximum time, so that all last - * bits are zeros + * 3) round down the maximum time, so that all the lower bits are zeros */ static inline unsigned long apply_slack(struct timer_list *timer, unsigned long expires) @@ -831,9 +829,8 @@ unsigned long apply_slack(struct timer_list *timer, unsigned long expires) bit = find_last_bit(&mask, BITS_PER_LONG); - mask = (1UL << bit) - 1; - - expires_limit = expires_limit & ~(mask); + /* Round down by zero-ing the lower bits */ + expires_limit = (expires_limit >> bit) << bit; return expires_limit; } |
