aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndre Przywara <andre.przywara@arm.com>2021-03-15 15:33:42 +0000
committerWill Deacon <will@kernel.org>2021-03-18 09:44:45 +0000
commit59866df60b4b9d4e10e0cc0b4f84316951d796e1 (patch)
treefab0283a9286c4213794e69fece7eea05e719a99
parent47a510600e080f21850722d82d0f1faf2f9b4b25 (diff)
downloadkvmtool-59866df60b4b9d4e10e0cc0b4f84316951d796e1.tar.gz
hw/serial: Switch to new trap handlers
Now that the serial device has a trap handler adhering to the MMIO fault handler prototype, let's switch over to the joint registration routine. This allows us to get rid of the ioport shim routines. Signed-off-by: Andre Przywara <andre.przywara@arm.com> Reviewed-by: Alexandru Elisei <alexandru.elisei@arm.com> Link: https://lore.kernel.org/r/20210315153350.19988-15-andre.przywara@arm.com Signed-off-by: Will Deacon <will@kernel.org>
-rw-r--r--hw/serial.c31
1 files changed, 3 insertions, 28 deletions
diff --git a/hw/serial.c b/hw/serial.c
index 3f797452..16af493b 100644
--- a/hw/serial.c
+++ b/hw/serial.c
@@ -393,26 +393,6 @@ static void serial8250_mmio(struct kvm_cpu *vcpu, u64 addr, u8 *data, u32 len,
serial8250_in(dev, vcpu, addr - dev->iobase, data);
}
-static bool serial8250_ioport_out(struct ioport *ioport, struct kvm_cpu *vcpu,
- u16 port, void *data, int size)
-{
- struct serial8250_device *dev = ioport->priv;
-
- serial8250_mmio(vcpu, port, data, 1, true, dev);
-
- return true;
-}
-
-static bool serial8250_ioport_in(struct ioport *ioport, struct kvm_cpu *vcpu,
- u16 port, void *data, int size)
-{
- struct serial8250_device *dev = ioport->priv;
-
- serial8250_mmio(vcpu, port, data, 1, false, dev);
-
- return true;
-}
-
#ifdef CONFIG_HAS_LIBFDT
char *fdt_stdout_path = NULL;
@@ -450,11 +430,6 @@ void serial8250_generate_fdt_node(void *fdt, struct device_header *dev_hdr,
}
#endif
-static struct ioport_operations serial8250_ops = {
- .io_in = serial8250_ioport_in,
- .io_out = serial8250_ioport_out,
-};
-
static int serial8250__device_init(struct kvm *kvm,
struct serial8250_device *dev)
{
@@ -465,7 +440,7 @@ static int serial8250__device_init(struct kvm *kvm,
return r;
ioport__map_irq(&dev->irq);
- r = ioport__register(kvm, dev->iobase, &serial8250_ops, 8, dev);
+ r = kvm__register_pio(kvm, dev->iobase, 8, serial8250_mmio, dev);
return r;
}
@@ -488,7 +463,7 @@ cleanup:
for (j = 0; j <= i; j++) {
struct serial8250_device *dev = &devices[j];
- ioport__unregister(kvm, dev->iobase);
+ kvm__deregister_pio(kvm, dev->iobase);
device__unregister(&dev->dev_hdr);
}
@@ -504,7 +479,7 @@ int serial8250__exit(struct kvm *kvm)
for (i = 0; i < ARRAY_SIZE(devices); i++) {
struct serial8250_device *dev = &devices[i];
- r = ioport__unregister(kvm, dev->iobase);
+ r = kvm__deregister_pio(kvm, dev->iobase);
if (r < 0)
return r;
device__unregister(&dev->dev_hdr);