Commit 41077c99 authored by Edward Cree's avatar Edward Cree Committed by David S. Miller

sfc: fix ef100 design-param checking

The handling of the RXQ/TXQ size granularity design-params had two
 problems: it had a 64-bit divide that didn't build on 32-bit platforms,
 and it could divide by zero if the NIC supplied 0 as the value of the
 design-param.  Fix both by checking for 0 and for a granularity bigger
 than our min-size; if the granularity <= EFX_MIN_DMAQ_SIZE then it fits
 in 32 bits, so we can cast it to u32 for the divide.
Reported-by: default avatarkernel test robot <lkp@intel.com>
Signed-off-by: default avatarEdward Cree <ecree@solarflare.com>
Reviewed-by: default avatarGuenter Roeck <linux@roeck-us.net>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 633f5b6b
...@@ -979,7 +979,8 @@ static int ef100_process_design_param(struct efx_nic *efx, ...@@ -979,7 +979,8 @@ static int ef100_process_design_param(struct efx_nic *efx,
* EFX_MIN_DMAQ_SIZE is divisible by GRANULARITY. * EFX_MIN_DMAQ_SIZE is divisible by GRANULARITY.
* This is very unlikely to fail. * This is very unlikely to fail.
*/ */
if (EFX_MIN_DMAQ_SIZE % reader->value) { if (!reader->value || reader->value > EFX_MIN_DMAQ_SIZE ||
EFX_MIN_DMAQ_SIZE % (u32)reader->value) {
netif_err(efx, probe, efx->net_dev, netif_err(efx, probe, efx->net_dev,
"%s size granularity is %llu, can't guarantee safety\n", "%s size granularity is %llu, can't guarantee safety\n",
reader->type == ESE_EF100_DP_GZ_RXQ_SIZE_GRANULARITY ? "RXQ" : "TXQ", reader->type == ESE_EF100_DP_GZ_RXQ_SIZE_GRANULARITY ? "RXQ" : "TXQ",
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment