From ba44417d96b5cf5cfdd19b4811c3630691b53f77 Mon Sep 17 00:00:00 2001 From: Huihuang Shi Date: Thu, 29 Nov 2018 11:09:40 +0800 Subject: [PATCH] hv: lib: fix "Procedure has more than one exit point" IEC 61508,ISO 26262 standards highly recommend single-exit rule. Reduce the count of the "return entries". Fix the violations which is comply with the cases list below: 1.Function has 2 return entries. 2.The first return entry is used to return the error code of checking variable whether is valid. Fix the violations in "if else" format. Tracked-On: #861 Signed-off-by: Huihuang Shi Acked-by: Eddie Dong --- hypervisor/include/lib/bits.h | 7 ++++--- hypervisor/lib/memory.c | 34 ++++++++++++++++++---------------- 2 files changed, 22 insertions(+), 19 deletions(-) diff --git a/hypervisor/include/lib/bits.h b/hypervisor/include/lib/bits.h index 7d8e42673..38bc4e524 100644 --- a/hypervisor/include/lib/bits.h +++ b/hypervisor/include/lib/bits.h @@ -78,11 +78,12 @@ static inline uint16_t fls64(uint64_t value) { uint64_t ret = 0UL; if (value == 0UL) { - return (INVALID_BIT_INDEX); - } - asm volatile("bsrq %1,%0" + ret = (INVALID_BIT_INDEX); + } else { + asm volatile("bsrq %1,%0" : "=r" (ret) : "rm" (value)); + } return (uint16_t)ret; } diff --git a/hypervisor/lib/memory.c b/hypervisor/lib/memory.c index 81bf87a58..0232c84ed 100644 --- a/hypervisor/lib/memory.c +++ b/hypervisor/lib/memory.c @@ -372,26 +372,28 @@ void *memset(void *base, uint8_t v, size_t n) uint8_t *dest_p; size_t n_q; size_t count; + void *ret; dest_p = (uint8_t *)base; if ((dest_p == NULL) || (n == 0U)) { - return NULL; - } + ret = NULL; + } else { + /* do the few bytes to get uint64_t alignment */ + count = n; + for (; (count != 0U) && (((uint64_t)dest_p & 7UL) != 0UL); count--) { + *dest_p = v; + dest_p++; + } - /* do the few bytes to get uint64_t alignment */ - count = n; - for (; (count != 0U) && (((uint64_t)dest_p & 7UL) != 0UL); count--) { - *dest_p = v; - dest_p++; - } + /* 64-bit mode */ + n_q = count >> 3U; + asm volatile("cld ; rep ; stosq ; movl %3,%%ecx ; rep ; stosb" + : "+c"(n_q), "+D"(dest_p) + : "a" (v * 0x0101010101010101U), + "r"((unsigned int)count & 7U)); + ret = (void *)dest_p; + } - /* 64-bit mode */ - n_q = count >> 3U; - asm volatile("cld ; rep ; stosq ; movl %3,%%ecx ; rep ; stosb" - : "+c"(n_q), "+D"(dest_p) - : "a" (v * 0x0101010101010101U), - "r"((unsigned int)count & 7U)); - - return (void *)dest_p; + return ret; }