aboutsummaryrefslogtreecommitdiffstats
path: root/virt/kvm
diff options
context:
space:
mode:
authorSuraj Jitindar Singh <sjitindarsingh@gmail.com>2016-08-02 00:03:22 -0400
committerPaul Mackerras <paulus@ozlabs.org>2016-09-07 22:25:37 -0400
commit8a7e75d47b68193339f8727cf4503271d0a0b1d0 (patch)
tree717532f8b316f3169257a308c3652628799184bc /virt/kvm
parent0cda69dd7cd64fdd54bdf584b5d6ba53767ba422 (diff)
KVM: Add provisioning for ulong vm stats and u64 vcpu stats
vms and vcpus have statistics associated with them which can be viewed within the debugfs. Currently it is assumed within the vcpu_stat_get() and vm_stat_get() functions that all of these statistics are represented as u32s, however the next patch adds some u64 vcpu statistics. Change all vcpu statistics to u64 and modify vcpu_stat_get() accordingly. Since vcpu statistics are per vcpu, they will only be updated by a single vcpu at a time so this shouldn't present a problem on 32-bit machines which can't atomically increment 64-bit numbers. However vm statistics could potentially be updated by multiple vcpus from that vm at a time. To avoid the overhead of atomics make all vm statistics ulong such that they are 64-bit on 64-bit systems where they can be atomically incremented and are 32-bit on 32-bit systems which may not be able to atomically increment 64-bit numbers. Modify vm_stat_get() to expect ulongs. Signed-off-by: Suraj Jitindar Singh <sjitindarsingh@gmail.com> Reviewed-by: David Matlack <dmatlack@google.com> Acked-by: Christian Borntraeger <borntraeger@de.ibm.com> Signed-off-by: Paul Mackerras <paulus@ozlabs.org>
Diffstat (limited to 'virt/kvm')
-rw-r--r--virt/kvm/kvm_main.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
index 195078225aa5..4171ef326543 100644
--- a/virt/kvm/kvm_main.c
+++ b/virt/kvm/kvm_main.c
@@ -3619,7 +3619,7 @@ static int vm_stat_get_per_vm(void *data, u64 *val)
3619{ 3619{
3620 struct kvm_stat_data *stat_data = (struct kvm_stat_data *)data; 3620 struct kvm_stat_data *stat_data = (struct kvm_stat_data *)data;
3621 3621
3622 *val = *(u32 *)((void *)stat_data->kvm + stat_data->offset); 3622 *val = *(ulong *)((void *)stat_data->kvm + stat_data->offset);
3623 3623
3624 return 0; 3624 return 0;
3625} 3625}
@@ -3649,7 +3649,7 @@ static int vcpu_stat_get_per_vm(void *data, u64 *val)
3649 *val = 0; 3649 *val = 0;
3650 3650
3651 kvm_for_each_vcpu(i, vcpu, stat_data->kvm) 3651 kvm_for_each_vcpu(i, vcpu, stat_data->kvm)
3652 *val += *(u32 *)((void *)vcpu + stat_data->offset); 3652 *val += *(u64 *)((void *)vcpu + stat_data->offset);
3653 3653
3654 return 0; 3654 return 0;
3655} 3655}