]> xenbits.xensource.com Git - libvirt.git/commitdiff
util: bitmap: Use VIR_SHRINK_N in virBitmapShrink
authorPeter Krempa <pkrempa@redhat.com>
Mon, 5 Feb 2018 12:50:44 +0000 (13:50 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Mon, 5 Feb 2018 15:08:57 +0000 (16:08 +0100)
The function only reduces the size of the bitmap thus we can use the
appropriate shrinking function which also does not have any return
value.

Since virBitmapShrink now does not return any value callers need to be
fixed as well.

src/conf/domain_conf.c
src/util/virbitmap.c
src/util/virbitmap.h
src/util/virresctrl.c
tests/virbitmaptest.c

index e827b2a810f7ba0619591e59a3ddfccca4055862..34aae82f1597c32ee10ff91a0ff4bc0bb5c0ddca 100644 (file)
@@ -18453,8 +18453,7 @@ virDomainCachetuneDefParse(virDomainDefPtr def,
 
     /* We need to limit the bitmap to number of vCPUs.  If there's nothing left,
      * then we can just clean up and return 0 immediately */
-    if (virBitmapShrink(vcpus, def->maxvcpus) < 0)
-        goto cleanup;
+    virBitmapShrink(vcpus, def->maxvcpus);
 
     if (virBitmapIsAllClear(vcpus)) {
         ret = 0;
index d1e5a9d1eacfd298a370dbd9bf8a02d037ee3a90..82b1f76427b6d2a62288fbb601af8e332f0b4a4b 100644 (file)
@@ -1292,15 +1292,16 @@ virBitmapSubtract(virBitmapPtr a,
  * Reduces the bitmap to size @b.  Nothing will change if the size is already
  * smaller than or equal to @b.
  */
-int
+void
 virBitmapShrink(virBitmapPtr map,
                 size_t b)
 {
+    size_t toremove;
     size_t nl = 0;
     size_t nb = 0;
 
     if (!map)
-        return 0;
+        return;
 
     if (map->nbits >= b)
         map->nbits = b;
@@ -1309,14 +1310,13 @@ virBitmapShrink(virBitmapPtr map,
     nb = map->nbits % VIR_BITMAP_BITS_PER_UNIT;
     map->map[nl] &= ((1UL << nb) - 1);
 
-    nl++;
-    if (nl == map->map_len)
-        return 0;
+    toremove = map->map_alloc - (nl + 1);
 
-    if (VIR_REALLOC_N(map->map, nl) < 0)
-        return -1;
+    if (toremove == 0)
+        return;
 
-    map->map_len = nl;
-    map->map_alloc = nl;
-    return 0;
+    VIR_SHRINK_N(map->map, map->map_alloc, toremove);
+
+    /* length needs to be fixed as well */
+    map->map_len = map->map_alloc;
 }
index 5a3362a19f9f8acb599a727c015c509e1c6c973d..2464814055de9d74edc7b834a7817d5ae5d3901a 100644 (file)
@@ -153,6 +153,6 @@ void virBitmapIntersect(virBitmapPtr a, virBitmapPtr b)
 void virBitmapSubtract(virBitmapPtr a, virBitmapPtr b)
     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
 
-int virBitmapShrink(virBitmapPtr map, size_t b);
+void virBitmapShrink(virBitmapPtr map, size_t b);
 
 #endif
index 6860e86e649d493b17e1f117b1469b2f2746d9c8..9639e004681aae1729e206e38e2a718cae58a857 100644 (file)
@@ -952,8 +952,7 @@ virResctrlAllocParseProcessCache(virResctrlInfoPtr resctrl,
         goto cleanup;
     }
 
-    if (virBitmapShrink(mask, resctrl->levels[level]->types[type]->bits) < 0)
-        goto cleanup;
+    virBitmapShrink(mask, resctrl->levels[level]->types[type]->bits);
 
     if (virResctrlAllocUpdateMask(alloc, level, type, cache_id, mask) < 0)
         goto cleanup;
index fffecdf1f6edbdfd6237e459e095ce185e6e82cf..2fbafc0a76321c447b7a3f3f79004b8b91dfb314 100644 (file)
@@ -656,12 +656,10 @@ test12(const void *opaque ATTRIBUTE_UNUSED)
 
     TEST_MAP(1024, "34,1023");
 
-    if (virBitmapShrink(map, 35) < 0)
-        goto cleanup;
+    virBitmapShrink(map, 35);
     TEST_MAP(35, "34");
 
-    if (virBitmapShrink(map, 34) < 0)
-        goto cleanup;
+    virBitmapShrink(map, 34);
     TEST_MAP(34, "");
 
     ret = 0;