lkml.org 
[lkml]   [2019]   [Oct]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 26/45] KVM: s390: Invoke kvm_vcpu_init() before allocating sie_page
    Date
    Now that s390's implementation of kvm_arch_vcpu_init() is empty, move
    the call to kvm_vcpu_init() above the allocation of the sie_page. This
    paves the way for moving vcpu allocation and initialization into common
    KVM code without any associated functional change.

    Signed-off-by: Sean Christopherson <sean.j.christopherson@intel.com>
    ---
    arch/s390/kvm/kvm-s390.c | 18 ++++++++++--------
    1 file changed, 10 insertions(+), 8 deletions(-)

    diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c
    index 43be136682bb..9289ed10561b 100644
    --- a/arch/s390/kvm/kvm-s390.c
    +++ b/arch/s390/kvm/kvm-s390.c
    @@ -3030,10 +3030,16 @@ struct kvm_vcpu *kvm_arch_vcpu_create(struct kvm *kvm,
    if (!vcpu)
    goto out;

    + rc = kvm_vcpu_init(vcpu, kvm, id);
    + if (rc)
    + goto out_free_cpu;
    +
    + rc = -ENOMEM;
    +
    BUILD_BUG_ON(sizeof(struct sie_page) != 4096);
    sie_page = (struct sie_page *) get_zeroed_page(GFP_KERNEL);
    if (!sie_page)
    - goto out_free_cpu;
    + goto out_uninit_vcpu;

    vcpu->arch.sie_block = &sie_page->sie_block;
    vcpu->arch.sie_block->itdba = (unsigned long) &sie_page->itdb;
    @@ -3049,10 +3055,6 @@ struct kvm_vcpu *kvm_arch_vcpu_create(struct kvm *kvm,
    vcpu->arch.sie_block->gd |= GISA_FORMAT1;
    seqcount_init(&vcpu->arch.cputm_seqcount);

    - rc = kvm_vcpu_init(vcpu, kvm, id);
    - if (rc)
    - goto out_free_sie_block;
    -
    vcpu->arch.pfault_token = KVM_S390_PFAULT_TOKEN_INVALID;
    kvm_clear_async_pf_completion_queue(vcpu);
    vcpu->run->kvm_valid_regs = KVM_SYNC_PREFIX |
    @@ -3081,7 +3083,7 @@ struct kvm_vcpu *kvm_arch_vcpu_create(struct kvm *kvm,
    if (kvm_is_ucontrol(vcpu->kvm)) {
    rc = __kvm_ucontrol_vcpu_init(vcpu);
    if (rc)
    - goto out_uninit_vcpu;
    + goto out_free_sie_block;
    }

    VM_EVENT(kvm, 3, "create cpu %d at 0x%pK, sie block at 0x%pK", id, vcpu,
    @@ -3089,10 +3091,10 @@ struct kvm_vcpu *kvm_arch_vcpu_create(struct kvm *kvm,
    trace_kvm_s390_create_vcpu(id, vcpu, vcpu->arch.sie_block);

    return vcpu;
    -out_uninit_vcpu:
    - kvm_vcpu_uninit(vcpu);
    out_free_sie_block:
    free_page((unsigned long)(vcpu->arch.sie_block));
    +out_uninit_vcpu:
    + kvm_vcpu_uninit(vcpu);
    out_free_cpu:
    kmem_cache_free(kvm_vcpu_cache, vcpu);
    out:
    --
    2.22.0
    \
     
     \ /
      Last update: 2019-10-22 04:03    [W:3.493 / U:0.440 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site