diff options
author | Patrick Georgi <pgeorgi@chromium.org> | 2016-12-13 15:42:58 +0100 |
---|---|---|
committer | Patrick Georgi <pgeorgi@google.com> | 2016-12-14 15:58:15 +0100 |
commit | cf3b306cafdb76493ff605c5dd05bbd602293147 (patch) | |
tree | f454fdcc053701d37824af253e270e2b62764545 | |
parent | a1df15efc82a0ec03bd7353f5f51a2f288c01685 (diff) | |
download | coreboot-cf3b306cafdb76493ff605c5dd05bbd602293147.tar.xz |
vendorcode/amd: Fix non-terminating loop
Code is copied from agesa/common's amdlib.c.
Things can probably be deduplicated.
Change-Id: I9c8adab5db7e9fd41aecc522136dfa705c1e2ee6
Signed-off-by: Patrick Georgi <pgeorgi@chromium.org>
Found-by: Coverity Scan #1229662
Reviewed-on: https://review.coreboot.org/17834
Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net>
Reviewed-by: Martin Roth <martinroth@google.com>
Reviewed-by: Marshall Dawson <marshalldawson3rd@gmail.com>
Tested-by: build bot (Jenkins)
-rw-r--r-- | src/vendorcode/amd/pi/Lib/amdlib.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/src/vendorcode/amd/pi/Lib/amdlib.c b/src/vendorcode/amd/pi/Lib/amdlib.c index 4c8a56dba8..03ca207987 100644 --- a/src/vendorcode/amd/pi/Lib/amdlib.c +++ b/src/vendorcode/amd/pi/Lib/amdlib.c @@ -381,11 +381,17 @@ LibAmdBitScanReverse ( IN UINT32 value ) { - UINTN Index; - for (Index = 31; Index >= 0; Index--){ - if (value & (1 << Index)) break; - } - return (UINT8) Index; + uint8_t bit = 31; + do { + if (value & (1 << 31)) + return bit; + + value <<= 1; + bit--; + + } while (value != 0); + + return 0xFF; /* Error code indicating no bit found */ } AMDLIB_OPTIMIZE |