pktgen: Fix delay handling
After last pktgen changes, delay handling is wrong. pktgen actually sends packets at full line speed. Fix is to update pkt_dev->next_tx even if spin() returns early, so that next spin() calls have a chance to see a positive delay. Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
a00d2102ce
commit
417bc4b855
|
@ -2105,15 +2105,17 @@ static void pktgen_setup_inject(struct pktgen_dev *pkt_dev)
|
||||||
static void spin(struct pktgen_dev *pkt_dev, ktime_t spin_until)
|
static void spin(struct pktgen_dev *pkt_dev, ktime_t spin_until)
|
||||||
{
|
{
|
||||||
ktime_t start_time, end_time;
|
ktime_t start_time, end_time;
|
||||||
s32 remaining;
|
s64 remaining;
|
||||||
struct hrtimer_sleeper t;
|
struct hrtimer_sleeper t;
|
||||||
|
|
||||||
hrtimer_init_on_stack(&t.timer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS);
|
hrtimer_init_on_stack(&t.timer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS);
|
||||||
hrtimer_set_expires(&t.timer, spin_until);
|
hrtimer_set_expires(&t.timer, spin_until);
|
||||||
|
|
||||||
remaining = ktime_to_us(hrtimer_expires_remaining(&t.timer));
|
remaining = ktime_to_us(hrtimer_expires_remaining(&t.timer));
|
||||||
if (remaining <= 0)
|
if (remaining <= 0) {
|
||||||
|
pkt_dev->next_tx = ktime_add_ns(spin_until, pkt_dev->delay);
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
start_time = ktime_now();
|
start_time = ktime_now();
|
||||||
if (remaining < 100)
|
if (remaining < 100)
|
||||||
|
|
Reference in New Issue