Patch "kvm: factor out core eventfd assign/deassign logic" has been added to the 4.2-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
kvm: factor out core eventfd assign/deassign logic
to the 4.2-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
kvm-factor-out-core-eventfd-assign-deassign-logic.patch
and it can be found in the queue-4.2 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
85da11ca587c8eb73993a1b503052391a73586f9Mon Sep 17 00:00:00 2001
From: Jason Wang <[email protected]>
Date: Tue, 15 Sep 2015 14:41:55 +0800
Subject: kvm: factor out core eventfd assign/deassign logic
From: Jason Wang <[email protected]>
commit 85da11ca587c8eb73993a1b503052391a73586f9 upstream.
This patch factors out core eventfd assign/deassign logic and leaves the argument checking and bus index selection to callers.
--- virt/kvm/eventfd.c | 85 +++++++++++++++++++++++++++++++---------------------- 1 file changed, 50 insertions(+), 35 deletions(-)
virt/kvm/eventfd.c +50 -35
@@ -771,40 +771,14 @@ static enum kvm_bus ioeventfd_bus_from_freturn 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,13 @@ fail: }static int -kvm_deassign_ioeventfd (struct kvm *kvm,struct kvm_ioeventfd *args) +kvm_deassign_ioeventfd_idx (struct kvm *kvm,enum kvm_bus bus_idx, +struct kvm_ioeventfd *args) { -enum kvm_bus bus_idx;struct _ioeventfd *p, *tmp;struct eventfd_ctx *eventfd;int ret = -ENOENT ; - bus_idx =ioeventfd_bus_from_flags (args->flags); eventfd =eventfd_ctx_fdget (args->fd);if (IS_ERR (eventfd))return PTR_ERR (eventfd);
@@ -918,6 +891,48 @@ kvm_deassign_ioeventfd(struct kvm *kvm,return ret; } +static int kvm_deassign_ioeventfd (struct kvm *kvm,struct kvm_ioeventfd *args) +{ +enum kvm_bus bus_idx =ioeventfd_bus_from_flags (args->flags); + +return kvm_deassign_ioeventfd_idx (kvm, bus_idx, args); +} + +static int +kvm_assign_ioeventfd (struct kvm *kvm,struct kvm_ioeventfd *args) +{ +enum kvm_bus bus_idx; + + 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 ; + +return kvm_assign_ioeventfd_idx (kvm, bus_idx, args); +} +int kvm_ioeventfd (struct kvm *kvm,struct kvm_ioeventfd *args) {
Patches currently in stable-queue which might be from [email protected] are
queue-4.2/kvm-fix-double-free-for-fast-mmio-eventfd.patch queue-4.2/kvm-fix-zero-length-mmio-searching.patch queue-4.2/kvm-factor-out-core-eventfd-assign-deassign-logic.patch queue-4.2/kvm-don-t-try-to-register-to-kvm_fast_mmio_bus-for-non-mmio-eventfd.patch