[RFC kvmtool 29/31] mmio: add arch hook for an unhandled MMIO access
From: Suzuki K Poulose <suzuki.poulose@arm.com>
Date: 2023-01-27 11:43:03
Also in:
kvm, kvmarm, linux-coco, lkml
Subsystem:
the rest · Maintainer:
Linus Torvalds
From: Joey Gouly <joey.gouly@arm.com> Add a hook that allows an architecture to run some code on an unhandled MMIO access. Signed-off-by: Joey Gouly <joey.gouly@arm.com> Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com> --- arm/kvm-cpu.c | 4 ++++ include/kvm/kvm-cpu.h | 2 ++ mips/kvm-cpu.c | 4 ++++ mmio.c | 3 +++ powerpc/kvm-cpu.c | 4 ++++ riscv/kvm-cpu.c | 4 ++++ x86/kvm-cpu.c | 4 ++++ 7 files changed, 25 insertions(+)
diff --git a/arm/kvm-cpu.c b/arm/kvm-cpu.c
index 98bc5fdf..90a15ae9 100644
--- a/arm/kvm-cpu.c
+++ b/arm/kvm-cpu.c@@ -152,3 +152,7 @@ bool kvm_cpu__handle_exit(struct kvm_cpu *vcpu) void kvm_cpu__show_page_tables(struct kvm_cpu *vcpu) { } + +void kvm_cpu__arch_unhandled_mmio(struct kvm_cpu *vcpu) +{ +}
diff --git a/include/kvm/kvm-cpu.h b/include/kvm/kvm-cpu.h
index 0f16f8d6..d0c40598 100644
--- a/include/kvm/kvm-cpu.h
+++ b/include/kvm/kvm-cpu.h@@ -29,4 +29,6 @@ void kvm_cpu__show_page_tables(struct kvm_cpu *vcpu); void kvm_cpu__arch_nmi(struct kvm_cpu *cpu); void kvm_cpu__run_on_all_cpus(struct kvm *kvm, struct kvm_cpu_task *task); +void kvm_cpu__arch_unhandled_mmio(struct kvm_cpu *cpu); + #endif /* KVM__KVM_CPU_H */
diff --git a/mips/kvm-cpu.c b/mips/kvm-cpu.c
index 30a3de18..0ce88ac3 100644
--- a/mips/kvm-cpu.c
+++ b/mips/kvm-cpu.c@@ -217,3 +217,7 @@ void kvm_cpu__show_code(struct kvm_cpu *vcpu) void kvm_cpu__show_page_tables(struct kvm_cpu *vcpu) { } + +void kvm_cpu__arch_unhandled_mmio(struct kvm_cpu *cpu) +{ +}
diff --git a/mmio.c b/mmio.c
index 5a114e99..7e31079b 100644
--- a/mmio.c
+++ b/mmio.c@@ -206,6 +206,9 @@ bool kvm__emulate_mmio(struct kvm_cpu *vcpu, u64 phys_addr, u8 *data, fprintf(stderr, "Warning: Ignoring MMIO %s at %016llx (length %u)\n", to_direction(is_write), (unsigned long long)phys_addr, len); + + kvm_cpu__arch_unhandled_mmio(vcpu); + goto out; }
diff --git a/powerpc/kvm-cpu.c b/powerpc/kvm-cpu.c
index 461e0a90..e0c20f9d 100644
--- a/powerpc/kvm-cpu.c
+++ b/powerpc/kvm-cpu.c@@ -288,3 +288,7 @@ void kvm_cpu__show_page_tables(struct kvm_cpu *vcpu) { /* Does nothing yet */ } + +void kvm_cpu__arch_unhandled_mmio(struct kvm_cpu *cpu) +{ +}
diff --git a/riscv/kvm-cpu.c b/riscv/kvm-cpu.c
index f98bd7ae..8417e361 100644
--- a/riscv/kvm-cpu.c
+++ b/riscv/kvm-cpu.c@@ -461,3 +461,7 @@ void kvm_cpu__show_registers(struct kvm_cpu *vcpu) kvm_cpu__show_csrs(vcpu); } + +void kvm_cpu__arch_unhandled_mmio(struct kvm_cpu *cpu) +{ +}
diff --git a/x86/kvm-cpu.c b/x86/kvm-cpu.c
index b02ff65e..ac075ee4 100644
--- a/x86/kvm-cpu.c
+++ b/x86/kvm-cpu.c@@ -444,3 +444,7 @@ void kvm_cpu__arch_nmi(struct kvm_cpu *cpu) ioctl(cpu->vcpu_fd, KVM_NMI); } + +void kvm_cpu__arch_unhandled_mmio(struct kvm_cpu *cpu) +{ +}
--
2.34.1
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel