|
@@ -1739,7 +1739,7 @@ static int emulator_cmpxchg_emulated(unsigned long addr,
|
|
if (bytes == 8) {
|
|
if (bytes == 8) {
|
|
gpa_t gpa;
|
|
gpa_t gpa;
|
|
struct page *page;
|
|
struct page *page;
|
|
- char *addr;
|
|
|
|
|
|
+ char *kaddr;
|
|
u64 val;
|
|
u64 val;
|
|
|
|
|
|
down_read(¤t->mm->mmap_sem);
|
|
down_read(¤t->mm->mmap_sem);
|
|
@@ -1754,9 +1754,9 @@ static int emulator_cmpxchg_emulated(unsigned long addr,
|
|
|
|
|
|
val = *(u64 *)new;
|
|
val = *(u64 *)new;
|
|
page = gfn_to_page(vcpu->kvm, gpa >> PAGE_SHIFT);
|
|
page = gfn_to_page(vcpu->kvm, gpa >> PAGE_SHIFT);
|
|
- addr = kmap_atomic(page, KM_USER0);
|
|
|
|
- set_64bit((u64 *)(addr + offset_in_page(gpa)), val);
|
|
|
|
- kunmap_atomic(addr, KM_USER0);
|
|
|
|
|
|
+ kaddr = kmap_atomic(page, KM_USER0);
|
|
|
|
+ set_64bit((u64 *)(kaddr + offset_in_page(gpa)), val);
|
|
|
|
+ kunmap_atomic(kaddr, KM_USER0);
|
|
kvm_release_page_dirty(page);
|
|
kvm_release_page_dirty(page);
|
|
emul_write:
|
|
emul_write:
|
|
up_read(¤t->mm->mmap_sem);
|
|
up_read(¤t->mm->mmap_sem);
|