lkml.org 
[lkml]   [2020]   [Sep]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[RFC PATCH 1/3] KVM: Export kvm_make_all_cpus_request() for use in marking VMs as bugged
    Date
    Export kvm_make_all_cpus_request() and hoist the request helper
    declarations of request up to the KVM_REQ_* definitions in preparation
    for adding a "VM bugged" framework. The framework will add KVM_BUG()
    and KVM_BUG_ON() as alternatives to full BUG()/BUG_ON() for cases where
    KVM has definitely hit a bug (in itself or in silicon) and the VM is all
    but guaranteed to be hosed. Marking a VM bugged will trigger a request
    to all vCPUs to allow arch code to forcefully evict each vCPU from its
    run loop.

    Signed-off-by: Sean Christopherson <sean.j.christopherson@intel.com>
    ---
    include/linux/kvm_host.h | 18 +++++++++---------
    virt/kvm/kvm_main.c | 1 +
    2 files changed, 10 insertions(+), 9 deletions(-)

    diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h
    index 05e3c2fb3ef7..1d70aeeb7ec3 100644
    --- a/include/linux/kvm_host.h
    +++ b/include/linux/kvm_host.h
    @@ -154,6 +154,15 @@ static inline bool is_error_page(struct page *page)
    })
    #define KVM_ARCH_REQ(nr) KVM_ARCH_REQ_FLAGS(nr, 0)

    +bool kvm_make_vcpus_request_mask(struct kvm *kvm, unsigned int req,
    + struct kvm_vcpu *except,
    + unsigned long *vcpu_bitmap, cpumask_var_t tmp);
    +bool kvm_make_all_cpus_request(struct kvm *kvm, unsigned int req);
    +bool kvm_make_all_cpus_request_except(struct kvm *kvm, unsigned int req,
    + struct kvm_vcpu *except);
    +bool kvm_make_cpus_request_mask(struct kvm *kvm, unsigned int req,
    + unsigned long *vcpu_bitmap);
    +
    #define KVM_USERSPACE_IRQ_SOURCE_ID 0
    #define KVM_IRQFD_RESAMPLE_IRQ_SOURCE_ID 1

    @@ -845,15 +854,6 @@ void kvm_mmu_free_memory_cache(struct kvm_mmu_memory_cache *mc);
    void *kvm_mmu_memory_cache_alloc(struct kvm_mmu_memory_cache *mc);
    #endif

    -bool kvm_make_vcpus_request_mask(struct kvm *kvm, unsigned int req,
    - struct kvm_vcpu *except,
    - unsigned long *vcpu_bitmap, cpumask_var_t tmp);
    -bool kvm_make_all_cpus_request(struct kvm *kvm, unsigned int req);
    -bool kvm_make_all_cpus_request_except(struct kvm *kvm, unsigned int req,
    - struct kvm_vcpu *except);
    -bool kvm_make_cpus_request_mask(struct kvm *kvm, unsigned int req,
    - unsigned long *vcpu_bitmap);
    -
    long kvm_arch_dev_ioctl(struct file *filp,
    unsigned int ioctl, unsigned long arg);
    long kvm_arch_vcpu_ioctl(struct file *filp,
    diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
    index cf88233b819a..bf3f333c7a19 100644
    --- a/virt/kvm/kvm_main.c
    +++ b/virt/kvm/kvm_main.c
    @@ -306,6 +306,7 @@ bool kvm_make_all_cpus_request(struct kvm *kvm, unsigned int req)
    {
    return kvm_make_all_cpus_request_except(kvm, req, NULL);
    }
    +EXPORT_SYMBOL_GPL(kvm_make_all_cpus_request);

    #ifndef CONFIG_HAVE_KVM_ARCH_TLB_FLUSH_ALL
    void kvm_flush_remote_tlbs(struct kvm *kvm)
    --
    2.28.0
    \
     
     \ /
      Last update: 2020-09-24 00:47    [W:3.666 / U:25.480 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site