You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by xi...@apache.org on 2022/12/01 11:33:45 UTC

[nuttx] branch master updated: arch: risc-v: Fix nsec overflow in riscv_mtimer_current()

This is an automated email from the ASF dual-hosted git repository.

xiaoxiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git


The following commit(s) were added to refs/heads/master by this push:
     new 3b2685409a arch: risc-v: Fix nsec overflow in riscv_mtimer_current()
3b2685409a is described below

commit 3b2685409aec0a91e1e6264257dffb4645ac17fd
Author: Masayuki Ishikawa <ma...@gmail.com>
AuthorDate: Thu Dec 1 13:46:44 2022 +0900

    arch: risc-v: Fix nsec overflow in riscv_mtimer_current()
    
    Summary:
    - I noticed that mtimer stops around 30min after boot.
    - Finally, I found that nesc overflows in riscv_mtimer_current().
    - This commit fixes this issue.
    
    Impact:
    - None
    
    Testing:
    - Tested with rv-virt:nsh on QEMU-7.1
    
    Signed-off-by: Masayuki Ishikawa <Ma...@jp.sony.com>
---
 arch/risc-v/src/common/riscv_mtimer.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/risc-v/src/common/riscv_mtimer.c b/arch/risc-v/src/common/riscv_mtimer.c
index ff0c167364..dff7998d75 100644
--- a/arch/risc-v/src/common/riscv_mtimer.c
+++ b/arch/risc-v/src/common/riscv_mtimer.c
@@ -290,7 +290,7 @@ static int riscv_mtimer_current(struct oneshot_lowerhalf_s *lower,
   struct riscv_mtimer_lowerhalf_s *priv =
     (struct riscv_mtimer_lowerhalf_s *)lower;
   uint64_t mtime = riscv_mtimer_get_mtime(priv);
-  uint64_t nsec = mtime * NSEC_PER_SEC / priv->freq;
+  uint64_t nsec = mtime / (priv->freq / USEC_PER_SEC) * NSEC_PER_USEC;
 
   ts->tv_sec  = nsec / NSEC_PER_SEC;
   ts->tv_nsec = nsec % NSEC_PER_SEC;