[ovs-dev] [PATCH 1/2] bitmap: Don't allocate excessive memory.

Justin Pettit jpettit at nicira.com
Thu Sep 17 21:57:02 UTC 2009


Great catch.  Based on their names alone, I wouldn't know what one of  
these macros does versus the other.  Perhaps a comment would be useful  
in util.h?

--Justin


On Sep 17, 2009, at 2:46 PM, Ben Pfaff wrote:

> ROUND_UP rounds up to a multiple of a given value.  That means that
> bitmap_allocate() was allocating one byte for each bit in the bitmap,
> which is clearly excessive.
>
> Instead, just allocate one bit for every bit in the bitmap.
> ---
> lib/bitmap.h |    5 +++--
> lib/util.h   |    3 ++-
> 2 files changed, 5 insertions(+), 3 deletions(-)
>
> diff --git a/lib/bitmap.h b/lib/bitmap.h
> index 9c420eb..2042810 100644
> --- a/lib/bitmap.h
> +++ b/lib/bitmap.h
> @@ -1,5 +1,5 @@
> /*
> - * Copyright (c) 2008 Nicira Networks.
> + * Copyright (c) 2008, 2009 Nicira Networks.
>  *
>  * Licensed under the Apache License, Version 2.0 (the "License");
>  * you may not use this file except in compliance with the License.
> @@ -38,7 +38,8 @@ bitmap_bit__(size_t offset)
> static inline unsigned long *
> bitmap_allocate(size_t n_bits)
> {
> -    return xcalloc(1, ROUND_UP(n_bits, BITMAP_ULONG_BITS));
> +    size_t n_longs = DIV_ROUND_UP(n_bits, BITMAP_ULONG_BITS);
> +    return xcalloc(sizeof(unsigned long int), n_longs);
> }
>
> static inline void
> diff --git a/lib/util.h b/lib/util.h
> index a945eb2..dad7b7c 100644
> --- a/lib/util.h
> +++ b/lib/util.h
> @@ -53,7 +53,8 @@
> extern const char *program_name;
>
> #define ARRAY_SIZE(ARRAY) (sizeof ARRAY / sizeof *ARRAY)
> -#define ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y) * (Y))
> +#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
> +#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
> #define ROUND_DOWN(X, Y) ((X) / (Y) * (Y))
> #define IS_POW2(X) ((X) && !((X) & ((X) - 1)))
>
> -- 
> 1.6.3.3
>
>
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev_openvswitch.org





More information about the dev mailing list