From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sheng Yang Subject: Re: [PATCH 01/16] kvm: ioctl for KVM_ASSIGN_DEV_IRQ and KVM_DEASSIGN_DEV_IRQ Date: Thu, 12 Mar 2009 21:40:12 +0800 Message-ID: <200903122140.12457.sheng@linux.intel.com> References: <1236865019-30321-1-git-send-email-sheng@linux.intel.com> <1236865019-30321-2-git-send-email-sheng@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="iso-8859-15" Content-Transfer-Encoding: 7bit Cc: Marcelo Tosatti , Anthony Liguori , kvm@vger.kernel.org To: Avi Kivity Return-path: Received: from mga05.intel.com ([192.55.52.89]:4766 "EHLO fmsmga101.fm.intel.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752525AbZCLNkQ (ORCPT ); Thu, 12 Mar 2009 09:40:16 -0400 In-Reply-To: <1236865019-30321-2-git-send-email-sheng@linux.intel.com> Content-Disposition: inline Sender: kvm-owner@vger.kernel.org List-ID: On Thursday 12 March 2009 21:36:44 Sheng Yang wrote: > From: Marcelo Tosatti > > Signed-off-by: Sheng Yang Oops.. Should be Marcelo's signed-off here... -- regards Yang, Sheng > --- > libkvm/libkvm.c | 38 +++++++++++++++++++++++++++++++++++++- > libkvm/libkvm.h | 21 +++++++++++++++++---- > 2 files changed, 54 insertions(+), 5 deletions(-) > > diff --git a/libkvm/libkvm.c b/libkvm/libkvm.c > index 0ac1c28..80a0481 100644 > --- a/libkvm/libkvm.c > +++ b/libkvm/libkvm.c > @@ -1141,7 +1141,7 @@ int kvm_assign_pci_device(kvm_context_t kvm, > return ret; > } > > -int kvm_assign_irq(kvm_context_t kvm, > +static int kvm_old_assign_irq(kvm_context_t kvm, > struct kvm_assigned_irq *assigned_irq) > { > int ret; > @@ -1152,6 +1152,42 @@ int kvm_assign_irq(kvm_context_t kvm, > > return ret; > } > + > +#ifdef KVM_CAP_ASSIGN_DEV_IRQ > +int kvm_assign_irq(kvm_context_t kvm, > + struct kvm_assigned_irq *assigned_irq) > +{ > + int ret; > + > + ret = ioctl(kvm->fd, KVM_CHECK_EXTENSION, KVM_CAP_ASSIGN_DEV_IRQ); > + if (ret > 0) { > + ret = ioctl(kvm->vm_fd, KVM_ASSIGN_DEV_IRQ, assigned_irq); > + if (ret < 0) > + return -errno; > + return ret; > + } > + > + return kvm_old_assign_irq(kvm, assigned_irq); > +} > + > +int kvm_deassign_irq(kvm_context_t kvm, > + struct kvm_assigned_irq *assigned_irq) > +{ > + int ret; > + > + ret = ioctl(kvm->vm_fd, KVM_DEASSIGN_DEV_IRQ, assigned_irq); > + if (ret < 0) > + return -errno; > + > + return ret; > +} > +#else > +int kvm_assign_irq(kvm_context_t kvm, > + struct kvm_assigned_irq *assigned_irq) > +{ > + return kvm_old_assign_irq(kvm, assigned_irq); > +} > +#endif > #endif > > #ifdef KVM_CAP_DEVICE_DEASSIGNMENT > diff --git a/libkvm/libkvm.h b/libkvm/libkvm.h > index 0239cb6..3e5efe0 100644 > --- a/libkvm/libkvm.h > +++ b/libkvm/libkvm.h > @@ -715,11 +715,10 @@ int kvm_assign_pci_device(kvm_context_t kvm, > struct kvm_assigned_pci_dev *assigned_dev); > > /*! > - * \brief Notifies host kernel about changes to IRQ for an assigned device > + * \brief Assign IRQ for an assigned device > * > - * Used for PCI device assignment, this function notifies the host > - * kernel about the changes in IRQ number for an assigned physical > - * PCI device. > + * Used for PCI device assignment, this function assigns IRQ numbers for > + * an physical device and guest IRQ handling. > * > * \param kvm Pointer to the current kvm_context > * \param assigned_irq Parameters, like dev id, host irq, guest irq, etc > @@ -727,6 +726,20 @@ int kvm_assign_pci_device(kvm_context_t kvm, > int kvm_assign_irq(kvm_context_t kvm, > struct kvm_assigned_irq *assigned_irq); > > +#ifdef KVM_CAP_ASSIGN_DEV_IRQ > +/*! > + * \brief Deassign IRQ for an assigned device > + * > + * Used for PCI device assignment, this function deassigns IRQ numbers > + * for an assigned device. > + * > + * \param kvm Pointer to the current kvm_context > + * \param assigned_irq Parameters, like dev id, host irq, guest irq, etc > + */ > +int kvm_deassign_irq(kvm_context_t kvm, > + struct kvm_assigned_irq *assigned_irq); > +#endif > + > /*! > * \brief Determines whether destroying memory regions is allowed > *