Hi Santosh,

On 4/10/2017 4:58 PM, santosh wrote:
Hi David,


On Wednesday 04 October 2017 08:55 PM, David Hunt wrote:
Signed-off-by: Nemanja Marjanovic <nemanja.marjano...@intel.com>
Signed-off-by: Rory Sexton <rory.sex...@intel.com>
Signed-off-by: David Hunt <david.h...@intel.com>
---
  examples/vm_power_manager/channel_manager.c | 62 +++++++++++++++++++++++++++++
  examples/vm_power_manager/channel_manager.h | 25 ++++++++++++
  2 files changed, 87 insertions(+)

diff --git a/examples/vm_power_manager/channel_manager.c 
b/examples/vm_power_manager/channel_manager.c
index e068ae2..03fa626 100644
--- a/examples/vm_power_manager/channel_manager.c
+++ b/examples/vm_power_manager/channel_manager.c
@@ -574,6 +574,68 @@ set_channel_status(const char *vm_name, unsigned 
*channel_list,
        return num_channels_changed;
  }
+void
+get_all_vm(int *num_vm, int *num_cpu)
+{
nits:
s/*num_cpu/*num_vcpu

Sure. Makes it more readable.

+
+       virNodeInfo node_info;
+       virDomainPtr *domptr;
+       uint64_t mask;
+       int i, ii, numVcpus[MAX_VCPUS], cpu, n_vcpus;
+       unsigned int jj;
+       const char *vm_name;
+       unsigned int flags = VIR_CONNECT_LIST_DOMAINS_RUNNING |
+                               VIR_CONNECT_LIST_DOMAINS_PERSISTENT;
+       unsigned int flag = VIR_DOMAIN_VCPU_CONFIG;
+
nits:
Perhaps add more clear name example:
s/flags/conn_flags
s/flag/domain_flags

domain_flags sounds good to me.

+
+       memset(global_cpumaps, 0, CHANNEL_CMDS_MAX_CPUS*global_maplen);
+       if (virNodeGetInfo(global_vir_conn_ptr, &node_info))
+               RTE_LOG(ERR, CHANNEL_MANAGER, "Unable to retrieve node Info\n");
+
Should return from here.. since node info not retrieve ops errored out.

Sure.

+       /* Returns number of pcpus */
+       global_n_host_cpus = (unsigned int)node_info.cpus;
+
+       /* Returns number of active domains */
+       *num_vm = virConnectListAllDomains(global_vir_conn_ptr, &domptr, flags);
+       if (*num_vm <= 0)
+               RTE_LOG(ERR, CHANNEL_MANAGER, "No Active Domains Running\n");
+
ditto..

Sure.

+       for (i = 0; i < *num_vm; i++) {
+
+               /* Get Domain Names */
+               vm_name = virDomainGetName(domptr[i]);
+               lvm_info[i].vm_name = vm_name;
+
+               /* Get Number of Vcpus */
+               numVcpus[i] = virDomainGetVcpusFlags(domptr[i], flag);
+
+               /* Get Number of VCpus & VcpuPinInfo */
+               n_vcpus = virDomainGetVcpuPinInfo(domptr[i],
+                               numVcpus[i], global_cpumaps,
+                               global_maplen, flag);
+
+               if ((int)n_vcpus > 0) {
+                       *num_cpu = n_vcpus;
+                       lvm_info[i].num_cpus = n_vcpus;
+               }
+
+               /* Save pcpu in use by libvirt VMs */
+               for (ii = 0; ii < n_vcpus; ii++) {
+                       mask = 0;
+                       for (jj = 0; jj < global_n_host_cpus; jj++) {
+                               if (VIR_CPU_USABLE(global_cpumaps,
+                                               global_maplen, ii, jj) > 0) {
+                                       mask |= 1ULL << jj;
+                               }
+                       }
+                       ITERATIVE_BITMASK_CHECK_64(mask, cpu) {
+                               lvm_info[i].pcpus[ii] = cpu;
+                       }
+               }
+       }
+}
+
  int
  get_info_vm(const char *vm_name, struct vm_info *info)
  {
diff --git a/examples/vm_power_manager/channel_manager.h 
b/examples/vm_power_manager/channel_manager.h
index 47c3b9c..788c1e6 100644
--- a/examples/vm_power_manager/channel_manager.h
+++ b/examples/vm_power_manager/channel_manager.h
@@ -66,6 +66,17 @@ struct sockaddr_un _sockaddr_un;
  #define UNIX_PATH_MAX sizeof(_sockaddr_un.sun_path)
  #endif
+#define MAX_VMS 4
+#define MAX_VCPUS 20
+
+
+struct libvirt_vm_info {
+       const char *vm_name;
+       unsigned int pcpus[MAX_VCPUS];
+       uint8_t num_cpus;
+};
+
+struct libvirt_vm_info lvm_info[MAX_VMS];
  /* Communication Channel Status */
  enum channel_status { CHANNEL_MGR_CHANNEL_DISCONNECTED = 0,
        CHANNEL_MGR_CHANNEL_CONNECTED,
@@ -319,6 +330,20 @@ int set_channel_status(const char *vm_name, unsigned 
*channel_list,
   */
  int get_info_vm(const char *vm_name, struct vm_info *info);
+/**
+ * Populates a table with all domains running and their physical cpu.
+ * All information is gathered through libvirt api.
+ *
+ * @param noVms
+ *  modified to store number of active VMs
+ *
+ * @param noVcpus
+    modified to store number of vcpus active
+ *
+ * @return
+ *   void
+ */
+void get_all_vm(int *noVms, int *noVcpus);
nits: perhaps,
void
get_all_vm(int *num_vm, int *num_vcpu)
Thanks.

Agreed, what you suggest is a more common naming convention.

Thanks,
Dave.

  #ifdef __cplusplus
  }
  #endif

Reply via email to