diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2016-10-06 10:49:01 -0700 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2016-10-06 10:49:01 -0700 | 
| commit | 6218590bcb452c3da7517d02b588d4d0a8628f73 (patch) | |
| tree | 8b6a285052ac999e0e36e04f0c1e6bbfb46e84c4 /arch/x86/kvm/debugfs.c | |
| parent | 14986a34e1289424811443a524cdd9e1688c7913 (diff) | |
| parent | d9ab710b85310e4ba9295f2b494eda54cf1a355a (diff) | |
Merge tag 'kvm-4.9-1' of git://git.kernel.org/pub/scm/virt/kvm/kvm
Pull KVM updates from Radim Krčmář:
 "All architectures:
   - move `make kvmconfig` stubs from x86
   - use 64 bits for debugfs stats
  ARM:
   - Important fixes for not using an in-kernel irqchip
   - handle SError exceptions and present them to guests if appropriate
   - proxying of GICV access at EL2 if guest mappings are unsafe
   - GICv3 on AArch32 on ARMv8
   - preparations for GICv3 save/restore, including ABI docs
   - cleanups and a bit of optimizations
  MIPS:
   - A couple of fixes in preparation for supporting MIPS EVA host
     kernels
   - MIPS SMP host & TLB invalidation fixes
  PPC:
   - Fix the bug which caused guests to falsely report lockups
   - other minor fixes
   - a small optimization
  s390:
   - Lazy enablement of runtime instrumentation
   - up to 255 CPUs for nested guests
   - rework of machine check deliver
   - cleanups and fixes
  x86:
   - IOMMU part of AMD's AVIC for vmexit-less interrupt delivery
   - Hyper-V TSC page
   - per-vcpu tsc_offset in debugfs
   - accelerated INS/OUTS in nVMX
   - cleanups and fixes"
* tag 'kvm-4.9-1' of git://git.kernel.org/pub/scm/virt/kvm/kvm: (140 commits)
  KVM: MIPS: Drop dubious EntryHi optimisation
  KVM: MIPS: Invalidate TLB by regenerating ASIDs
  KVM: MIPS: Split kernel/user ASID regeneration
  KVM: MIPS: Drop other CPU ASIDs on guest MMU changes
  KVM: arm/arm64: vgic: Don't flush/sync without a working vgic
  KVM: arm64: Require in-kernel irqchip for PMU support
  KVM: PPC: Book3s PR: Allow access to unprivileged MMCR2 register
  KVM: PPC: Book3S PR: Support 64kB page size on POWER8E and POWER8NVL
  KVM: PPC: Book3S: Remove duplicate setting of the B field in tlbie
  KVM: PPC: BookE: Fix a sanity check
  KVM: PPC: Book3S HV: Take out virtual core piggybacking code
  KVM: PPC: Book3S: Treat VTB as a per-subcore register, not per-thread
  ARM: gic-v3: Work around definition of gic_write_bpr1
  KVM: nVMX: Fix the NMI IDT-vectoring handling
  KVM: VMX: Enable MSR-BASED TPR shadow even if APICv is inactive
  KVM: nVMX: Fix reload apic access page warning
  kvmconfig: add virtio-gpu to config fragment
  config: move x86 kvm_guest.config to a common location
  arm64: KVM: Remove duplicating init code for setting VMID
  ARM: KVM: Support vgic-v3
  ...
Diffstat (limited to 'arch/x86/kvm/debugfs.c')
| -rw-r--r-- | arch/x86/kvm/debugfs.c | 69 | 
1 files changed, 69 insertions, 0 deletions
diff --git a/arch/x86/kvm/debugfs.c b/arch/x86/kvm/debugfs.c new file mode 100644 index 000000000000..c19c7ede9bd6 --- /dev/null +++ b/arch/x86/kvm/debugfs.c @@ -0,0 +1,69 @@ +/* + * Kernel-based Virtual Machine driver for Linux + * + * Copyright 2016 Red Hat, Inc. and/or its affiliates. + * + * This work is licensed under the terms of the GNU GPL, version 2.  See + * the COPYING file in the top-level directory. + * + */ +#include <linux/kvm_host.h> +#include <linux/debugfs.h> + +bool kvm_arch_has_vcpu_debugfs(void) +{ +	return true; +} + +static int vcpu_get_tsc_offset(void *data, u64 *val) +{ +	struct kvm_vcpu *vcpu = (struct kvm_vcpu *) data; +	*val = vcpu->arch.tsc_offset; +	return 0; +} + +DEFINE_SIMPLE_ATTRIBUTE(vcpu_tsc_offset_fops, vcpu_get_tsc_offset, NULL, "%lld\n"); + +static int vcpu_get_tsc_scaling_ratio(void *data, u64 *val) +{ +	struct kvm_vcpu *vcpu = (struct kvm_vcpu *) data; +	*val = vcpu->arch.tsc_scaling_ratio; +	return 0; +} + +DEFINE_SIMPLE_ATTRIBUTE(vcpu_tsc_scaling_fops, vcpu_get_tsc_scaling_ratio, NULL, "%llu\n"); + +static int vcpu_get_tsc_scaling_frac_bits(void *data, u64 *val) +{ +	*val = kvm_tsc_scaling_ratio_frac_bits; +	return 0; +} + +DEFINE_SIMPLE_ATTRIBUTE(vcpu_tsc_scaling_frac_fops, vcpu_get_tsc_scaling_frac_bits, NULL, "%llu\n"); + +int kvm_arch_create_vcpu_debugfs(struct kvm_vcpu *vcpu) +{ +	struct dentry *ret; + +	ret = debugfs_create_file("tsc-offset", 0444, +							vcpu->debugfs_dentry, +							vcpu, &vcpu_tsc_offset_fops); +	if (!ret) +		return -ENOMEM; + +	if (kvm_has_tsc_control) { +		ret = debugfs_create_file("tsc-scaling-ratio", 0444, +							vcpu->debugfs_dentry, +							vcpu, &vcpu_tsc_scaling_fops); +		if (!ret) +			return -ENOMEM; +		ret = debugfs_create_file("tsc-scaling-ratio-frac-bits", 0444, +							vcpu->debugfs_dentry, +							vcpu, &vcpu_tsc_scaling_frac_fops); +		if (!ret) +			return -ENOMEM; + +	} + +	return 0; +}  | 
