sch_tbf: use do_div() for 64-bit divide
authorYang Yingliang <yangyingliang@huawei.com>
Thu, 12 Dec 2013 02:57:22 +0000 (10:57 +0800)
committerDavid S. Miller <davem@davemloft.net>
Thu, 12 Dec 2013 03:53:26 +0000 (22:53 -0500)
It's doing a 64-bit divide which is not supported
on 32-bit architectures in psched_ns_t2l(). The
correct way to do this is to use do_div().

It's introduced by commit cc106e441a63
("net: sched: tbf: fix the calculation of max_size")

Reported-by: kbuild test robot <fengguang.wu@intel.com>
Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/sched/sch_tbf.c

index a44928c6ba24e3d21fde29d21ee966b4c8c5b660..887e672f9d7d4b185542957bcb7e10b7d8a70cec 100644 (file)
@@ -131,8 +131,10 @@ static u64 psched_ns_t2l(const struct psched_ratecfg *r,
 
        do_div(len, NSEC_PER_SEC);
 
-       if (unlikely(r->linklayer == TC_LINKLAYER_ATM))
-               len = (len / 53) * 48;
+       if (unlikely(r->linklayer == TC_LINKLAYER_ATM)) {
+               do_div(len, 53);
+               len = len * 48;
+       }
 
        if (len > r->overhead)
                len -= r->overhead;