diff mbox series

[kvmtool,16/21] vfio: Switch to new ioport trap handlers

Message ID 20201210142908.169597-17-andre.przywara@arm.com (mailing list archive)
State New, archived
Headers show
Series Unify I/O port and MMIO trap handling | expand

Commit Message

Andre Przywara Dec. 10, 2020, 2:29 p.m. UTC
Now that the vfio 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>
---
 vfio/core.c | 29 ++++++-----------------------
 1 file changed, 6 insertions(+), 23 deletions(-)

Comments

Alexandru Elisei Feb. 16, 2021, 2:52 p.m. UTC | #1
Hi Andre,

Looks good, _vfio_ioport_{in,out} could have been renamed to vfio_ioport_{in,out},
but it's fine either way:

Reviewed-by: Alexandru Elisei <alexandru.elisei@arm.com>

Thanks,

Alex

On 12/10/20 2:29 PM, Andre Przywara wrote:
> Now that the vfio 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>
> ---
>  vfio/core.c | 29 ++++++-----------------------
>  1 file changed, 6 insertions(+), 23 deletions(-)
>
> diff --git a/vfio/core.c b/vfio/core.c
> index f55f1f87..10919101 100644
> --- a/vfio/core.c
> +++ b/vfio/core.c
> @@ -160,25 +160,6 @@ static void vfio_ioport_mmio(struct kvm_cpu *vcpu, u64 addr, u8 *data, u32 len,
>  		_vfio_ioport_in(region, offset, data, len);
>  }
>  
> -static bool vfio_ioport_out(struct ioport *ioport, struct kvm_cpu *vcpu,
> -			    u16 port, void *data, int len)
> -{
> -	vfio_ioport_mmio(vcpu, port, data, len, true, ioport->priv);
> -	return true;
> -}
> -
> -static bool vfio_ioport_in(struct ioport *ioport, struct kvm_cpu *vcpu,
> -			   u16 port, void *data, int len)
> -{
> -	vfio_ioport_mmio(vcpu, port, data, len, false, ioport->priv);
> -	return true;
> -}
> -
> -static struct ioport_operations vfio_ioport_ops = {
> -	.io_in	= vfio_ioport_in,
> -	.io_out	= vfio_ioport_out,
> -};
> -
>  static void vfio_mmio_access(struct kvm_cpu *vcpu, u64 addr, u8 *data, u32 len,
>  			     u8 is_write, void *ptr)
>  {
> @@ -223,9 +204,11 @@ static int vfio_setup_trap_region(struct kvm *kvm, struct vfio_device *vdev,
>  				  struct vfio_region *region)
>  {
>  	if (region->is_ioport) {
> -		int port = ioport__register(kvm, region->port_base,
> -					   &vfio_ioport_ops, region->info.size,
> -					   region);
> +		int port;
> +
> +		port = kvm__register_pio(kvm, region->port_base,
> +					 region->info.size, vfio_ioport_mmio,
> +					 region);
>  		if (port < 0)
>  			return port;
>  		return 0;
> @@ -292,7 +275,7 @@ void vfio_unmap_region(struct kvm *kvm, struct vfio_region *region)
>  		munmap(region->host_addr, region->info.size);
>  		region->host_addr = NULL;
>  	} else if (region->is_ioport) {
> -		ioport__unregister(kvm, region->port_base);
> +		kvm__deregister_pio(kvm, region->port_base);
>  	} else {
>  		kvm__deregister_mmio(kvm, region->guest_phys_addr);
>  	}
diff mbox series

Patch

diff --git a/vfio/core.c b/vfio/core.c
index f55f1f87..10919101 100644
--- a/vfio/core.c
+++ b/vfio/core.c
@@ -160,25 +160,6 @@  static void vfio_ioport_mmio(struct kvm_cpu *vcpu, u64 addr, u8 *data, u32 len,
 		_vfio_ioport_in(region, offset, data, len);
 }
 
-static bool vfio_ioport_out(struct ioport *ioport, struct kvm_cpu *vcpu,
-			    u16 port, void *data, int len)
-{
-	vfio_ioport_mmio(vcpu, port, data, len, true, ioport->priv);
-	return true;
-}
-
-static bool vfio_ioport_in(struct ioport *ioport, struct kvm_cpu *vcpu,
-			   u16 port, void *data, int len)
-{
-	vfio_ioport_mmio(vcpu, port, data, len, false, ioport->priv);
-	return true;
-}
-
-static struct ioport_operations vfio_ioport_ops = {
-	.io_in	= vfio_ioport_in,
-	.io_out	= vfio_ioport_out,
-};
-
 static void vfio_mmio_access(struct kvm_cpu *vcpu, u64 addr, u8 *data, u32 len,
 			     u8 is_write, void *ptr)
 {
@@ -223,9 +204,11 @@  static int vfio_setup_trap_region(struct kvm *kvm, struct vfio_device *vdev,
 				  struct vfio_region *region)
 {
 	if (region->is_ioport) {
-		int port = ioport__register(kvm, region->port_base,
-					   &vfio_ioport_ops, region->info.size,
-					   region);
+		int port;
+
+		port = kvm__register_pio(kvm, region->port_base,
+					 region->info.size, vfio_ioport_mmio,
+					 region);
 		if (port < 0)
 			return port;
 		return 0;
@@ -292,7 +275,7 @@  void vfio_unmap_region(struct kvm *kvm, struct vfio_region *region)
 		munmap(region->host_addr, region->info.size);
 		region->host_addr = NULL;
 	} else if (region->is_ioport) {
-		ioport__unregister(kvm, region->port_base);
+		kvm__deregister_pio(kvm, region->port_base);
 	} else {
 		kvm__deregister_mmio(kvm, region->guest_phys_addr);
 	}