Message ID | 1609556386-19422-1-git-send-email-yilun.xu@intel.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | [v2] spi: fix the divide by 0 error when calculating xfer waiting time | expand |
On Sat, Jan 2, 2021 at 12:07 AM Xu Yilun <yilun.xu@intel.com> wrote: > > The xfer waiting time is the result of xfer->len / xfer->speed_hz. This > patch makes the assumption of 1khz xfer speed if the xfer->speed_hz is You missed to update the commit log to 100kHz.
On Sat, Jan 02, 2021 at 11:11:14AM -0300, Fabio Estevam wrote: > On Sat, Jan 2, 2021 at 12:07 AM Xu Yilun <yilun.xu@intel.com> wrote: > > > > The xfer waiting time is the result of xfer->len / xfer->speed_hz. This > > patch makes the assumption of 1khz xfer speed if the xfer->speed_hz is > > You missed to update the commit log to 100kHz. Thanks for the catching, I'll fix it. Yilun
diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c index 51d7c00..aacae88 100644 --- a/drivers/spi/spi.c +++ b/drivers/spi/spi.c @@ -1108,6 +1108,7 @@ static int spi_transfer_wait(struct spi_controller *ctlr, { struct spi_statistics *statm = &ctlr->statistics; struct spi_statistics *stats = &msg->spi->statistics; + u32 speed_hz = xfer->speed_hz; unsigned long long ms; if (spi_controller_is_slave(ctlr)) { @@ -1116,8 +1117,11 @@ static int spi_transfer_wait(struct spi_controller *ctlr, return -EINTR; } } else { + if (!speed_hz) + speed_hz = 100000; + ms = 8LL * 1000LL * xfer->len; - do_div(ms, xfer->speed_hz); + do_div(ms, speed_hz); ms += ms + 200; /* some tolerance */ if (ms > UINT_MAX)
The xfer waiting time is the result of xfer->len / xfer->speed_hz. This patch makes the assumption of 1khz xfer speed if the xfer->speed_hz is not assigned and stays 0. This avoids the divide by 0 issue and ensures a reasonable tolerant waiting time. Signed-off-by: Xu Yilun <yilun.xu@intel.com> --- v2: use the normal conditional statement instead of the ternery operator change the default xfer speed from 1khz to 100khz --- drivers/spi/spi.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)