|
@@ -455,7 +455,15 @@ static void __hrtick_start(void *arg)
|
|
|
void hrtick_start(struct rq *rq, u64 delay)
|
|
|
{
|
|
|
struct hrtimer *timer = &rq->hrtick_timer;
|
|
|
- ktime_t time = ktime_add_ns(timer->base->get_time(), delay);
|
|
|
+ ktime_t time;
|
|
|
+ s64 delta;
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Don't schedule slices shorter than 10000ns, that just
|
|
|
+ * doesn't make sense and can cause timer DoS.
|
|
|
+ */
|
|
|
+ delta = max_t(s64, delay, 10000LL);
|
|
|
+ time = ktime_add_ns(timer->base->get_time(), delta);
|
|
|
|
|
|
hrtimer_set_expires(timer, time);
|
|
|
|