Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 356921
b: refs/heads/master
c: 7a905b1
h: refs/heads/master
i:
  356919: 72b8582
v: v3
  • Loading branch information
Takuya Yoshikawa authored and Gleb Natapov committed Feb 11, 2013
1 parent f74ae99 commit 3430e48
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 24 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 257090f70233084488f7b3ebe99be8c159a23281
refs/heads/master: 7a905b1485adf863607b5fc9e32a3fa3838bcc23
37 changes: 16 additions & 21 deletions trunk/arch/x86/kvm/x86.c
Original file line number Diff line number Diff line change
Expand Up @@ -6897,33 +6897,28 @@ int kvm_arch_prepare_memory_region(struct kvm *kvm,
bool user_alloc)
{
int npages = memslot->npages;
int map_flags = MAP_PRIVATE | MAP_ANONYMOUS;

/* Prevent internal slot pages from being moved by fork()/COW. */
if (memslot->id >= KVM_USER_MEM_SLOTS)
map_flags = MAP_SHARED | MAP_ANONYMOUS;

/*To keep backward compatibility with older userspace,
*x86 needs to handle !user_alloc case.
/*
* Only private memory slots need to be mapped here since
* KVM_SET_MEMORY_REGION ioctl is no longer supported.
*/
if (!user_alloc) {
if (npages && !old.npages) {
unsigned long userspace_addr;
if ((memslot->id >= KVM_USER_MEM_SLOTS) && npages && !old.npages) {
unsigned long userspace_addr;

userspace_addr = vm_mmap(NULL, 0,
npages * PAGE_SIZE,
PROT_READ | PROT_WRITE,
map_flags,
0);
/*
* MAP_SHARED to prevent internal slot pages from being moved
* by fork()/COW.
*/
userspace_addr = vm_mmap(NULL, 0, npages * PAGE_SIZE,
PROT_READ | PROT_WRITE,
MAP_SHARED | MAP_ANONYMOUS, 0);

if (IS_ERR((void *)userspace_addr))
return PTR_ERR((void *)userspace_addr);
if (IS_ERR((void *)userspace_addr))
return PTR_ERR((void *)userspace_addr);

memslot->userspace_addr = userspace_addr;
}
memslot->userspace_addr = userspace_addr;
}


return 0;
}

Expand All @@ -6935,7 +6930,7 @@ void kvm_arch_commit_memory_region(struct kvm *kvm,

int nr_mmu_pages = 0, npages = mem->memory_size >> PAGE_SHIFT;

if (!user_alloc && !old.user_alloc && old.npages && !npages) {
if ((mem->slot >= KVM_USER_MEM_SLOTS) && old.npages && !npages) {
int ret;

ret = vm_munmap(old.userspace_addr,
Expand Down
1 change: 0 additions & 1 deletion trunk/include/linux/kvm_host.h
Original file line number Diff line number Diff line change
Expand Up @@ -273,7 +273,6 @@ struct kvm_memory_slot {
unsigned long userspace_addr;
u32 flags;
short id;
bool user_alloc;
};

static inline unsigned long kvm_dirty_bitmap_bytes(struct kvm_memory_slot *memslot)
Expand Down
1 change: 0 additions & 1 deletion trunk/virt/kvm/kvm_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -839,7 +839,6 @@ int __kvm_set_memory_region(struct kvm *kvm,

r = -ENOMEM;
if (change == KVM_MR_CREATE) {
new.user_alloc = user_alloc;
new.userspace_addr = mem->userspace_addr;

if (kvm_arch_create_memslot(&new, npages))
Expand Down

0 comments on commit 3430e48

Please sign in to comment.