On 10/08/2015 16:02, Jens Freimann wrote:
> When we add new adapter routes we call kvm_irqchip_add_route() for every
> virtqueue and in the same step also do the KVM_SET_GSI_ROUTING ioctl.
> 
> This is unnecessary costly as the interface allows us to set multiple
> routes in one go. Let's first add all routes to the table stored in the
> global kvm_state and then do the ioctl to commit the routes to the
> in-kernel irqchip.
> 
> This saves us several ioctls to the kernel where for each call a list
> is reallocated and populated.

Acked-by: Paolo Bonzini <pbonz...@redhat.com>

but we should do the same for kvm_irqchip_add_msi_route as well.  I'll
prepare a patch.

Paolo

> Signed-off-by: Jens Freimann <jf...@linux.vnet.ibm.com>
> Reviewed-by: David Hildenbrand <d...@linux.vnet.ibm.com>
> ---
>  hw/intc/s390_flic_kvm.c | 2 ++
>  kvm-all.c               | 1 -
>  2 files changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/hw/intc/s390_flic_kvm.c b/hw/intc/s390_flic_kvm.c
> index b471e7a..48714f9 100644
> --- a/hw/intc/s390_flic_kvm.c
> +++ b/hw/intc/s390_flic_kvm.c
> @@ -228,6 +228,8 @@ static int kvm_s390_add_adapter_routes(S390FLICState *fs,
>          routes->gsi[i] = ret;
>          routes->adapter.ind_offset++;
>      }
> +    kvm_irqchip_commit_routes(kvm_state);
> +
>      /* Restore passed-in structure to original state. */
>      routes->adapter.ind_offset = ind_offset;
>      return 0;
> diff --git a/kvm-all.c b/kvm-all.c
> index 06e06f2..c6f5128 100644
> --- a/kvm-all.c
> +++ b/kvm-all.c
> @@ -1293,7 +1293,6 @@ int kvm_irqchip_add_adapter_route(KVMState *s, 
> AdapterInfo *adapter)
>      kroute.u.adapter.adapter_id = adapter->adapter_id;
>  
>      kvm_add_routing_entry(s, &kroute);
> -    kvm_irqchip_commit_routes(s);
>  
>      return virq;
>  }
> -- 2.3.8

Reply via email to