From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jason Wang Subject: Re: [PATCH V4 1/4] kvm: factor out core eventfd assign/deassign logic Date: Fri, 11 Sep 2015 17:14:04 +0800 Message-ID: <55F29B5C.3080408@redhat.com> References: <1441941457-23630-1-git-send-email-jasowang@redhat.com> <1441941457-23630-2-git-send-email-jasowang@redhat.com> <20150911093928.5cb7173c.cornelia.huck@de.ibm.com> Mime-Version: 1.0 Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit Cc: gleb@kernel.org, pbonzini@redhat.com, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, mst@redhat.com To: Cornelia Huck Return-path: Received: from mx1.redhat.com ([209.132.183.28]:57747 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751266AbbIKJOI (ORCPT ); Fri, 11 Sep 2015 05:14:08 -0400 In-Reply-To: <20150911093928.5cb7173c.cornelia.huck@de.ibm.com> Sender: kvm-owner@vger.kernel.org List-ID: On 09/11/2015 03:39 PM, Cornelia Huck wrote: > On Fri, 11 Sep 2015 11:17:34 +0800 > Jason Wang wrote: > >> This patch factors out core eventfd assign/deassign logic and leave >> the argument checking and bus index selection to callers. >> >> Cc: Gleb Natapov >> Cc: Paolo Bonzini >> Signed-off-by: Jason Wang >> --- >> virt/kvm/eventfd.c | 83 ++++++++++++++++++++++++++++++++---------------------- >> 1 file changed, 49 insertions(+), 34 deletions(-) >> >> diff --git a/virt/kvm/eventfd.c b/virt/kvm/eventfd.c >> index 9ff4193..163258d 100644 >> --- a/virt/kvm/eventfd.c >> +++ b/virt/kvm/eventfd.c >> @@ -771,40 +771,14 @@ static enum kvm_bus ioeventfd_bus_from_flags(__u32 flags) >> return KVM_MMIO_BUS; >> } >> >> -static int >> -kvm_assign_ioeventfd(struct kvm *kvm, struct kvm_ioeventfd *args) >> +static int kvm_assign_ioeventfd_idx(struct kvm *kvm, >> + enum kvm_bus bus_idx, >> + struct kvm_ioeventfd *args) >> { >> - enum kvm_bus bus_idx; >> - struct _ioeventfd *p; >> - struct eventfd_ctx *eventfd; >> - int ret; >> - >> - bus_idx = ioeventfd_bus_from_flags(args->flags); >> - /* must be natural-word sized, or 0 to ignore length */ >> - switch (args->len) { >> - case 0: >> - case 1: >> - case 2: >> - case 4: >> - case 8: >> - break; >> - default: >> - return -EINVAL; >> - } >> >> - /* check for range overflow */ >> - if (args->addr + args->len < args->addr) >> - return -EINVAL; >> - >> - /* check for extra flags that we don't understand */ >> - if (args->flags & ~KVM_IOEVENTFD_VALID_FLAG_MASK) >> - return -EINVAL; >> - >> - /* ioeventfd with no length can't be combined with DATAMATCH */ >> - if (!args->len && >> - args->flags & (KVM_IOEVENTFD_FLAG_PIO | >> - KVM_IOEVENTFD_FLAG_DATAMATCH)) >> - return -EINVAL; >> + struct eventfd_ctx *eventfd; >> + struct _ioeventfd *p; >> + int ret; >> >> eventfd = eventfd_ctx_fdget(args->fd); >> if (IS_ERR(eventfd)) >> @@ -873,14 +847,48 @@ fail: >> } >> >> static int >> -kvm_deassign_ioeventfd(struct kvm *kvm, struct kvm_ioeventfd *args) >> +kvm_assign_ioeventfd(struct kvm *kvm, struct kvm_ioeventfd *args) > You'll move this function to below the deassign function in patch 2. > Maybe do it already here? > Yes, this can reduce the changes for patch2.