diff options
Diffstat (limited to 'kernel/timer.c')
| -rw-r--r-- | kernel/timer.c | 10 | 
1 files changed, 6 insertions, 4 deletions
diff --git a/kernel/timer.c b/kernel/timer.c index d5de1b2292a..367d0085848 100644 --- a/kernel/timer.c +++ b/kernel/timer.c @@ -63,6 +63,7 @@ EXPORT_SYMBOL(jiffies_64);  #define TVR_SIZE (1 << TVR_BITS)  #define TVN_MASK (TVN_SIZE - 1)  #define TVR_MASK (TVR_SIZE - 1) +#define MAX_TVAL ((unsigned long)((1ULL << (TVR_BITS + 4*TVN_BITS)) - 1))  struct tvec {  	struct list_head vec[TVN_SIZE]; @@ -359,11 +360,12 @@ __internal_add_timer(struct tvec_base *base, struct timer_list *timer)  		vec = base->tv1.vec + (base->timer_jiffies & TVR_MASK);  	} else {  		int i; -		/* If the timeout is larger than 0xffffffff on 64-bit -		 * architectures then we use the maximum timeout: +		/* If the timeout is larger than MAX_TVAL (on 64-bit +		 * architectures or with CONFIG_BASE_SMALL=1) then we +		 * use the maximum timeout.  		 */ -		if (idx > 0xffffffffUL) { -			idx = 0xffffffffUL; +		if (idx > MAX_TVAL) { +			idx = MAX_TVAL;  			expires = idx + base->timer_jiffies;  		}  		i = (expires >> (TVR_BITS + 3 * TVN_BITS)) & TVN_MASK;  |