diff options
| author | Xiang W <[email protected]> | 2021-09-15 14:50:52 +0800 |
|---|---|---|
| committer | Anup Patel <[email protected]> | 2021-09-22 13:26:23 +0530 |
| commit | 3477f08b08da6bfd904218fdb76b3db592dd7ebd (patch) | |
| tree | 2b2d0fe0b50f5ca8a4763fb88b434dcfd52d7c5e /lib | |
| parent | 395ff7eedec5e2b5b067e3725303a17352a07651 (diff) | |
lib: sbi: fix ctz bug
The original version of ctz will cause an endless loop, if the parameter
passed in is 0. This commit fixes this bug.
Signed-off-by: Xiang W <[email protected]>
Reviewed-by: Bin Meng <[email protected]>
Reviewed-by: Anup Patel <[email protected]>
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/sbi/riscv_asm.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/lib/sbi/riscv_asm.c b/lib/sbi/riscv_asm.c index 4c24a513..d7b9b2b2 100644 --- a/lib/sbi/riscv_asm.c +++ b/lib/sbi/riscv_asm.c @@ -213,6 +213,9 @@ static unsigned long ctz(unsigned long x) { unsigned long ret = 0; + if (x == 0) + return 8 * sizeof(x); + while (!(x & 1UL)) { ret++; x = x >> 1; |
