• David Woodhouse's avatar
    sched/wait: Add add_wait_queue_priority() · c4d51a52
    David Woodhouse authored
    This allows an exclusive wait_queue_entry to be added at the head of the
    queue, instead of the tail as normal. Thus, it gets to consume events
    first without allowing non-exclusive waiters to be woken at all.
    
    The (first) intended use is for KVM IRQFD, which currently has
    inconsistent behaviour depending on whether posted interrupts are
    available or not. If they are, KVM will bypass the eventfd completely
    and deliver interrupts directly to the appropriate vCPU. If not, events
    are delivered through the eventfd and userspace will receive them when
    polling on the eventfd.
    
    By using add_wait_queue_priority(), KVM will be able to consistently
    consume events within the kernel without accidentally exposing them
    to userspace when they're supposed to be bypassed. This, in turn, means
    that userspace doesn't have to jump through hoops to avoid listening
    on the erroneously noisy eventfd and injecting duplicate interrupts.
    Signed-off-by: default avatarDavid Woodhouse <dwmw@amazon.co.uk>
    Message-Id: <20201027143944.648769-2-dwmw2@infradead.org>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    c4d51a52
wait.c 14.1 KB