From mboxrd@z Thu Jan 1 00:00:00 1970 From: Avi Kivity Subject: Re: [PATCH 10/11] KVM: Enable MSI for device assignment Date: Sun, 23 Nov 2008 12:25:58 +0200 Message-ID: <49292FB6.9030805@redhat.com> References: <1227095114-13792-1-git-send-email-sheng@linux.intel.com> <1227095114-13792-11-git-send-email-sheng@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: kvm@vger.kernel.org To: Sheng Yang Return-path: Received: from mx2.redhat.com ([66.187.237.31]:34961 "EHLO mx2.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752969AbYKWK0C (ORCPT ); Sun, 23 Nov 2008 05:26:02 -0500 In-Reply-To: <1227095114-13792-11-git-send-email-sheng@linux.intel.com> Sender: kvm-owner@vger.kernel.org List-ID: Sheng Yang wrote: > We enable guest MSI and host MSI support in this patch. The userspace want to > enable MSI should set KVM_DEV_IRQ_ASSIGN_ENABLE_MSI in the assigned_irq's flag. > Function would return -ENOTTY if can't enable MSI, userspace shouldn't set MSI > Enable bit when KVM_ASSIGN_IRQ return -ENOTTY with > KVM_DEV_IRQ_ASSIGN_ENABLE_MSI. > > Userspace can tell the support of MSI device from #ifdef KVM_CAP_DEVICE_MSI. > > Signed-off-by: Sheng Yang > --- > include/linux/kvm.h | 3 ++ > virt/kvm/kvm_main.c | 81 +++++++++++++++++++++++++++++++++++++++++++++++---- > 2 files changed, 78 insertions(+), 6 deletions(-) > > diff --git a/include/linux/kvm.h b/include/linux/kvm.h > index bb283c3..e7dae05 100644 > --- a/include/linux/kvm.h > +++ b/include/linux/kvm.h > @@ -392,6 +392,9 @@ struct kvm_trace_rec { > #endif > #define KVM_CAP_IOMMU 18 > #define KVM_CAP_NMI 19 > +#if defined(CONFIG_X86)||defined(CONFIG_IA64) > +#define KVM_CAP_DEVICE_MSI 20 > +#endif > Since the code only enables x86 for now, please drop ia64. > diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c > index c41488f..8e0b599 100644 > --- a/virt/kvm/kvm_main.c > +++ b/virt/kvm/kvm_main.c > @@ -158,9 +158,15 @@ static void kvm_assigned_dev_interrupt_work_handler(struct work_struct *work) > * finer-grained lock, update this > */ > mutex_lock(&assigned_dev->kvm->lock); > - kvm_set_irq(assigned_dev->kvm, > - assigned_dev->irq_source_id, > - assigned_dev->guest_irq, 1); > + if (assigned_dev->irq_requested_type & KVM_ASSIGNED_DEV_GUEST_INTX) > + kvm_set_irq(assigned_dev->kvm, > + assigned_dev->irq_source_id, > + assigned_dev->guest_irq, 1); > + else if (assigned_dev->irq_requested_type & > + KVM_ASSIGNED_DEV_GUEST_MSI) { > + assigned_device_msi_dispatch(assigned_dev); > + enable_irq(assigned_dev->host_irq); > + } > Please move this logic to kvm_set_irq(). Hmm, that's not possible right now, so we can leave it as is for now. -- error compiling committee.c: too many arguments to function