Hi, Keir
Do you mean a patch like this?
Thanks
Yunhong Jiang
--- a/xen/arch/x86/vmx.c Mon Sep 19 13:24:31 2005
+++ b/xen/arch/x86/vmx.c Tue Sep 20 16:47:34 2005
@@ -1100,6 +1100,10 @@
d->arch.arch_vmx.cpu_cr3, mfn);
}
+ if(!((value & X86_CR0_PE) && (value & X86_CR0_PG)) && paging_enabled)
+ if(d->arch.arch_vmx.cpu_cr3)
+ put_page(pfn_to_page(get_mfn_from_pfn(
+ d->arch.arch_vmx.cpu_cr3 >> PAGE_SHIFT)));
/*
* VMX does not implement real-mode virtualization. We emulate
* real-mode by performing a world switch to VMXAssist whenever
Keir Fraser wrote:
> On 19 Sep 2005, at 11:52, Jiang, Yunhong wrote:
>
>>> I think it's more correct to do get/put in vmx_set_cr0 (at that
>>> point we can know what format the pagetables should be, for example
>>> (32/32p/64). But I think it's a bigger cleanup patch.
>>
>> Do you mean put all get/put on vmx_set_cr0 ? even for paging enabled
>> case?
>
> No, I mean that get/put on cr3 change (or guest destruction) should be
> gated on CR0_PG. Then, additionally, get or put is required when
> CR0_PG is toggled.
>
>> And there is one more issue .If the guest is destroyed before the
>> kernel enabling paging, how about the page pointed by cr3? It may
>> cause one referece count left. The reason is, currently when destroy
>> domain, only domain->guest_table is released. However, if the paging
>> is not enabled, then the get_page on vmx_set_cr0 has no corresponding
>> put_page, which may cause problem. Hope comments on this point.
>
> Doing what I describe above would fix this: CR0_PG would be clear, so
> put_page() would not happen.
>
>>>
>>> Whatever you go for: please send a complete tested patch. :-)
>>
>> Sure!
>
> Thanks!
>
> -- Keir
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|