aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
Diffstat (limited to 'arch')
-rw-r--r--arch/ia64/kvm/kvm-ia64.c19
1 files changed, 13 insertions, 6 deletions
diff --git a/arch/ia64/kvm/kvm-ia64.c b/arch/ia64/kvm/kvm-ia64.c
index a6cf719811b7..800a4f2e917e 100644
--- a/arch/ia64/kvm/kvm-ia64.c
+++ b/arch/ia64/kvm/kvm-ia64.c
@@ -1437,17 +1437,24 @@ int kvm_arch_set_memory_region(struct kvm *kvm,
1437 int user_alloc) 1437 int user_alloc)
1438{ 1438{
1439 unsigned long i; 1439 unsigned long i;
1440 struct page *page; 1440 unsigned long pfn;
1441 int npages = mem->memory_size >> PAGE_SHIFT; 1441 int npages = mem->memory_size >> PAGE_SHIFT;
1442 struct kvm_memory_slot *memslot = &kvm->memslots[mem->slot]; 1442 struct kvm_memory_slot *memslot = &kvm->memslots[mem->slot];
1443 unsigned long base_gfn = memslot->base_gfn; 1443 unsigned long base_gfn = memslot->base_gfn;
1444 1444
1445 for (i = 0; i < npages; i++) { 1445 for (i = 0; i < npages; i++) {
1446 page = gfn_to_page(kvm, base_gfn + i); 1446 pfn = gfn_to_pfn(kvm, base_gfn + i);
1447 kvm_set_pmt_entry(kvm, base_gfn + i, 1447 if (!kvm_is_mmio_pfn(pfn)) {
1448 page_to_pfn(page) << PAGE_SHIFT, 1448 kvm_set_pmt_entry(kvm, base_gfn + i,
1449 _PAGE_AR_RWX|_PAGE_MA_WB); 1449 pfn << PAGE_SHIFT,
1450 memslot->rmap[i] = (unsigned long)page; 1450 _PAGE_MA_WB);
1451 memslot->rmap[i] = (unsigned long)pfn_to_page(pfn);
1452 } else {
1453 kvm_set_pmt_entry(kvm, base_gfn + i,
1454 GPFN_LOW_MMIO | (pfn << PAGE_SHIFT),
1455 _PAGE_MA_UC);
1456 memslot->rmap[i] = 0;
1457 }
1451 } 1458 }
1452 1459
1453 return 0; 1460 return 0;