mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2026-01-04 23:24:56 +00:00
HV:treewide:Update return type of function ffs64 and ffz64
To reduce type conversion in HV:
Update return type of function ffs64 and ffz64 as uint16;
For ffs64, when the input is zero, INVALID_BIT_INDEX is returned;
Update temporary variable type and return value check of caller
when it call ffs64 or ffz64;
Note: In the allocate_mem, there is no return value checking for
calling ffz64, this will be updated latter.
V1-->V2:
INVALID_BIT_INDEX instead of INVALID_NUMBER
Coding style fixing;
INVALID_CPU_ID instead of INVALID_PCPU_ID or INVALID_VCPU_ID;
"%hu" is used to print vcpu id (uint16_t);
Add "U/UL" for constant value as needed.
V2-->V3:
ffs64 return INVALID_BIT_INDEX directly when
the input value is zero;
Remove excess "%hu" updates.
V3-->V4:
Clean up the comments of ffs64;
Add "U" for constant value as needed.
Signed-off-by: Xiangyang Wu <xiangyang.wu@intel.com>
Acked-by: Eddie Dong <eddie.dong@intel.com>
This commit is contained in:
@@ -91,10 +91,11 @@ static inline uint16_t fls64(uint64_t value)
|
||||
* and return the index of that bit.
|
||||
*
|
||||
* Bits are numbered starting at 0,the least significant bit.
|
||||
* A return value of -1 means that the argument was zero.
|
||||
* A return value of INVALID_BIT_INDEX means that the return value is the inalid
|
||||
* bit index when the input argument was zero.
|
||||
*
|
||||
* Examples:
|
||||
* ffs64 (0x0) = -1
|
||||
* ffs64 (0x0) = INVALID_BIT_INDEX
|
||||
* ffs64 (0x01) = 0
|
||||
* ffs64 (0xf0) = 4
|
||||
* ffs64 (0xf00) = 8
|
||||
@@ -104,20 +105,24 @@ static inline uint16_t fls64(uint64_t value)
|
||||
*
|
||||
* @param value: 'unsigned long' type value
|
||||
*
|
||||
* @return value: zero-based bit index, -1 means 'value' was zero.
|
||||
* @return value: zero-based bit index, INVALID_BIT_INDEX means
|
||||
* when 'value' was zero, bit operations function can't find bit
|
||||
* set and return the invalid bit index directly.
|
||||
*
|
||||
* **/
|
||||
static inline int ffs64(unsigned long value)
|
||||
static inline uint16_t ffs64(uint64_t value)
|
||||
{
|
||||
int ret;
|
||||
asm volatile("bsfq %1,%q0"
|
||||
uint64_t ret = 0UL;
|
||||
if (value == 0UL)
|
||||
return (INVALID_BIT_INDEX);
|
||||
asm volatile("bsfq %1,%0"
|
||||
: "=r" (ret)
|
||||
: "rm" (value), "0" (-1));
|
||||
return ret;
|
||||
: "rm" (value));
|
||||
return (uint16_t)ret;
|
||||
}
|
||||
|
||||
/*bit scan forward for the least significant bit '0'*/
|
||||
static inline int ffz64(unsigned long value)
|
||||
static inline uint16_t ffz64(uint64_t value)
|
||||
{
|
||||
return ffs64(~value);
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
#define __MEM_MGT_H__
|
||||
|
||||
/* Macros */
|
||||
#define BITMAP_WORD_SIZE 32
|
||||
#define BITMAP_WORD_SIZE 32U
|
||||
|
||||
struct mem_pool {
|
||||
void *start_addr; /* Start Address of Memory Pool */
|
||||
|
||||
Reference in New Issue
Block a user