Re: [PATCH 05/17] KVM: Move irq routing to generic code

Michael S. Tsirkin
2013-04-25T10:19:32Z

On Fri, Apr 19, 2013 at 04:06:16PM +0200, Alexander Graf wrote:
> The IRQ routing set ioctl lives in the hacky device assignment code inside
> of KVM today. This is definitely the wrong place for it. Move it to the much
> more natural kvm_main.c.
>
> Signed-off-by: Alexander Graf <agraf@suse.de>

Acked-by: Michael S. Tsirkin <mst@redhat.com>

> ---
> virt/kvm/assigned-dev.c | 30 ------------------------------
> virt/kvm/kvm_main.c | 30 ++++++++++++++++++++++++++++++
> 2 files changed, 30 insertions(+), 30 deletions(-)
>
> diff --git a/virt/kvm/assigned-dev.c b/virt/kvm/assigned-dev.c
> index f4c7f59..8db4370 100644
> --- a/virt/kvm/assigned-dev.c
> +++ b/virt/kvm/assigned-dev.c
> @@ -983,36 +983,6 @@ long kvm_vm_ioctl_assigned_device(struct kvm *kvm, unsigned ioctl,
> goto out;
> break;
> }
> -#ifdef KVM_CAP_IRQ_ROUTING
> - case KVM_SET_GSI_ROUTING: {
> - struct kvm_irq_routing routing;
> - struct kvm_irq_routing __user *urouting;
> - struct kvm_irq_routing_entry *entries;
> -
> - r = -EFAULT;
> - if (copy_from_user(&routing, argp, sizeof(routing)))
> - goto out;
> - r = -EINVAL;
> - if (routing.nr >= KVM_MAX_IRQ_ROUTES)
> - goto out;
> - if (routing.flags)
> - goto out;
> - r = -ENOMEM;
> - entries = vmalloc(routing.nr * sizeof(*entries));
> - if (!entries)
> - goto out;
> - r = -EFAULT;
> - urouting = argp;
> - if (copy_from_user(entries, urouting->entries,
> - routing.nr * sizeof(*entries)))
> - goto out_free_irq_routing;
> - r = kvm_set_irq_routing(kvm, entries, routing.nr,
> - routing.flags);
> - out_free_irq_routing:
> - vfree(entries);
> - break;
> - }
> -#endif /* KVM_CAP_IRQ_ROUTING */
> #ifdef __KVM_HAVE_MSIX
> case KVM_ASSIGN_SET_MSIX_NR: {
> struct kvm_assigned_msix_nr entry_nr;
> diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
> index 2c3b226..b6f3354 100644
> --- a/virt/kvm/kvm_main.c
> +++ b/virt/kvm/kvm_main.c
> @@ -2274,6 +2274,36 @@ static long kvm_vm_ioctl(struct file *filp,
> break;
> }
> #endif
> +#ifdef CONFIG_HAVE_KVM_IRQ_ROUTING
> + case KVM_SET_GSI_ROUTING: {
> + struct kvm_irq_routing routing;
> + struct kvm_irq_routing __user *urouting;
> + struct kvm_irq_routing_entry *entries;
> +
> + r = -EFAULT;
> + if (copy_from_user(&routing, argp, sizeof(routing)))
> + goto out;
> + r = -EINVAL;
> + if (routing.nr >= KVM_MAX_IRQ_ROUTES)
> + goto out;
> + if (routing.flags)
> + goto out;
> + r = -ENOMEM;
> + entries = vmalloc(routing.nr * sizeof(*entries));
> + if (!entries)
> + goto out;
> + r = -EFAULT;
> + urouting = argp;
> + if (copy_from_user(entries, urouting->entries,
> + routing.nr * sizeof(*entries)))
> + goto out_free_irq_routing;
> + r = kvm_set_irq_routing(kvm, entries, routing.nr,
> + routing.flags);
> + out_free_irq_routing:
> + vfree(entries);
> + break;
> + }
> +#endif /* CONFIG_HAVE_KVM_IRQ_ROUTING */
> default:
> r = kvm_arch_vm_ioctl(filp, ioctl, arg);
> if (r = -ENOTTY)
> --
> 1.6.0.2
>
> --
> To unsubscribe from this list: send the line "unsubscribe kvm" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html