Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1cbea809 authored by Xiantao Zhang's avatar Xiantao Zhang Committed by Avi Kivity
Browse files

KVM: ia64: Make pmt table be able to hold physical mmio entries.



Don't try to do put_page once the entries are mmio.
Set the tag to indicate the mmio space for vmm setting
TLB's memory attribute.

Signed-off-by: default avatarXiantao Zhang <xiantao.zhang@intel.com>
Signed-off-by: default avatarAvi Kivity <avi@qumranet.com>
parent 2f749771
Loading
Loading
Loading
Loading
+13 −6
Original line number Original line Diff line number Diff line
@@ -1437,17 +1437,24 @@ int kvm_arch_set_memory_region(struct kvm *kvm,
		int user_alloc)
		int user_alloc)
{
{
	unsigned long i;
	unsigned long i;
	struct page *page;
	unsigned long pfn;
	int npages = mem->memory_size >> PAGE_SHIFT;
	int npages = mem->memory_size >> PAGE_SHIFT;
	struct kvm_memory_slot *memslot = &kvm->memslots[mem->slot];
	struct kvm_memory_slot *memslot = &kvm->memslots[mem->slot];
	unsigned long base_gfn = memslot->base_gfn;
	unsigned long base_gfn = memslot->base_gfn;


	for (i = 0; i < npages; i++) {
	for (i = 0; i < npages; i++) {
		page = gfn_to_page(kvm, base_gfn + i);
		pfn = gfn_to_pfn(kvm, base_gfn + i);
		if (!kvm_is_mmio_pfn(pfn)) {
			kvm_set_pmt_entry(kvm, base_gfn + i,
			kvm_set_pmt_entry(kvm, base_gfn + i,
				page_to_pfn(page) << PAGE_SHIFT,
					pfn << PAGE_SHIFT,
				_PAGE_AR_RWX|_PAGE_MA_WB);
					_PAGE_MA_WB);
		memslot->rmap[i] = (unsigned long)page;
			memslot->rmap[i] = (unsigned long)pfn_to_page(pfn);
		} else {
			kvm_set_pmt_entry(kvm, base_gfn + i,
					GPFN_LOW_MMIO | (pfn << PAGE_SHIFT),
					_PAGE_MA_UC);
			memslot->rmap[i] = 0;
			}
	}
	}


	return 0;
	return 0;