Re: [PATCH kvmtool v2 08/22] x86/ioport: Refactor trap handlers

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, 9 Mar 2021 11:49:47 +0000
Alexandru Elisei <alexandru.elisei@xxxxxxx> wrote:

> Hi Andre,
> 
> Regarding the naming of the functions, these are real ioport emulation functions,
> which are executed because a KVM_EXIT_IO exit reason from KVM_RUN. Wouldn't naming
> the functions something like *_pio or *_io be more appropriate?

Yes, indeed these devices here are per definition pure port I/O
devices. I changed the names to _io, to be in line with the later
patches.

Cheers,
Andre
 
> On 2/25/21 12:59 AM, Andre Przywara wrote:
> > With the planned retirement of the special ioport emulation code, we
> > need to provide emulation functions compatible with the MMIO
> > prototype.
> >
> > Adjust the trap handlers to use that new function, and provide shims to
> > implement the old ioport interface, for now.
> >
> > Signed-off-by: Andre Przywara <andre.przywara@xxxxxxx>
> > Reviewed-by: Alexandru Elisei <alexandru.elisei@xxxxxxx>
> > ---
> >  x86/ioport.c | 30 ++++++++++++++++++++++++++----
> >  1 file changed, 26 insertions(+), 4 deletions(-)
> >
> > diff --git a/x86/ioport.c b/x86/ioport.c
> > index a8d2bb1a..78f9a863 100644
> > --- a/x86/ioport.c
> > +++ b/x86/ioport.c
> > @@ -3,8 +3,14 @@
> >  #include <stdlib.h>
> >  #include <stdio.h>
> >  
> > +static void dummy_mmio(struct kvm_cpu *vcpu, u64 addr, u8 *data, u32 len,
> > +		       u8 is_write, void *ptr)
> > +{
> > +}
> > +
> >  static bool debug_io_out(struct ioport *ioport, struct kvm_cpu *vcpu, u16 port, void *data, int size)
> >  {
> > +	dummy_mmio(vcpu, port, data, size, true, NULL);
> >  	return 0;
> >  }
> >  
> > @@ -12,15 +18,23 @@ static struct ioport_operations debug_ops = {
> >  	.io_out		= debug_io_out,
> >  };
> >  
> > -static bool seabios_debug_io_out(struct ioport *ioport, struct kvm_cpu *vcpu, u16 port, void *data, int size)
> > +static void seabios_debug_mmio(struct kvm_cpu *vcpu, u64 addr, u8 *data,
> > +			       u32 len, u8 is_write, void *ptr)
> >  {
> >  	char ch;
> >  
> > +	if (!is_write)
> > +		return;
> > +
> >  	ch = ioport__read8(data);
> >  
> >  	putchar(ch);
> > +}
> >  
> > -	return true;
> > +static bool seabios_debug_io_out(struct ioport *ioport, struct kvm_cpu *vcpu, u16 port, void *data, int size)
> > +{
> > +	seabios_debug_mmio(vcpu, port, data, size, true, NULL);
> > +	return 0;
> >  }
> >  
> >  static struct ioport_operations seabios_debug_ops = {
> > @@ -29,11 +43,13 @@ static struct ioport_operations seabios_debug_ops = {
> >  
> >  static bool dummy_io_in(struct ioport *ioport, struct kvm_cpu *vcpu, u16 port, void *data, int size)
> >  {
> > +	dummy_mmio(vcpu, port, data, size, false, NULL);
> >  	return true;
> >  }
> >  
> >  static bool dummy_io_out(struct ioport *ioport, struct kvm_cpu *vcpu, u16 port, void *data, int size)
> >  {
> > +	dummy_mmio(vcpu, port, data, size, true, NULL);
> >  	return true;
> >  }
> >  
> > @@ -50,13 +66,19 @@ static struct ioport_operations dummy_write_only_ioport_ops = {
> >   * The "fast A20 gate"
> >   */
> >  
> > -static bool ps2_control_a_io_in(struct ioport *ioport, struct kvm_cpu *vcpu, u16 port, void *data, int size)
> > +static void ps2_control_mmio(struct kvm_cpu *vcpu, u64 addr, u8 *data, u32 len,
> > +			     u8 is_write, void *ptr)
> >  {
> >  	/*
> >  	 * A20 is always enabled.
> >  	 */
> > -	ioport__write8(data, 0x02);
> > +	if (!is_write)
> > +		ioport__write8(data, 0x02);
> > +}
> >  
> > +static bool ps2_control_a_io_in(struct ioport *ioport, struct kvm_cpu *vcpu, u16 port, void *data, int size)
> > +{
> > +	ps2_control_mmio(vcpu, port, data, size, false, NULL);
> >  	return true;
> >  }
> >    




[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux