]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
KVM: arm64: Move virt/kvm/arm to arch/arm64
authorMarc Zyngier <maz@kernel.org>
Wed, 13 May 2020 10:40:34 +0000 (11:40 +0100)
committerMarc Zyngier <maz@kernel.org>
Sat, 16 May 2020 14:03:59 +0000 (15:03 +0100)
Now that the 32bit KVM/arm host is a distant memory, let's move the
whole of the KVM/arm64 code into the arm64 tree.

As they said in the song: Welcome Home (Sanitarium).

Signed-off-by: Marc Zyngier <maz@kernel.org>
Acked-by: Will Deacon <will@kernel.org>
Link: https://lore.kernel.org/r/20200513104034.74741-1-maz@kernel.org
36 files changed:
MAINTAINERS
arch/arm64/kvm/Makefile
arch/arm64/kvm/aarch32.c [moved from virt/kvm/arm/aarch32.c with 100% similarity]
arch/arm64/kvm/arch_timer.c [moved from virt/kvm/arm/arch_timer.c with 100% similarity]
arch/arm64/kvm/arm.c [moved from virt/kvm/arm/arm.c with 99% similarity]
arch/arm64/kvm/handle_exit.c
arch/arm64/kvm/hyp/Makefile
arch/arm64/kvm/hyp/aarch32.c [moved from virt/kvm/arm/hyp/aarch32.c with 100% similarity]
arch/arm64/kvm/hyp/timer-sr.c [moved from virt/kvm/arm/hyp/timer-sr.c with 100% similarity]
arch/arm64/kvm/hyp/vgic-v3-sr.c [moved from virt/kvm/arm/hyp/vgic-v3-sr.c with 99% similarity]
arch/arm64/kvm/hypercalls.c [moved from virt/kvm/arm/hypercalls.c with 100% similarity]
arch/arm64/kvm/mmio.c [moved from virt/kvm/arm/mmio.c with 100% similarity]
arch/arm64/kvm/mmu.c [moved from virt/kvm/arm/mmu.c with 100% similarity]
arch/arm64/kvm/perf.c [moved from virt/kvm/arm/perf.c with 100% similarity]
arch/arm64/kvm/pmu-emul.c [moved from virt/kvm/arm/pmu.c with 100% similarity]
arch/arm64/kvm/psci.c [moved from virt/kvm/arm/psci.c with 100% similarity]
arch/arm64/kvm/pvtime.c [moved from virt/kvm/arm/pvtime.c with 100% similarity]
arch/arm64/kvm/trace.h
arch/arm64/kvm/trace_arm.h [moved from virt/kvm/arm/trace.h with 97% similarity]
arch/arm64/kvm/trace_handle_exit.h [new file with mode: 0644]
arch/arm64/kvm/vgic-sys-reg-v3.c
arch/arm64/kvm/vgic/trace.h [moved from virt/kvm/arm/vgic/trace.h with 93% similarity]
arch/arm64/kvm/vgic/vgic-debug.c [moved from virt/kvm/arm/vgic/vgic-debug.c with 100% similarity]
arch/arm64/kvm/vgic/vgic-init.c [moved from virt/kvm/arm/vgic/vgic-init.c with 100% similarity]
arch/arm64/kvm/vgic/vgic-irqfd.c [moved from virt/kvm/arm/vgic/vgic-irqfd.c with 100% similarity]
arch/arm64/kvm/vgic/vgic-its.c [moved from virt/kvm/arm/vgic/vgic-its.c with 100% similarity]
arch/arm64/kvm/vgic/vgic-kvm-device.c [moved from virt/kvm/arm/vgic/vgic-kvm-device.c with 100% similarity]
arch/arm64/kvm/vgic/vgic-mmio-v2.c [moved from virt/kvm/arm/vgic/vgic-mmio-v2.c with 100% similarity]
arch/arm64/kvm/vgic/vgic-mmio-v3.c [moved from virt/kvm/arm/vgic/vgic-mmio-v3.c with 100% similarity]
arch/arm64/kvm/vgic/vgic-mmio.c [moved from virt/kvm/arm/vgic/vgic-mmio.c with 100% similarity]
arch/arm64/kvm/vgic/vgic-mmio.h [moved from virt/kvm/arm/vgic/vgic-mmio.h with 100% similarity]
arch/arm64/kvm/vgic/vgic-v2.c [moved from virt/kvm/arm/vgic/vgic-v2.c with 100% similarity]
arch/arm64/kvm/vgic/vgic-v3.c [moved from virt/kvm/arm/vgic/vgic-v3.c with 99% similarity]
arch/arm64/kvm/vgic/vgic-v4.c [moved from virt/kvm/arm/vgic/vgic-v4.c with 100% similarity]
arch/arm64/kvm/vgic/vgic.c [moved from virt/kvm/arm/vgic/vgic.c with 100% similarity]
arch/arm64/kvm/vgic/vgic.h [moved from virt/kvm/arm/vgic/vgic.h with 100% similarity]

