aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexandru Elisei <alexandru.elisei@arm.com>2022-05-25 17:57:04 +0100
committerWill Deacon <will@kernel.org>2022-05-26 10:04:43 +0100
commit6f6f384cef27372b746158951c5ba011ca914acd (patch)
treee4abefa3c41363ec26fb165c1611845520414868
parent8ec1e8bf3bc2e99518d857a5164218d513d585ea (diff)
downloadkvmtool-6f6f384cef27372b746158951c5ba011ca914acd.tar.gz
mips: Do not emulate a serial device
Commit 45b4968e0de1 ("hw/serial: ARM/arm64: Use MMIO at higher addresses") changed how the address for the UART is computed by using KVM_IOPORT_AREA. The symbol is not defined for MIPS, which results in the following compilation error: hw/serial.c:21:27: error: ‘KVM_IOPORT_AREA’ undeclared here (not in a function); did you mean ‘KVM_MIPS_IOPORT_AREA’? 21 | #define serial_iobase_0 (KVM_IOPORT_AREA + 0x3f8) | ^~~~~~~~~~~~~~~ hw/serial.c:29:27: note: in expansion of macro ‘serial_iobase_0’ 29 | #define serial_iobase(nr) serial_iobase_##nr | ^~~~~~~~~~~~~~ hw/serial.c:92:15: note: in expansion of macro ‘serial_iobase’ 92 | .iobase = serial_iobase(0), | ^~~~~~~~~~~~~ Before the commit, the serial was placed at addresses 0x3f8, 0x2f8, 0x3e8 and 0x2e8. However, MIPS puts the RAM at those addresses, up to KVM_MMIO_START, which is 0x10000000. Meaning that serial device emulation never worked, as those addresses were part of a valid memslot representing memory. This has been the case since commit 7281a8db199b ("kvm tools, mips: Add MIPS support") from 2014. A quick examination of the MIPS code reveals that the architecture relies on hypercalls from the guest and the virtio console for input and output. Since nobody complained about the missing serial device, assume that it is indeed not needed and do not compile it for MIPS. Signed-off-by: Alexandru Elisei <alexandru.elisei@arm.com> Link: https://lore.kernel.org/r/20220525165704.186754-3-alexandru.elisei@arm.com Signed-off-by: Will Deacon <will@kernel.org>
-rw-r--r--Makefile7
-rw-r--r--mips/kvm.c5
2 files changed, 10 insertions, 2 deletions
diff --git a/Makefile b/Makefile
index 9e67c763..6464446a 100644
--- a/Makefile
+++ b/Makefile
@@ -56,7 +56,6 @@ OBJS += disk/core.o
OBJS += framebuffer.o
OBJS += guest_compat.o
OBJS += hw/rtc.o
-OBJS += hw/serial.o
OBJS += irq.o
OBJS += kvm-cpu.o
OBJS += kvm.o
@@ -127,6 +126,7 @@ endif
ifeq ($(ARCH),x86)
DEFINES += -DCONFIG_X86
OBJS += hw/i8042.o
+ OBJS += hw/serial.o
OBJS += x86/boot.o
OBJS += x86/cpuid.o
OBJS += x86/interrupt.o
@@ -144,6 +144,7 @@ endif
# POWER/ppc: Actually only support ppc64 currently.
ifeq ($(ARCH), powerpc)
DEFINES += -DCONFIG_PPC
+ OBJS += hw/serial.o
OBJS += powerpc/boot.o
OBJS += powerpc/ioport.o
OBJS += powerpc/kvm.o
@@ -161,7 +162,8 @@ endif
# ARM
OBJS_ARM_COMMON := arm/fdt.o arm/gic.o arm/gicv2m.o arm/ioport.o \
- arm/kvm.o arm/kvm-cpu.o arm/pci.o arm/timer.o
+ arm/kvm.o arm/kvm-cpu.o arm/pci.o arm/timer.o \
+ hw/serial.o
HDRS_ARM_COMMON := arm/include
ifeq ($(ARCH), arm)
DEFINES += -DCONFIG_ARM
@@ -203,6 +205,7 @@ endif
ifeq ($(ARCH),riscv)
DEFINES += -DCONFIG_RISCV
ARCH_INCLUDE := riscv/include
+ OBJS += hw/serial.o
OBJS += riscv/fdt.o
OBJS += riscv/ioport.o
OBJS += riscv/irq.o
diff --git a/mips/kvm.c b/mips/kvm.c
index 3470dbb2..e668cbbe 100644
--- a/mips/kvm.c
+++ b/mips/kvm.c
@@ -1,3 +1,4 @@
+#include "kvm/8250-serial.h"
#include "kvm/kvm.h"
#include "kvm/ioport.h"
#include "kvm/virtio-console.h"
@@ -359,3 +360,7 @@ bool kvm__arch_load_kernel_image(struct kvm *kvm, int fd_kernel, int fd_initrd,
void ioport__map_irq(u8 *irq)
{
}
+
+void serial8250__inject_sysrq(struct kvm *kvm, char sysrq)
+{
+}