Thread (8 messages) 8 messages, 6 authors, 2020-02-03

Re: [PATCH] mlxsw: spectrum_qdisc: Fix 64-bit division error in mlxsw_sp_qdisc_tbf_rate_kbps

From: Petr Machata <hidden>
Date: 2020-02-03 10:03:57
Also in: lkml

Nathan Chancellor [off-list ref] writes:
On Thu, Jan 30, 2020 at 05:43:56PM -0800, Randy Dunlap wrote:
quoted
On 1/30/20 3:26 PM, Nathan Chancellor wrote:
quoted
When building arm32 allmodconfig:

ERROR: "__aeabi_uldivmod"
[drivers/net/ethernet/mellanox/mlxsw/mlxsw_spectrum.ko] undefined!

rate_bytes_ps has type u64, we need to use a 64-bit division helper to
avoid a build error.

Fixes: a44f58c41bfb ("mlxsw: spectrum_qdisc: Support offloading of TBF Qdisc")
Signed-off-by: Nathan Chancellor <redacted>
---
 drivers/net/ethernet/mellanox/mlxsw/spectrum_qdisc.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_qdisc.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_qdisc.c
index 79a2801d59f6..65e681ef01e8 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_qdisc.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_qdisc.c
@@ -614,7 +614,7 @@ mlxsw_sp_qdisc_tbf_rate_kbps(struct tc_tbf_qopt_offload_replace_params *p)
 	/* TBF interface is in bytes/s, whereas Spectrum ASIC is configured in
 	 * Kbits/s.
 	 */
-	return p->rate.rate_bytes_ps / 1000 * 8;
+	return div_u64(p->rate.rate_bytes_ps, 1000 * 8);
not quite right AFAICT.

try either
	return div_u64(p->rate.rate_bytes_ps * 8, 1000);
or
	return div_u64(p->rate.rate_bytes_ps, 1000) * 8;
Gah, I swear I can math... Thank you for catching this, v2 incoming with
the later because I think it looks better.
Yes, that's the correct choice. Divide first, that way we can't
overflow.

Thanks for taking care of this.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help