index 091ec22c1a23f174ef376bdd953b30096661ff03..6c5b928989ed70b88186cd9208623f569cd53264 100644 (file)
@@ -9295,7 +9295,6 @@ F:        arch/arm64/include/asm/kvm*
 F:     arch/arm64/include/uapi/asm/kvm*
 F:     arch/arm64/kvm/
 F:     include/kvm/arm_*
-F:     virt/kvm/arm/
 
 KERNEL VIRTUAL MACHINE FOR MIPS (KVM/mips)
 L:     linux-mips@vger.kernel.org
index 5ffbdc39e780e798b38c6da40cd6b864b7cb9b33..7a3768538343133674aa15d25a8c65679f043f39 100644 (file)
@@ -3,37 +3,37 @@
 # Makefile for Kernel-based Virtual Machine module
 #
 
-ccflags-y += -I $(srctree)/$(src) -I $(srctree)/virt/kvm/arm/vgic
+ccflags-y += -I $(srctree)/$(src)
 
 KVM=../../../virt/kvm
 
 obj-$(CONFIG_KVM_ARM_HOST) += kvm.o
 obj-$(CONFIG_KVM_ARM_HOST) += hyp/
 
-kvm-$(CONFIG_KVM_ARM_HOST) += $(KVM)/kvm_main.o $(KVM)/coalesced_mmio.o $(KVM)/eventfd.o $(KVM)/vfio.o
-kvm-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/arm.o $(KVM)/arm/mmu.o $(KVM)/arm/mmio.o
-kvm-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/psci.o $(KVM)/arm/perf.o
-kvm-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/hypercalls.o
-kvm-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/pvtime.o
+kvm-$(CONFIG_KVM_ARM_HOST) += $(KVM)/kvm_main.o $(KVM)/coalesced_mmio.o
+kvm-$(CONFIG_KVM_ARM_HOST) += $(KVM)/eventfd.o $(KVM)/vfio.o $(KVM)/irqchip.o
+kvm-$(CONFIG_KVM_ARM_HOST) += arm.o mmu.o mmio.o
+kvm-$(CONFIG_KVM_ARM_HOST) += psci.o perf.o
+kvm-$(CONFIG_KVM_ARM_HOST) += hypercalls.o
+kvm-$(CONFIG_KVM_ARM_HOST) += pvtime.o
 
 kvm-$(CONFIG_KVM_ARM_HOST) += inject_fault.o regmap.o va_layout.o
 kvm-$(CONFIG_KVM_ARM_HOST) += hyp.o hyp-init.o handle_exit.o
 kvm-$(CONFIG_KVM_ARM_HOST) += guest.o debug.o reset.o sys_regs.o sys_regs_generic_v8.o
 kvm-$(CONFIG_KVM_ARM_HOST) += vgic-sys-reg-v3.o fpsimd.o pmu.o
-kvm-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/aarch32.o
+kvm-$(CONFIG_KVM_ARM_HOST) += aarch32.o
+kvm-$(CONFIG_KVM_ARM_HOST) += arch_timer.o
+kvm-$(CONFIG_KVM_ARM_PMU)  += pmu-emul.o
 
