RE: [PATCH 6/8]kvm/ia64: Make pmt table be able to hold physical mmio entries.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Fixed. Thank you, Amit! Attached new version. 
>From 4f8d82eeb3f2eb8d2e97d28d5738958a483120e6 Mon Sep 17 00:00:00 2001
From: Xiantao Zhang <xiantao.zhang@xxxxxxxxx>
Date: Fri, 3 Oct 2008 14:58:09 +0800
Subject: [PATCH] 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: Xiantao Zhang <xiantao.zhang@xxxxxxxxx>
---
 arch/ia64/kvm/kvm-ia64.c |   19 +++++++++++++------
 1 files changed, 13 insertions(+), 6 deletions(-)

diff --git a/arch/ia64/kvm/kvm-ia64.c b/arch/ia64/kvm/kvm-ia64.c
index 7ad759e..d79be08 100644
--- a/arch/ia64/kvm/kvm-ia64.c
+++ b/arch/ia64/kvm/kvm-ia64.c
@@ -1436,17 +1436,24 @@ int kvm_arch_set_memory_region(struct kvm *kvm,
 		int user_alloc)
 {
 	unsigned long i;
-	struct page *page;
+	unsigned long pfn;
 	int npages = mem->memory_size >> PAGE_SHIFT;
 	struct kvm_memory_slot *memslot = &kvm->memslots[mem->slot];
 	unsigned long base_gfn = memslot->base_gfn;
 
 	for (i = 0; i < npages; i++) {
-		page = gfn_to_page(kvm, base_gfn + i);
-		kvm_set_pmt_entry(kvm, base_gfn + i,
-				page_to_pfn(page) << PAGE_SHIFT,
-				_PAGE_AR_RWX|_PAGE_MA_WB);
-		memslot->rmap[i] = (unsigned long)page;
+		pfn = gfn_to_pfn(kvm, base_gfn + i);
+		if (!kvm_is_mmio_pfn(pfn)) {
+			kvm_set_pmt_entry(kvm, base_gfn + i,
+					pfn << PAGE_SHIFT,
+					_PAGE_MA_WB);
+			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;
-- 
1.5.1


Amit Shah wrote:
> * On Monday 29 Sep 2008 10:56:58 Zhang, Xiantao wrote:
>> From c459cae4b89b445a2b85be915b269676b6ff394f Mon Sep 17 00:00:00
>> 2001 From: Xiantao Zhang <xiantao.zhang@xxxxxxxxx>
>> Date: Sat, 27 Sep 2008 12:52:35 +0800
>> Subject: [PATCH] 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: Xiantao Zhang <xiantao.zhang@xxxxxxxxx> ---
>>  arch/ia64/kvm/kvm-ia64.c |   20 +++++++++++++-------
>>  1 files changed, 13 insertions(+), 7 deletions(-)
>> 
>> diff --git a/arch/ia64/kvm/kvm-ia64.c b/arch/ia64/kvm/kvm-ia64.c
>> index a6cf719..20622d6 100644
>> --- a/arch/ia64/kvm/kvm-ia64.c
>> +++ b/arch/ia64/kvm/kvm-ia64.c
>> @@ -1437,17 +1437,23 @@ int kvm_arch_set_memory_region(struct kvm
>>  *kvm,  		int user_alloc) {
>>  	unsigned long i;
>> -	struct page *page;
>> +	unsigned long pfn;
>>  	int npages = mem->memory_size >> PAGE_SHIFT;
>>  	struct kvm_memory_slot *memslot = &kvm->memslots[mem->slot];
>>  	unsigned long base_gfn = memslot->base_gfn;
>> -
>>  	for (i = 0; i < npages; i++) {
> 
> Please keep that line break; it'll be tougher to read without that.

Attachment: 0006-kvm-ia64-Make-pmt-table-be-able-to-hold-physical-mm.patch
Description: 0006-kvm-ia64-Make-pmt-table-be-able-to-hold-physical-mm.patch


[Index of Archives]     [Linux KVM Devel]     [Linux Virtualization]     [Big List of Linux Books]     [Linux SCSI]     [Yosemite Forum]

  Powered by Linux