Patchwork sch_generic: missing u64 in psched_ratecfg_precompute()?

login
register
mail settings
Submitter Sergey Popovich
Date March 27, 2013, 1 p.m.
Message ID <4306359.Sd6orIF4zo@tuxracer.localdomain>
Download mbox | patch
Permalink /patch/231678/
State Superseded
Delegated to: David Miller
Headers show

Comments

Sergey Popovich - March 27, 2013, 1 p.m.
Hello!

It seems that commit

  commit 292f1c7ff6cc10516076ceeea45ed11833bb71c7                                                                                             
  Author: Jiri Pirko <jiri@resnulli.us>                                                                                                       
  Date:   Tue Feb 12 00:12:03 2013 +0000                                                                                                      
                                                                                                                                            
      sch: make htb_rate_cfg and functions around that generic

adds little regression.

Before
----
# tc qdisc add dev eth0 root handle 1: htb default ffff
# tc class add dev eth0 classid 1:ffff htb rate 5Gbit
# tc -s class show dev eth0
class htb 1:ffff root prio 0 rate 5000Mbit ceil 5000Mbit burst 625b cburst 
625b 
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) 
 rate 0bit 0pps backlog 0b 0p requeues 0 
 lended: 0 borrowed: 0 giants: 0
 tokens: 31 ctokens: 31

After
----
# tc qdisc add dev eth0 root handle 1: htb default ffff
# tc class add dev eth0 classid 1:ffff htb rate 5Gbit
# tc -s class show dev eth0
class htb 1:ffff root prio 0 rate 1544Mbit ceil 1544Mbit burst 625b cburst 
625b
 Sent 5073 bytes 41 pkt (dropped 0, overlimits 0 requeues 0)
 rate 1976bit 2pps backlog 0b 0p requeues 0
 lended: 41 borrowed: 0 giants: 0
 tokens: 1802 ctokens: 1802

This probably due to lost u64 cast of rate parameter in 
psched_ratecfg_precompute() (net/sched/sch_generic.c).

Simple patch attached. Tested and found working for me at least
on amd64.
Eric Dumazet - March 27, 2013, 2:33 p.m.
On Wed, 2013-03-27 at 15:00 +0200, Sergey Popovich wrote:
> Hello!
> 
> It seems that commit
> 
>   commit 292f1c7ff6cc10516076ceeea45ed11833bb71c7                                                                                             
>   Author: Jiri Pirko <jiri@resnulli.us>                                                                                                       
>   Date:   Tue Feb 12 00:12:03 2013 +0000                                                                                                      
>                                                                                                                                             
>       sch: make htb_rate_cfg and functions around that generic
> 
> adds little regression.
> 
> Before
> ----
> # tc qdisc add dev eth0 root handle 1: htb default ffff
> # tc class add dev eth0 classid 1:ffff htb rate 5Gbit
> # tc -s class show dev eth0
> class htb 1:ffff root prio 0 rate 5000Mbit ceil 5000Mbit burst 625b cburst 
> 625b 
>  Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) 
>  rate 0bit 0pps backlog 0b 0p requeues 0 
>  lended: 0 borrowed: 0 giants: 0
>  tokens: 31 ctokens: 31
> 
> After
> ----
> # tc qdisc add dev eth0 root handle 1: htb default ffff
> # tc class add dev eth0 classid 1:ffff htb rate 5Gbit
> # tc -s class show dev eth0
> class htb 1:ffff root prio 0 rate 1544Mbit ceil 1544Mbit burst 625b cburst 
> 625b
>  Sent 5073 bytes 41 pkt (dropped 0, overlimits 0 requeues 0)
>  rate 1976bit 2pps backlog 0b 0p requeues 0
>  lended: 41 borrowed: 0 giants: 0
>  tokens: 1802 ctokens: 1802
> 
> This probably due to lost u64 cast of rate parameter in 
> psched_ratecfg_precompute() (net/sched/sch_generic.c).
> 
> Simple patch attached. Tested and found working for me at least
> on amd64.
> 

Good catch !

Could you send an official patch, with your "Signed-off-by: Sergey
Popovich <popovich_sergei@mail.ru>" ?

Thanks


--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Patch

diff -purN a/net/sched/sch_generic.c b/net/sched/sch_generic.c
--- a/net/sched/sch_generic.c	2013-03-27 14:52:27.419643015 +0200
+++ b/net/sched/sch_generic.c	2013-03-20 12:02:08.569366312 +0200
@@ -921,7 +921,7 @@  void psched_ratecfg_precompute(struct ps
 	u64 mult;
 	int shift;
 
-	r->rate_bps = rate << 3;
+	r->rate_bps = (u64)rate << 3;
 	r->shift = 0;
 	r->mult = 1;
 	/*