-kvm-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/vgic/vgic.o
-kvm-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/vgic/vgic-init.o
-kvm-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/vgic/vgic-irqfd.o
-kvm-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/vgic/vgic-v2.o
-kvm-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/vgic/vgic-v3.o
-kvm-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/vgic/vgic-v4.o
-kvm-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/vgic/vgic-mmio.o
-kvm-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/vgic/vgic-mmio-v2.o
-kvm-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/vgic/vgic-mmio-v3.o
-kvm-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/vgic/vgic-kvm-device.o
-kvm-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/vgic/vgic-its.o
-kvm-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/vgic/vgic-debug.o
-kvm-$(CONFIG_KVM_ARM_HOST) += $(KVM)/irqchip.o
-kvm-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/arch_timer.o
-kvm-$(CONFIG_KVM_ARM_PMU) += $(KVM)/arm/pmu.o
+kvm-$(CONFIG_KVM_ARM_HOST) += vgic/vgic.o
+kvm-$(CONFIG_KVM_ARM_HOST) += vgic/vgic-init.o
+kvm-$(CONFIG_KVM_ARM_HOST) += vgic/vgic-irqfd.o
+kvm-$(CONFIG_KVM_ARM_HOST) += vgic/vgic-v2.o
+kvm-$(CONFIG_KVM_ARM_HOST) += vgic/vgic-v3.o
+kvm-$(CONFIG_KVM_ARM_HOST) += vgic/vgic-v4.o
+kvm-$(CONFIG_KVM_ARM_HOST) += vgic/vgic-mmio.o
+kvm-$(CONFIG_KVM_ARM_HOST) += vgic/vgic-mmio-v2.o
+kvm-$(CONFIG_KVM_ARM_HOST) += vgic/vgic-mmio-v3.o
+kvm-$(CONFIG_KVM_ARM_HOST) += vgic/vgic-kvm-device.o
+kvm-$(CONFIG_KVM_ARM_HOST) += vgic/vgic-its.o
+kvm-$(CONFIG_KVM_ARM_HOST) += vgic/vgic-debug.o
similarity index 99%
rename from virt/kvm/arm/arm.c
rename to arch/arm64/kvm/arm.c
index 48d0ec44ad77e52245a0ab571c726c39aa8af0ab..c958bb37b769d3c34b44185e2c4a49627a12cd20 100644 (file)
@@ -22,7 +22,7 @@
 #include <trace/events/kvm.h>
 
 #define CREATE_TRACE_POINTS
-#include "trace.h"
+#include "trace_arm.h"
 
 #include <linux/uaccess.h>
 #include <asm/ptrace.h>
index aacfc55de44cb90cc641186bbc1512f2652a6faf..eb194696ef62250535648be848e9b725105802d1 100644 (file)
@@ -23,7 +23,7 @@
 #include <kvm/arm_hypercalls.h>
 
 #define CREATE_TRACE_POINTS
-#include "trace.h"
+#include "trace_handle_exit.h"
 
 typedef int (*exit_handle_fn)(struct kvm_vcpu *, struct kvm_run *);
 
index ea710f674cb6b4f41e55e9c261ee3be6c980b7c8..dc18274a68262fb0be6db719dfd0f834911b8e2c 100644 (file)
@@ -6,12 +6,9 @@
 ccflags-y += -fno-stack-protector -DDISABLE_BRANCH_PROFILING \
                $(DISABLE_STACKLEAK_PLUGIN)
 
-KVM=../../../../virt/kvm
-
-obj-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/hyp/vgic-v3-sr.o
-obj-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/hyp/timer-sr.o
-obj-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/hyp/aarch32.o
-
+obj-$(CONFIG_KVM_ARM_HOST) += vgic-v3-sr.o
+obj-$(CONFIG_KVM_ARM_HOST) += timer-sr.o
+obj-$(CONFIG_KVM_ARM_HOST) += aarch32.o
 obj-$(CONFIG_KVM_ARM_HOST) += vgic-v2-cpuif-proxy.o
 obj-$(CONFIG_KVM_ARM_HOST) += sysreg-sr.o
 obj-$(CONFIG_KVM_ARM_HOST) += debug-sr.o
similarity index 99%
rename from virt/kvm/arm/hyp/vgic-v3-sr.c
rename to arch/arm64/kvm/hyp/vgic-v3-sr.c
index ccf1fde9836c1e2a5ae041899a0e7675e8837cc2..49fedf6710f9c49a4e0f0d8b19293cdff93f048a 100644 (file)
@@ -431,8 +431,6 @@ void __hyp_text __vgic_v3_write_vmcr(u32 vmcr)
        write_gicreg(vmcr, ICH_VMCR_EL2);
 }
 
