Skip to content

Commit

Permalink
netem: use 64 bit divide by rate
Browse files Browse the repository at this point in the history
Since times are now expressed in nanosecond, need to now do
true 64 bit divide. Old code would truncate rate at 32 bits.
Rename function to better express current usage.

Signed-off-by: Stephen Hemminger <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
  • Loading branch information
shemminger authored and davem330 committed Nov 15, 2017
1 parent 6670e15 commit bce552f
Showing 1 changed file with 4 additions and 7 deletions.
11 changes: 4 additions & 7 deletions net/sched/sch_netem.c
Original file line number Diff line number Diff line change
Expand Up @@ -339,10 +339,8 @@ static s64 tabledist(s64 mu, s64 sigma,
return x / NETEM_DIST_SCALE + (sigma / NETEM_DIST_SCALE) * t + mu;
}

static u64 packet_len_2_sched_time(unsigned int len,
struct netem_sched_data *q)
static u64 packet_time_ns(u64 len, const struct netem_sched_data *q)
{
u64 offset;
len += q->packet_overhead;

if (q->cell_size) {
Expand All @@ -352,9 +350,8 @@ static u64 packet_len_2_sched_time(unsigned int len,
cells++;
len = cells * (q->cell_size + q->cell_overhead);
}
offset = (u64)len * NSEC_PER_SEC;
do_div(offset, q->rate);
return offset;

return div64_u64(len * NSEC_PER_SEC, q->rate);
}

static void tfifo_reset(struct Qdisc *sch)
Expand Down Expand Up @@ -556,7 +553,7 @@ static int netem_enqueue(struct sk_buff *skb, struct Qdisc *sch,
now = last->time_to_send;
}

delay += packet_len_2_sched_time(qdisc_pkt_len(skb), q);
delay += packet_time_ns(qdisc_pkt_len(skb), q);
}

cb->time_to_send = now + delay;
Expand Down

0 comments on commit bce552f

Please sign in to comment.