[libvirt] [PATCH v3] nodeinfo: fix to parse present cpus rather than possible cpus

John Ferlan jferlan at redhat.com
Mon Jul 13 20:12:33 UTC 2015



On 06/26/2015 06:27 PM, Kothapally Madhu Pavan wrote:
> Currently we are parsing all the possible cpus to get the
> nodeinfo. This fix will perform a check for present cpus
> before parsing.
> 
> Signed-off-by: Kothapally Madhu Pavan <kmp at linux.vnet.ibm.com>
> 
> 
> ---
>  src/nodeinfo.c |   11 +++++++++++
>  1 file changed, 11 insertions(+)
> 

So along with a test that Andrea Bologani generated :

http://www.redhat.com/archives/libvir-list/2015-July/msg00517.html

and the sysfs_path adjustments I made:

http://www.redhat.com/archives/libvir-list/2015-July/msg00278.html

This is now pushed.

Thanks,

John
> diff --git a/src/nodeinfo.c b/src/nodeinfo.c
> index 2fafe2d..5689c9b 100644
> --- a/src/nodeinfo.c
> +++ b/src/nodeinfo.c
> @@ -43,6 +43,7 @@
>  #include "c-ctype.h"
>  #include "viralloc.h"
>  #include "nodeinfopriv.h"
> +#include "nodeinfo.h"
>  #include "physmem.h"
>  #include "virerror.h"
>  #include "count-one-bits.h"
> @@ -418,6 +419,7 @@ virNodeParseNode(const char *node,
>      int processors = 0;
>      DIR *cpudir = NULL;
>      struct dirent *cpudirent = NULL;
> +    virBitmapPtr present_cpumap = NULL;
>      int sock_max = 0;
>      cpu_set_t sock_map;
>      int sock;
> @@ -438,12 +440,17 @@ virNodeParseNode(const char *node,
>          goto cleanup;
>      }
>  
> +    present_cpumap = nodeGetPresentCPUBitmap();
> +
>      /* enumerate sockets in the node */
>      CPU_ZERO(&sock_map);
>      while ((direrr = virDirRead(cpudir, &cpudirent, node)) > 0) {
>          if (sscanf(cpudirent->d_name, "cpu%u", &cpu) != 1)
>              continue;
>  
> +        if (present_cpumap && !(virBitmapIsSet(present_cpumap, cpu)))
> +            continue;
> +
>          if ((online = virNodeGetCpuValue(node, cpu, "online", 1)) < 0)
>              goto cleanup;
>  
> @@ -477,6 +484,9 @@ virNodeParseNode(const char *node,
>          if (sscanf(cpudirent->d_name, "cpu%u", &cpu) != 1)
>              continue;
>  
> +        if (present_cpumap && !(virBitmapIsSet(present_cpumap, cpu)))
> +            continue;
> +
>          if ((online = virNodeGetCpuValue(node, cpu, "online", 1)) < 0)
>              goto cleanup;
>  
> @@ -537,6 +547,7 @@ virNodeParseNode(const char *node,
>          ret = -1;
>      }
>      VIR_FREE(core_maps);
> +    virBitmapFree(present_cpumap);
>  
>      return ret;
>  }
> 
> --
> libvir-list mailing list
> libvir-list at redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list
> 




More information about the libvir-list mailing list