-#ifdef CONFIG_ARM64
-
 static int __hyp_text __vgic_v3_bpr_min(void)
 {
        /* See Pseudocode for VPriorityGroup */
@@ -1126,5 +1124,3 @@ int __hyp_text __vgic_v3_perform_cpuif_access(struct kvm_vcpu *vcpu)
 
        return 1;
 }
-
-#endif
similarity index 100%
rename from virt/kvm/arm/mmio.c
rename to arch/arm64/kvm/mmio.c
similarity index 100%
rename from virt/kvm/arm/mmu.c
rename to arch/arm64/kvm/mmu.c
similarity index 100%
rename from virt/kvm/arm/perf.c
rename to arch/arm64/kvm/perf.c
similarity index 100%
rename from virt/kvm/arm/pmu.c
rename to arch/arm64/kvm/pmu-emul.c
similarity index 100%
rename from virt/kvm/arm/psci.c
rename to arch/arm64/kvm/psci.c
index eab91ad0effbe3784f23a4ae307773dca2ae65df..86f9ea47be297a476e7d38973c3711a029d1ecc6 100644 (file)
@@ -1,216 +1,8 @@
 /* SPDX-License-Identifier: GPL-2.0 */
-#if !defined(_TRACE_ARM64_KVM_H) || defined(TRACE_HEADER_MULTI_READ)
+#ifndef _TRACE_ARM64_KVM_H
 #define _TRACE_ARM64_KVM_H
 
-#include <linux/tracepoint.h>
-#include "sys_regs.h"
+#include "trace_arm.h"
+#include "trace_handle_exit.h"
 
