From: Peter Dinda Date: Sat, 29 Dec 2012 00:47:39 +0000 (-0600) Subject: Use of information interface to enhance output of /proc/v3vee-/v3-guests in Linux X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=commitdiff_plain;h=8361c0d1e416802f476ebd26e385a388747a4799;p=palacios.releases.git Use of information interface to enhance output of /proc/v3vee-/v3-guests in Linux --- diff --git a/linux_module/main.c b/linux_module/main.c index 17229c5..6996bfa 100644 --- a/linux_module/main.c +++ b/linux_module/main.c @@ -224,22 +224,95 @@ struct proc_dir_entry *palacios_get_procdir(void) return dir; } + +#define MAX_VCORES 32 + static int read_guests(char * buf, char ** start, off_t off, int count, int * eof, void * data) { int len = 0; unsigned int i = 0; + + struct v3_vm_state *s =palacios_alloc(sizeof(struct v3_vm_state)+MAX_VCORES*sizeof(struct v3_vcore_state)); + + if (!s) { + ERROR("No space for state structure\n"); + goto out; + } for(i = 0; i < MAX_VMS; i++) { - if (guest_map[i] != NULL) { - if (lenname, i); + if (guest_map[i] != NULL) { + if (len>=count) { + goto out; + } else { + len += snprintf(buf+len, count-len, + "%s\t/dev/v3-vm%d ", + guest_map[i]->name, i); + + if (len>=count) { + *(buf+len-1)='\n'; + goto out; + } else { + // Get extended data + s->num_vcores=MAX_VCORES; // max we can handle + if (v3_get_state_vm(guest_map[i]->v3_ctx, s)) { + ERROR("Cannot get VM info\n"); + *(buf+len-1)='\n'; + goto out; + } else { + unsigned long j; + + len+=snprintf(buf+len, count-len, + "%s [0x%p-0x%p] %lu vcores ", + s->state==V3_VM_INVALID ? "INVALID" : + s->state==V3_VM_RUNNING ? "running" : + s->state==V3_VM_STOPPED ? "stopped" : + s->state==V3_VM_PAUSED ? "paused" : + s->state==V3_VM_ERROR ? "ERROR" : + s->state==V3_VM_SIMULATING ? "simulating" : "UNKNOWN", + s->mem_base_paddr, s->mem_base_paddr+s->mem_size-1, + s->num_vcores); + if (len>=count) { + *(buf+len-1)='\n'; + goto out; + } + for (j=0;jnum_vcores;j++) { + len+=snprintf(buf+len, count-len, + "[vcore %lu %s on pcore %lu %llu exits rip=0x%p %s %s %s] ", + j, + s->vcore[j].state==V3_VCORE_INVALID ? "INVALID" : + s->vcore[j].state==V3_VCORE_RUNNING ? "running" : + s->vcore[j].state==V3_VCORE_STOPPED ? "stopped" : "UNKNOWN", + s->vcore[j].pcore, + s->vcore[j].num_exits, + s->vcore[j].last_rip, + s->vcore[j].cpu_mode==V3_VCORE_CPU_REAL ? "real" : + s->vcore[j].cpu_mode==V3_VCORE_CPU_PROTECTED ? "protected" : + s->vcore[j].cpu_mode==V3_VCORE_CPU_PROTECTED_PAE ? "protectedpae" : + s->vcore[j].cpu_mode==V3_VCORE_CPU_LONG ? "long" : + s->vcore[j].cpu_mode==V3_VCORE_CPU_LONG_32_COMPAT ? "long32" : + s->vcore[j].cpu_mode==V3_VCORE_CPU_LONG_16_COMPAT ? "long16" : "UNKNOWN", + s->vcore[j].mem_mode==V3_VCORE_MEM_MODE_PHYSICAL ? "physical" : + s->vcore[j].mem_mode==V3_VCORE_MEM_MODE_VIRTUAL ? "virtual" : "UNKNOWN", + s->vcore[j].mem_state==V3_VCORE_MEM_STATE_SHADOW ? "shadow" : + s->vcore[j].mem_state==V3_VCORE_MEM_STATE_NESTED ? "nested" : "UNKNOWN"); + if (len>=count) { + *(buf+len-1)='\n'; + goto out; + } + } + + *(buf+len-1)='\n'; + } + } } + } } - + + out: + if (s) { palacios_free(s); } + return len; }