[libvirt] [PATCH v3 1/6] internal: add macro to round value to the next closest power of 2

Peter Krempa pkrempa at redhat.com
Mon Nov 24 10:30:25 UTC 2014


On 11/20/14 20:21, Pavel Hrdina wrote:
> There are two special cases, if the input number is 0 or the number is
> larger then 2^31 (for 32bit unsigned int). For the special cases the
> return value is 0 because they cannot be rounded.
> 
> Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1076098
> 
> Signed-off-by: Pavel Hrdina <phrdina at redhat.com>
> ---
>  bootstrap.conf   |  1 +
>  src/internal.h   |  7 +++++++
>  tests/utiltest.c | 39 +++++++++++++++++++++++++++++++++++++++
>  3 files changed, 47 insertions(+)
> 
> diff --git a/bootstrap.conf b/bootstrap.conf
> index d24a714..e7ea9c9 100644
> --- a/bootstrap.conf
> +++ b/bootstrap.conf
> @@ -35,6 +35,7 @@ clock-time
>  close
>  connect
>  configmake
> +count-leading-zeros
>  count-one-bits
>  crypto/md5
>  crypto/sha256
> diff --git a/src/internal.h b/src/internal.h
> index f6a88b2..765b853 100644
> --- a/src/internal.h
> +++ b/src/internal.h
> @@ -62,6 +62,7 @@
>  
>  # include "c-strcase.h"
>  # include "ignore-value.h"
> +# include "count-leading-zeros.h"
>  
>  /* On architectures which lack these limits, define them (ie. Cygwin).
>   * Note that the libvirt code should be robust enough to handle the
> @@ -382,6 +383,12 @@
>  /* round up value to the closest multiple of size */
>  # define VIR_ROUND_UP(value, size) (VIR_DIV_UP(value, size) * (size))
>  
> +/* Round up to the next closest power of 2. It will return rounded number or 0
> + * for 0 or number more than 2^31 (for 32bit unsigned int). */
> +# define VIR_ROUND_UP_POWER_OF_TWO(value)                                   \
> +    ((value) > 0 && (value) <= 1U<<(sizeof(unsigned int)*8 - 1) ?           \
> +     1U<<(sizeof(unsigned int)*8 - count_leading_zeros((value) - 1)) : 0)

You should add spaces around the multiplication and shift operators to
comply with our coding style.

ACK with that changed.

Peter


-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20141124/d30d280d/attachment-0001.sig>


More information about the libvir-list mailing list