-#undef TRACE_SYSTEM
-#define TRACE_SYSTEM kvm
-
-TRACE_EVENT(kvm_wfx_arm64,
-       TP_PROTO(unsigned long vcpu_pc, bool is_wfe),
-       TP_ARGS(vcpu_pc, is_wfe),
-
-       TP_STRUCT__entry(
-               __field(unsigned long,  vcpu_pc)
-               __field(bool,           is_wfe)
-       ),
-
-       TP_fast_assign(
-               __entry->vcpu_pc = vcpu_pc;
-               __entry->is_wfe  = is_wfe;
-       ),
-
-       TP_printk("guest executed wf%c at: 0x%08lx",
-                 __entry->is_wfe ? 'e' : 'i', __entry->vcpu_pc)
-);
-
-TRACE_EVENT(kvm_hvc_arm64,
-       TP_PROTO(unsigned long vcpu_pc, unsigned long r0, unsigned long imm),
-       TP_ARGS(vcpu_pc, r0, imm),
-
-       TP_STRUCT__entry(
-               __field(unsigned long, vcpu_pc)
-               __field(unsigned long, r0)
-               __field(unsigned long, imm)
-       ),
-
-       TP_fast_assign(
-               __entry->vcpu_pc = vcpu_pc;
-               __entry->r0 = r0;
-               __entry->imm = imm;
-       ),
-
-       TP_printk("HVC at 0x%08lx (r0: 0x%08lx, imm: 0x%lx)",
-                 __entry->vcpu_pc, __entry->r0, __entry->imm)
-);
-
-TRACE_EVENT(kvm_arm_setup_debug,
-       TP_PROTO(struct kvm_vcpu *vcpu, __u32 guest_debug),
-       TP_ARGS(vcpu, guest_debug),
-
-       TP_STRUCT__entry(
-               __field(struct kvm_vcpu *, vcpu)
-               __field(__u32, guest_debug)
-       ),
-
-       TP_fast_assign(
-               __entry->vcpu = vcpu;
-               __entry->guest_debug = guest_debug;
-       ),
-
-       TP_printk("vcpu: %p, flags: 0x%08x", __entry->vcpu, __entry->guest_debug)
-);
-
-TRACE_EVENT(kvm_arm_clear_debug,
-       TP_PROTO(__u32 guest_debug),
-       TP_ARGS(guest_debug),
-
-       TP_STRUCT__entry(
-               __field(__u32, guest_debug)
-       ),
-
-       TP_fast_assign(
-               __entry->guest_debug = guest_debug;
-       ),
-
-       TP_printk("flags: 0x%08x", __entry->guest_debug)
-);
-
-TRACE_EVENT(kvm_arm_set_dreg32,
-       TP_PROTO(const char *name, __u32 value),
-       TP_ARGS(name, value),
-
-       TP_STRUCT__entry(
-               __field(const char *, name)
-               __field(__u32, value)
-       ),
-
-       TP_fast_assign(
-               __entry->name = name;
-               __entry->value = value;
-       ),
-
-       TP_printk("%s: 0x%08x", __entry->name, __entry->value)
-);
-
-TRACE_DEFINE_SIZEOF(__u64);
-
-TRACE_EVENT(kvm_arm_set_regset,
-       TP_PROTO(const char *type, int len, __u64 *control, __u64 *value),
-       TP_ARGS(type, len, control, value),
-       TP_STRUCT__entry(
-               __field(const char *, name)
-               __field(int, len)
-               __array(u64, ctrls, 16)
-               __array(u64, values, 16)
-       ),
-       TP_fast_assign(
-               __entry->name = type;
-               __entry->len = len;
-               memcpy(__entry->ctrls, control, len << 3);
-               memcpy(__entry->values, value, len << 3);
-       ),
-       TP_printk("%d %s CTRL:%s VALUE:%s", __entry->len, __entry->name,
-               __print_array(__entry->ctrls, __entry->len, sizeof(__u64)),
-               __print_array(__entry->values, __entry->len, sizeof(__u64)))
-);
-
-TRACE_EVENT(trap_reg,
-       TP_PROTO(const char *fn, int reg, bool is_write, u64 write_value),
-       TP_ARGS(fn, reg, is_write, write_value),
-
-       TP_STRUCT__entry(
-               __field(const char *, fn)
-               __field(int, reg)
-               __field(bool, is_write)
-               __field(u64, write_value)
-       ),
-
-       TP_fast_assign(
-               __entry->fn = fn;
-               __entry->reg = reg;
-               __entry->is_write = is_write;
-               __entry->write_value = write_value;
-       ),
-
-       TP_printk("%s %s reg %d (0x%08llx)", __entry->fn,  __entry->is_write?"write to":"read from", __entry->reg, __entry->write_value)
-);
-
-TRACE_EVENT(kvm_handle_sys_reg,
-       TP_PROTO(unsigned long hsr),
-       TP_ARGS(hsr),
-
-       TP_STRUCT__entry(
-               __field(unsigned long,  hsr)
-       ),
-
-       TP_fast_assign(
-               __entry->hsr = hsr;
-       ),
-
-       TP_printk("HSR 0x%08lx", __entry->hsr)
-);
-
-TRACE_EVENT(kvm_sys_access,
-       TP_PROTO(unsigned long vcpu_pc, struct sys_reg_params *params, const struct sys_reg_desc *reg),
-       TP_ARGS(vcpu_pc, params, reg),
-
-       TP_STRUCT__entry(
-               __field(unsigned long,                  vcpu_pc)
-               __field(bool,                           is_write)
-               __field(const char *,                   name)
-               __field(u8,                             Op0)
-               __field(u8,                             Op1)
-               __field(u8,                             CRn)
-               __field(u8,                             CRm)
-               __field(u8,                             Op2)
-       ),
-
-       TP_fast_assign(
-               __entry->vcpu_pc = vcpu_pc;
-               __entry->is_write = params->is_write;
-               __entry->name = reg->name;
-               __entry->Op0 = reg->Op0;
-               __entry->Op0 = reg->Op0;
-               __entry->Op1 = reg->Op1;
-               __entry->CRn = reg->CRn;
-               __entry->CRm = reg->CRm;
-               __entry->Op2 = reg->Op2;
-       ),
-
-       TP_printk("PC: %lx %s (%d,%d,%d,%d,%d) %s",
-                 __entry->vcpu_pc, __entry->name ?: "UNKN",
-                 __entry->Op0, __entry->Op1, __entry->CRn,
-                 __entry->CRm, __entry->Op2,
-                 __entry->is_write ? "write" : "read")
-);
-
-TRACE_EVENT(kvm_set_guest_debug,
-       TP_PROTO(struct kvm_vcpu *vcpu, __u32 guest_debug),
-       TP_ARGS(vcpu, guest_debug),
-
-       TP_STRUCT__entry(
-               __field(struct kvm_vcpu *, vcpu)
-               __field(__u32, guest_debug)
-       ),
-
-       TP_fast_assign(
-               __entry->vcpu = vcpu;
-               __entry->guest_debug = guest_debug;
-       ),
-
-       TP_printk("vcpu: %p, flags: 0x%08x", __entry->vcpu, __entry->guest_debug)
-);
-
-
-#endif /* _TRACE_ARM64_KVM_H */
-
-#undef TRACE_INCLUDE_PATH
-#define TRACE_INCLUDE_PATH .
-#undef TRACE_INCLUDE_FILE
-#define TRACE_INCLUDE_FILE trace
-
-/* This part must be outside protection */
-#include <trace/define_trace.h>
+#endif /* _TRACE_ARM64_KVM_H */
similarity index 97%
rename from virt/kvm/arm/trace.h
rename to arch/arm64/kvm/trace_arm.h
index cc94ccc688217c7fa337e01d74ca1378f31699c1..4c71270cc09720807bf6bbb4ef08296087c78af1 100644 (file)
@@ -1,10 +1,9 @@
 /* SPDX-License-Identifier: GPL-2.0 */
