net_sched: add qdisc_watchdog_schedule_range_ns()
Some packet schedulers might want to add a slack when programming hrtimers. This can reduce number of interrupts and increase batch sizes and thus give good xmit_more savings. This commit adds qdisc_watchdog_schedule_range_ns() helper, with an extra delta_ns parameter. Legacy qdisc_watchdog_schedule_n() becomes an inline passing a zero slack. Signed-off-by: Eric Dumazet <edumazet@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
24ee86511b
Коммит
efe074c2cc
|
@ -75,7 +75,15 @@ struct qdisc_watchdog {
|
||||||
void qdisc_watchdog_init_clockid(struct qdisc_watchdog *wd, struct Qdisc *qdisc,
|
void qdisc_watchdog_init_clockid(struct qdisc_watchdog *wd, struct Qdisc *qdisc,
|
||||||
clockid_t clockid);
|
clockid_t clockid);
|
||||||
void qdisc_watchdog_init(struct qdisc_watchdog *wd, struct Qdisc *qdisc);
|
void qdisc_watchdog_init(struct qdisc_watchdog *wd, struct Qdisc *qdisc);
|
||||||
void qdisc_watchdog_schedule_ns(struct qdisc_watchdog *wd, u64 expires);
|
|
||||||
|
void qdisc_watchdog_schedule_range_ns(struct qdisc_watchdog *wd, u64 expires,
|
||||||
|
u64 delta_ns);
|
||||||
|
|
||||||
|
static inline void qdisc_watchdog_schedule_ns(struct qdisc_watchdog *wd,
|
||||||
|
u64 expires)
|
||||||
|
{
|
||||||
|
return qdisc_watchdog_schedule_range_ns(wd, expires, 0ULL);
|
||||||
|
}
|
||||||
|
|
||||||
static inline void qdisc_watchdog_schedule(struct qdisc_watchdog *wd,
|
static inline void qdisc_watchdog_schedule(struct qdisc_watchdog *wd,
|
||||||
psched_time_t expires)
|
psched_time_t expires)
|
||||||
|
|
|
@ -618,7 +618,8 @@ void qdisc_watchdog_init(struct qdisc_watchdog *wd, struct Qdisc *qdisc)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(qdisc_watchdog_init);
|
EXPORT_SYMBOL(qdisc_watchdog_init);
|
||||||
|
|
||||||
void qdisc_watchdog_schedule_ns(struct qdisc_watchdog *wd, u64 expires)
|
void qdisc_watchdog_schedule_range_ns(struct qdisc_watchdog *wd, u64 expires,
|
||||||
|
u64 delta_ns)
|
||||||
{
|
{
|
||||||
if (test_bit(__QDISC_STATE_DEACTIVATED,
|
if (test_bit(__QDISC_STATE_DEACTIVATED,
|
||||||
&qdisc_root_sleeping(wd->qdisc)->state))
|
&qdisc_root_sleeping(wd->qdisc)->state))
|
||||||
|
@ -628,11 +629,12 @@ void qdisc_watchdog_schedule_ns(struct qdisc_watchdog *wd, u64 expires)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
wd->last_expires = expires;
|
wd->last_expires = expires;
|
||||||
hrtimer_start(&wd->timer,
|
hrtimer_start_range_ns(&wd->timer,
|
||||||
ns_to_ktime(expires),
|
ns_to_ktime(expires),
|
||||||
HRTIMER_MODE_ABS_PINNED);
|
delta_ns,
|
||||||
|
HRTIMER_MODE_ABS_PINNED);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(qdisc_watchdog_schedule_ns);
|
EXPORT_SYMBOL(qdisc_watchdog_schedule_range_ns);
|
||||||
|
|
||||||
void qdisc_watchdog_cancel(struct qdisc_watchdog *wd)
|
void qdisc_watchdog_cancel(struct qdisc_watchdog *wd)
|
||||||
{
|
{
|
||||||
|
|
Загрузка…
Ссылка в новой задаче