lkml.org 
[lkml]   [2011]   [Feb]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 1/3] KVM: introduce memslots_updated function
    Introduce memslots_updated function which is called after memslots updated

    Signed-off-by: Xiao Guangrong <xiaoguangrong@cn.fujitsu.com>
    ---
    arch/x86/kvm/x86.c | 2 +-
    include/linux/kvm_host.h | 1 +
    virt/kvm/kvm_main.c | 15 +++++++++------
    3 files changed, 11 insertions(+), 7 deletions(-)

    diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
    index 17af71d..888f0b0 100644
    --- a/arch/x86/kvm/x86.c
    +++ b/arch/x86/kvm/x86.c
    @@ -3252,7 +3252,7 @@ int kvm_vm_ioctl_get_dirty_log(struct kvm *kvm,
    goto out;
    memcpy(slots, kvm->memslots, sizeof(struct kvm_memslots));
    slots->memslots[log->slot].dirty_bitmap = dirty_bitmap;
    - slots->generation++;
    + memslots_updated(slots, log->slot);

    old_slots = kvm->memslots;
    rcu_assign_pointer(kvm->memslots, slots);
    diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h
    index 865486f..15ff818 100644
    --- a/include/linux/kvm_host.h
    +++ b/include/linux/kvm_host.h
    @@ -331,6 +331,7 @@ int is_error_pfn(pfn_t pfn);
    int is_hwpoison_pfn(pfn_t pfn);
    int is_fault_pfn(pfn_t pfn);
    int kvm_is_error_hva(unsigned long addr);
    +void memslots_updated(struct kvm_memslots *slots, int slot_id);
    int kvm_set_memory_region(struct kvm *kvm,
    struct kvm_userspace_memory_region *mem,
    int user_alloc);
    diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
    index e3e744c..e1c6e24 100644
    --- a/virt/kvm/kvm_main.c
    +++ b/virt/kvm/kvm_main.c
    @@ -623,6 +623,13 @@ static int kvm_create_dirty_bitmap(struct kvm_memory_slot *memslot)
    }
    #endif /* !CONFIG_S390 */

    +void memslots_updated(struct kvm_memslots *slots, int slot_id)
    +{
    + if (slot_id >= slots->nmemslots)
    + slots->nmemslots = slot_id + 1;
    + slots->generation++;
    +}
    +
    /*
    * Allocate some memory and give it an address in the guest physical address
    * space.
    @@ -768,10 +775,8 @@ skip_lpage:
    if (!slots)
    goto out_free;
    memcpy(slots, kvm->memslots, sizeof(struct kvm_memslots));
    - if (mem->slot >= slots->nmemslots)
    - slots->nmemslots = mem->slot + 1;
    - slots->generation++;
    slots->memslots[mem->slot].flags |= KVM_MEMSLOT_INVALID;
    + memslots_updated(slots, mem->slot);

    old_memslots = kvm->memslots;
    rcu_assign_pointer(kvm->memslots, slots);
    @@ -803,9 +808,6 @@ skip_lpage:
    if (!slots)
    goto out_free;
    memcpy(slots, kvm->memslots, sizeof(struct kvm_memslots));
    - if (mem->slot >= slots->nmemslots)
    - slots->nmemslots = mem->slot + 1;
    - slots->generation++;

    /* actual memory is freed via old in kvm_free_physmem_slot below */
    if (!npages) {
    @@ -816,6 +818,7 @@ skip_lpage:
    }

    slots->memslots[mem->slot] = new;
    + memslots_updated(slots, mem->slot);
    old_memslots = kvm->memslots;
    rcu_assign_pointer(kvm->memslots, slots);
    synchronize_srcu_expedited(&kvm->srcu);
    --
    1.7.4


    \
     
     \ /
      Last update: 2011-02-22 09:13    [W:0.023 / U:178.948 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site