-#if !defined(_TRACE_KVM_H) || defined(TRACE_HEADER_MULTI_READ)
-#define _TRACE_KVM_H
+#if !defined(_TRACE_ARM_ARM64_KVM_H) || defined(TRACE_HEADER_MULTI_READ)
+#define _TRACE_ARM_ARM64_KVM_H
 
 #include <kvm/arm_arch_timer.h>
 #include <linux/tracepoint.h>
-#include <asm/kvm_arm.h>
 
 #undef TRACE_SYSTEM
 #define TRACE_SYSTEM kvm
@@ -368,12 +367,12 @@ TRACE_EVENT(kvm_timer_emulate,
                  __entry->timer_idx, __entry->should_fire)
 );
 
-#endif /* _TRACE_KVM_H */
+#endif /* _TRACE_ARM_ARM64_KVM_H */
 
 #undef TRACE_INCLUDE_PATH
-#define TRACE_INCLUDE_PATH ../../virt/kvm/arm
+#define TRACE_INCLUDE_PATH .
 #undef TRACE_INCLUDE_FILE
-#define TRACE_INCLUDE_FILE trace
+#define TRACE_INCLUDE_FILE trace_arm
 
 /* This part must be outside protection */
 #include <trace/define_trace.h>
diff --git a/arch/arm64/kvm/trace_handle_exit.h b/arch/arm64/kvm/trace_handle_exit.h
new file mode 100644 (file)
index 0000000..2c56d1e
--- /dev/null
@@ -0,0 +1,215 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#if !defined(_TRACE_HANDLE_EXIT_ARM64_KVM_H) || defined(TRACE_HEADER_MULTI_READ)
+#define _TRACE_HANDLE_EXIT_ARM64_KVM_H
+
+#include <linux/tracepoint.h>
+#include "sys_regs.h"
+
+#undef TRACE_SYSTEM
+#define TRACE_SYSTEM kvm
+
+TRACE_EVENT(kvm_wfx_arm64,
+       TP_PROTO(unsigned long vcpu_pc, bool is_wfe),
+       TP_ARGS(vcpu_pc, is_wfe),
+
+       TP_STRUCT__entry(
+               __field(unsigned long,  vcpu_pc)
+               __field(bool,           is_wfe)
+       ),
+
+       TP_fast_assign(
+               __entry->vcpu_pc = vcpu_pc;
+               __entry->is_wfe  = is_wfe;
+       ),
+
+       TP_printk("guest executed wf%c at: 0x%08lx",
+                 __entry->is_wfe ? 'e' : 'i', __entry->vcpu_pc)
+);
+
+TRACE_EVENT(kvm_hvc_arm64,
+       TP_PROTO(unsigned long vcpu_pc, unsigned long r0, unsigned long imm),
+       TP_ARGS(vcpu_pc, r0, imm),
+
+       TP_STRUCT__entry(
+               __field(unsigned long, vcpu_pc)
+               __field(unsigned long, r0)
+               __field(unsigned long, imm)
+       ),
+
+       TP_fast_assign(
+               __entry->vcpu_pc = vcpu_pc;
+               __entry->r0 = r0;
+               __entry->imm = imm;
+       ),
+
+       TP_printk("HVC at 0x%08lx (r0: 0x%08lx, imm: 0x%lx)",
+                 __entry->vcpu_pc, __entry->r0, __entry->imm)
+);
+
+TRACE_EVENT(kvm_arm_setup_debug,
+       TP_PROTO(struct kvm_vcpu *vcpu, __u32 guest_debug),
+       TP_ARGS(vcpu, guest_debug),
+
+       TP_STRUCT__entry(
+               __field(struct kvm_vcpu *, vcpu)
+               __field(__u32, guest_debug)
+       ),
+
+       TP_fast_assign(
+               __entry->vcpu = vcpu;
+               __entry->guest_debug = guest_debug;
+       ),
+
+       TP_printk("vcpu: %p, flags: 0x%08x", __entry->vcpu, __entry->guest_debug)
+);
+
+TRACE_EVENT(kvm_arm_clear_debug,
+       TP_PROTO(__u32 guest_debug),
+       TP_ARGS(guest_debug),
+
+       TP_STRUCT__entry(
+               __field(__u32, guest_debug)
+       ),
+
+       TP_fast_assign(
+               __entry->guest_debug = guest_debug;
+       ),
+
+       TP_printk("flags: 0x%08x", __entry->guest_debug)
+);
+
+TRACE_EVENT(kvm_arm_set_dreg32,
+       TP_PROTO(const char *name, __u32 value),
+       TP_ARGS(name, value),
+
+       TP_STRUCT__entry(
+               __field(const char *, name)
+               __field(__u32, value)
+       ),
+
+       TP_fast_assign(
+               __entry->name = name;
+               __entry->value = value;
+       ),
+
+       TP_printk("%s: 0x%08x", __entry->name, __entry->value)
+);
+
+TRACE_DEFINE_SIZEOF(__u64);
+
+TRACE_EVENT(kvm_arm_set_regset,
+       TP_PROTO(const char *type, int len, __u64 *control, __u64 *value),
+       TP_ARGS(type, len, control, value),
+       TP_STRUCT__entry(
+               __field(const char *, name)
+               __field(int, len)
+               __array(u64, ctrls, 16)
+               __array(u64, values, 16)
+       ),
+       TP_fast_assign(
+               __entry->name = type;
+               __entry->len = len;
+               memcpy(__entry->ctrls, control, len << 3);
+               memcpy(__entry->values, value, len << 3);
+       ),
+       TP_printk("%d %s CTRL:%s VALUE:%s", __entry->len, __entry->name,
+               __print_array(__entry->ctrls, __entry->len, sizeof(__u64)),
+               __print_array(__entry->values, __entry->len, sizeof(__u64)))
+);
+
+TRACE_EVENT(trap_reg,
+       TP_PROTO(const char *fn, int reg, bool is_write, u64 write_value),
+       TP_ARGS(fn, reg, is_write, write_value),
+
+       TP_STRUCT__entry(
+               __field(const char *, fn)
+               __field(int, reg)
+               __field(bool, is_write)
+               __field(u64, write_value)
+       ),
+
+       TP_fast_assign(
+               __entry->fn = fn;
+               __entry->reg = reg;
+               __entry->is_write = is_write;
+               __entry->write_value = write_value;
+       ),
+
+       TP_printk("%s %s reg %d (0x%08llx)", __entry->fn,  __entry->is_write?"write to":"read from", __entry->reg, __entry->write_value)
+);
+
+TRACE_EVENT(kvm_handle_sys_reg,
+       TP_PROTO(unsigned long hsr),
+       TP_ARGS(hsr),
+
+       TP_STRUCT__entry(
+               __field(unsigned long,  hsr)
+       ),
+
+       TP_fast_assign(
+               __entry->hsr = hsr;
+       ),
+
+       TP_printk("HSR 0x%08lx", __entry->hsr)
+);
+
+TRACE_EVENT(kvm_sys_access,
+       TP_PROTO(unsigned long vcpu_pc, struct sys_reg_params *params, const struct sys_reg_desc *reg),
+       TP_ARGS(vcpu_pc, params, reg),
+
+       TP_STRUCT__entry(
+               __field(unsigned long,                  vcpu_pc)
+               __field(bool,                           is_write)
+               __field(const char *,                   name)
+               __field(u8,                             Op0)
+               __field(u8,                             Op1)
+               __field(u8,                             CRn)
+               __field(u8,                             CRm)
+               __field(u8,                             Op2)
+       ),
+
+       TP_fast_assign(
+               __entry->vcpu_pc = vcpu_pc;
+               __entry->is_write = params->is_write;
+               __entry->name = reg->name;
+               __entry->Op0 = reg->Op0;
+               __entry->Op0 = reg->Op0;
+               __entry->Op1 = reg->Op1;
+               __entry->CRn = reg->CRn;
+               __entry->CRm = reg->CRm;
+               __entry->Op2 = reg->Op2;
+       ),
+
+       TP_printk("PC: %lx %s (%d,%d,%d,%d,%d) %s",
+                 __entry->vcpu_pc, __entry->name ?: "UNKN",
+                 __entry->Op0, __entry->Op1, __entry->CRn,
+                 __entry->CRm, __entry->Op2,
+                 __entry->is_write ? "write" : "read")
+);
+
+TRACE_EVENT(kvm_set_guest_debug,
+       TP_PROTO(struct kvm_vcpu *vcpu, __u32 guest_debug),
+       TP_ARGS(vcpu, guest_debug),
+
+       TP_STRUCT__entry(
+               __field(struct kvm_vcpu *, vcpu)
+               __field(__u32, guest_debug)
+       ),
+
+       TP_fast_assign(
+               __entry->vcpu = vcpu;
+               __entry->guest_debug = guest_debug;
+       ),
+
+       TP_printk("vcpu: %p, flags: 0x%08x", __entry->vcpu, __entry->guest_debug)
+);
+
+#endif /* _TRACE_HANDLE_EXIT_ARM64_KVM_H */
+
+#undef TRACE_INCLUDE_PATH
+#define TRACE_INCLUDE_PATH .
+#undef TRACE_INCLUDE_FILE
+#define TRACE_INCLUDE_FILE trace_handle_exit
+
+/* This part must be outside protection */
+#include <trace/define_trace.h>
index e7d1ea92095ddd796354e3536577604a2f8851b4..2f92bdcb1188585c9826d0e6985bf25d95fe3bbf 100644 (file)
@@ -7,7 +7,7 @@
 #include <linux/kvm.h>
 #include <linux/kvm_host.h>
 #include <asm/kvm_emulate.h>
