|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] tools/libxl new bitmap functions
On Thu, Apr 02, 2015 at 11:38:16AM -0600, Linda Jacobson wrote:
> From: Linda <lindaj@xxxxxxxx>
>
> Added bitmap functions for union intersection and difference betweenn two
> bitmaps
>
> Signed-off-by: Linda <lindaj@xxxxxxxx>
> ---
> tools/libxl/libxl_utils.c | 115
> ++++++++++++++++++++++++++++++++++++++++++++++
> tools/libxl/libxl_utils.h | 10 ++++
> 2 files changed, 125 insertions(+)
>
> diff --git a/tools/libxl/libxl_utils.c b/tools/libxl/libxl_utils.c
> index 9053b27..c390ddc 100644
> --- a/tools/libxl/libxl_utils.c
> +++ b/tools/libxl/libxl_utils.c
> @@ -699,6 +699,121 @@ int libxl_bitmap_count_set(const libxl_bitmap *bitmap)
>
> return nr_set_bits;
> }
> +int libxl_bitmap_union(libxl_ctx *ctx, libxl_bitmap *union_bitmap,
You have an extra space at the end..
> +libxl_bitmap *bitmap1, libxl_bitmap *bitmap2)
And this should really start at the same line length as 'libxl_ctx'
Ditto for the rest of the functions.
> +{
> + int size;
> + int rc;
> +
> + GC_INIT(ctx);
> +
> +// if bitmaps aren't the same size, union should be size of larger bit map
The comments are in:
/* Comment here. */
> + size = (bitmap1->size > bitmap2->size) ? bitmap1->size : bitmap2->size;
There might be an 'max' macro somwhere in the code that you could use
for this?
> +
> + libxl_bitmap_init(union_bitmap);
> + rc = libxl_bitmap_alloc(ctx, union_bitmap, size);
> + if (rc)
> + {
> + // Following the coding standards here.
> + //First goto I've written in decades.
Hehe.
No need to add the braces, you can just do:
if (rc)
goto out;
> + goto out;
> + }
> +
> + for (int bit = 0; bit < (size * 8); bit++)
Please move the 'int bit' to the start of the function.
> + {
> + // libxl_bitmap_test returns 0 if past end of bitmap
> + // if the bit is set in either bitmap, set it in their union
I would change that comment to be:
/* NB. libxl_bitmap_test returns 0 if past the end of bitmap. */
> + if (libxl_bitmap_test(bitmap1, bit))
> + {
> + libxl_bitmap_set(union_bitmap, bit);
> + }
> + else if (libxl_bitmap_test(bitmap2, bit))
> + {
> + libxl_bitmap_set(union_bitmap, bit);
> + }
You can ditch the braces.
> + }
> +
> +out:
> + GC_FREE;
> + return rc;
> +}
> +
> +int libxl_bitmap_intersection (libxl_ctx *ctx, libxl_bitmap
There is space : ^ - which should not be there.
> +*intersection_bitmap, libxl_bitmap *bitmap1, libxl_bitmap *bitmap2)
> +{
> + int size;
> + int rc;
> +
> + GC_INIT(ctx);
> +
> +// if bitmaps aren't same size, intersection should be size of
> +// smaller bit map
I believe the comments I've above apply to the code below as well.
> + size = (bitmap1->size > bitmap2->size) ? bitmap2->size : bitmap1->size;
> +
> + libxl_bitmap_init(intersection_bitmap);
> + rc = libxl_bitmap_alloc(ctx, intersection_bitmap, size);
> + if (rc)
> + {
> + goto out;
> + }
> +
> + for (int bit = 0; bit < (size * 8); bit++)
> + {
> + // libxl_bitmap_test returns 0 if past end of bitmap
> + // if the bit is set in both bitmaps, set it in their intersection
> + if (libxl_bitmap_test (bitmap1, bit) &&
> + libxl_bitmap_test (bitmap2, bit) )
You have an extra space at the end there. Don't think you need that
in libxl code (thought you do for libxc). Yeah, two different
styleguides!
> + {
> + libxl_bitmap_set (intersection_bitmap, bit);
> + }
> + }
> +
> +out:
> + GC_FREE;
> + return rc;
> +}
> +int libxl_bitmap_difference(libxl_ctx *ctx, libxl_bitmap *difference_bitmap,
> +libxl_bitmap *bitmap1, libxl_bitmap *bitmap2)
> +{
> + int size;
> + int rc;
> +
> + GC_INIT(ctx);
> +
> +// if bitmaps aren't the same size, difference should be size of larger
> + size = (bitmap1->size > bitmap2->size) ? bitmap1->size : bitmap2->size;
> +
> + libxl_bitmap_init(difference_bitmap);
> + rc = libxl_bitmap_alloc(ctx, difference_bitmap, size);
> + if (rc)
> + {
> + goto out;
> + }
> +
> + for (int bit = 0; bit < (size * 8); bit++)
> + {
> + /* libxl_bitmap_test returns 0 if past end of bitmap
> + if the bit is set in one bitmap and not the other, set it in
> +their difference
> + NOTE: if one bit map is larger, this will result in all bits
> +being set past the size of the smaller bitmap; if this is not
> + the desired behavior, please let me know
That would make this a bit strange. Perhaps demand that they
must be the same size? If they are not then just return an error?
> + */
> +
> + if (libxl_bitmap_test (bitmap1, bit)
You have an extra space at the end there. ^
> + && (!libxl_bitmap_test (bitmap2, bit)) )
> + {
> + libxl_bitmap_set (difference_bitmap, bit);
> + }
> + }
> +
> +out:
> + GC_FREE;
> + return rc;
> +}
> +
> +
> +
>
> /* NB. caller is responsible for freeing the memory */
> char *libxl_bitmap_to_hex_string(libxl_ctx *ctx, const libxl_bitmap *bitmap)
> diff --git a/tools/libxl/libxl_utils.h b/tools/libxl/libxl_utils.h
> index acacdd9..521e4bb 100644
> --- a/tools/libxl/libxl_utils.h
> +++ b/tools/libxl/libxl_utils.h
> @@ -91,6 +91,16 @@ void libxl_bitmap_set(libxl_bitmap *bitmap, int bit);
> void libxl_bitmap_reset(libxl_bitmap *bitmap, int bit);
> int libxl_bitmap_count_set(const libxl_bitmap *cpumap);
> char *libxl_bitmap_to_hex_string(libxl_ctx *ctx, const libxl_bitmap *cpumap);
> +/*
> + union, intersection and difference functions for
> + two bitmaps
> +*/
> +int libxl_bitmap_union(libxl_ctx *ctx, libxl_bitmap *new_bitmap,
> libxl_bitmap *bitmap1, libxl_bitmap *bitmap2);
> +
> +int libxl_bitmap_intersection(libxl_ctx *ctx, libxl_bitmap *new_bitmap,
> libxl_bitmap *bitmap1, libxl_bitmap *bitmap2);
> +
> +int libxl_bitmap_difference(libxl_ctx *ctx, libxl_bitmap *new_bitmap,
> libxl_bitmap *bitmap1, libxl_bitmap *bitmap2);
> +
> static inline void libxl_bitmap_set_any(libxl_bitmap *bitmap)
> {
> memset(bitmap->map, -1, bitmap->size);
> --
> 1.9.1
>
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxx
> http://lists.xen.org/xen-devel
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |