lkml.org 
[lkml]   [2020]   [Oct]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH 3/3] kvm/eventfd: Drain events from eventfd in irqfd_wakeup()
    Hi David,

    I love your patch! Yet something to improve:

    [auto build test ERROR on vfio/next]
    [also build test ERROR on vhost/linux-next linus/master kvm/linux-next v5.10-rc1 next-20201027]
    [If your patch is applied to the wrong git tree, kindly drop us a note.
    And when submitting patch, we suggest to use '--base' as documented in
    https://git-scm.com/docs/git-format-patch]

    url: https://github.com/0day-ci/linux/commits/David-Woodhouse/Allow-in-kernel-consumers-to-drain-events-from-eventfd/20201027-215658
    base: https://github.com/awilliam/linux-vfio.git next
    config: x86_64-randconfig-s021-20201027 (attached as .config)
    compiler: gcc-9 (Debian 9.3.0-15) 9.3.0
    reproduce:
    # apt-get install sparse
    # sparse version: v0.6.3-56-gc09e8239-dirty
    # https://github.com/0day-ci/linux/commit/dc45dd9af28fede8f8dd29b705b90f78cf87538c
    git remote add linux-review https://github.com/0day-ci/linux
    git fetch --no-tags linux-review David-Woodhouse/Allow-in-kernel-consumers-to-drain-events-from-eventfd/20201027-215658
    git checkout dc45dd9af28fede8f8dd29b705b90f78cf87538c
    # save the attached .config to linux build tree
    make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=x86_64

    If you fix the issue, kindly add following tag as appropriate
    Reported-by: kernel test robot <lkp@intel.com>

    All errors (new ones prefixed by >>):

    arch/x86/kvm/../../../virt/kvm/eventfd.c: In function 'irqfd_wakeup':
    >> arch/x86/kvm/../../../virt/kvm/eventfd.c:197:23: error: passing argument 1 of 'eventfd_ctx_do_read' from incompatible pointer type [-Werror=incompatible-pointer-types]
    197 | eventfd_ctx_do_read(&irqfd->eventfd, &cnt);
    | ^~~~~~~~~~~~~~~
    | |
    | struct eventfd_ctx **
    In file included from arch/x86/kvm/../../../virt/kvm/eventfd.c:21:
    include/linux/eventfd.h:44:46: note: expected 'struct eventfd_ctx *' but argument is of type 'struct eventfd_ctx **'
    44 | void eventfd_ctx_do_read(struct eventfd_ctx *ctx, __u64 *cnt);
    | ~~~~~~~~~~~~~~~~~~~~^~~
    cc1: some warnings being treated as errors

    vim +/eventfd_ctx_do_read +197 arch/x86/kvm/../../../virt/kvm/eventfd.c

    180
    181 /*
    182 * Called with wqh->lock held and interrupts disabled
    183 */
    184 static int
    185 irqfd_wakeup(wait_queue_entry_t *wait, unsigned mode, int sync, void *key)
    186 {
    187 struct kvm_kernel_irqfd *irqfd =
    188 container_of(wait, struct kvm_kernel_irqfd, wait);
    189 __poll_t flags = key_to_poll(key);
    190 struct kvm_kernel_irq_routing_entry irq;
    191 struct kvm *kvm = irqfd->kvm;
    192 unsigned seq;
    193 int idx;
    194
    195 if (flags & EPOLLIN) {
    196 u64 cnt;
    > 197 eventfd_ctx_do_read(&irqfd->eventfd, &cnt);
    198
    199 idx = srcu_read_lock(&kvm->irq_srcu);
    200 do {
    201 seq = read_seqcount_begin(&irqfd->irq_entry_sc);
    202 irq = irqfd->irq_entry;
    203 } while (read_seqcount_retry(&irqfd->irq_entry_sc, seq));
    204 /* An event has been signaled, inject an interrupt */
    205 if (kvm_arch_set_irq_inatomic(&irq, kvm,
    206 KVM_USERSPACE_IRQ_SOURCE_ID, 1,
    207 false) == -EWOULDBLOCK)
    208 schedule_work(&irqfd->inject);
    209 srcu_read_unlock(&kvm->irq_srcu, idx);
    210 }
    211
    212 if (flags & EPOLLHUP) {
    213 /* The eventfd is closing, detach from KVM */
    214 unsigned long iflags;
    215
    216 spin_lock_irqsave(&kvm->irqfds.lock, iflags);
    217
    218 /*
    219 * We must check if someone deactivated the irqfd before
    220 * we could acquire the irqfds.lock since the item is
    221 * deactivated from the KVM side before it is unhooked from
    222 * the wait-queue. If it is already deactivated, we can
    223 * simply return knowing the other side will cleanup for us.
    224 * We cannot race against the irqfd going away since the
    225 * other side is required to acquire wqh->lock, which we hold
    226 */
    227 if (irqfd_is_active(irqfd))
    228 irqfd_deactivate(irqfd);
    229
    230 spin_unlock_irqrestore(&kvm->irqfds.lock, iflags);
    231 }
    232
    233 return 0;
    234 }
    235

    ---
    0-DAY CI Kernel Test Service, Intel Corporation
    https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
    [unhandled content-type:application/gzip]
    \
     
     \ /
      Last update: 2020-10-27 19:42    [W:7.233 / U:0.048 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site