Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2266d888 authored by Guillaume Chazarain's avatar Guillaume Chazarain Committed by David S. Miller
Browse files

[PKT_SCHED]: Fix regression in PSCHED_TADD{,2}.



In PSCHED_TADD and PSCHED_TADD2, if delta is less than tv.tv_usec (so,
less than USEC_PER_SEC too) then tv_res will be smaller than tv. The
affectation "(tv_res).tv_usec = __delta;" is wrong.  The fix is to
revert to the original code before
4ee303df and change the 'if' in
'while'.

[Shuya MAEDA: "while (__delta >= USEC_PER_SEC){ ... }" instead of
"while (__delta > USEC_PER_SEC){ ... }"]

Signed-off-by: default avatarGuillaume Chazarain <guichaz@yahoo.fr>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 4b79f0af
Loading
Loading
Loading
Loading
+6 −12
Original line number Original line Diff line number Diff line
@@ -169,23 +169,17 @@ psched_tod_diff(int delta_sec, int bound)


#define PSCHED_TADD2(tv, delta, tv_res) \
#define PSCHED_TADD2(tv, delta, tv_res) \
({ \
({ \
	   int __delta = (delta); \
	   int __delta = (tv).tv_usec + (delta); \
	   (tv_res) = (tv); \
	   (tv_res).tv_sec = (tv).tv_sec; \
	   while(__delta >= USEC_PER_SEC){ \
	   while (__delta >= USEC_PER_SEC) { (tv_res).tv_sec++; __delta -= USEC_PER_SEC; } \
		 (tv_res).tv_sec++; \
		 __delta -= USEC_PER_SEC; \
	   } \
	   (tv_res).tv_usec = __delta; \
	   (tv_res).tv_usec = __delta; \
})
})


#define PSCHED_TADD(tv, delta) \
#define PSCHED_TADD(tv, delta) \
({ \
({ \
	   int __delta = (delta); \
	   (tv).tv_usec += (delta); \
	   while(__delta >= USEC_PER_SEC){ \
	   while ((tv).tv_usec >= USEC_PER_SEC) { (tv).tv_sec++; \
		 (tv).tv_sec++; \
		 (tv).tv_usec -= USEC_PER_SEC; } \
		 __delta -= USEC_PER_SEC; \
	   } \
	   (tv).tv_usec = __delta; \
})
})


/* Set/check that time is in the "past perfect";
/* Set/check that time is in the "past perfect";