-#include "vgic.h"
+#include "vgic/vgic.h"
 #include "sys_regs.h"
 
 static bool access_gic_ctlr(struct kvm_vcpu *vcpu, struct sys_reg_params *p,
similarity index 93%
rename from virt/kvm/arm/vgic/trace.h
rename to arch/arm64/kvm/vgic/trace.h
index 4fd4f6db181b0b3f911e964c9bc5c763ce7ef638..83c64401a7fc88099826c863179ffb67f306acd4 100644 (file)
@@ -30,7 +30,7 @@ TRACE_EVENT(vgic_update_irq_pending,
 #endif /* _TRACE_VGIC_H */
 
 #undef TRACE_INCLUDE_PATH
-#define TRACE_INCLUDE_PATH ../../virt/kvm/arm/vgic
+#define TRACE_INCLUDE_PATH ../../arch/arm64/kvm/vgic
 #undef TRACE_INCLUDE_FILE
 #define TRACE_INCLUDE_FILE trace
 
similarity index 99%
rename from virt/kvm/arm/vgic/vgic-v3.c
rename to arch/arm64/kvm/vgic/vgic-v3.c
index 2c9fc13e2c5901fcdfec91ffd0f4e2811172cb4f..5bc2ab58954bfd818914be8c8e6ae7f07567a26a 100644 (file)
@@ -630,12 +630,10 @@ int vgic_v3_probe(const struct gic_kvm_info *info)
        if (kvm_vgic_global_state.vcpu_base == 0)
                kvm_info("disabling GICv2 emulation\n");
 
-#ifdef CONFIG_ARM64
        if (cpus_have_const_cap(ARM64_WORKAROUND_CAVIUM_30115)) {
                group0_trap = true;
                group1_trap = true;
        }
-#endif
 
        if (group0_trap || group1_trap || common_trap) {
                kvm_info("GICv3 sysreg trapping enabled ([%s%s%s], reduced performance)\n",