>>Problem (as reported by dsteklof@xxxxxxxxxx)
>>>I'm hitting an ASSERT in alloc_monitor_pagetable() with debug=y and I
>>>can reproduce the condition when debug isn't on. The monitor_table is
>>>not zeroed when entering alloc_monitor_pagetable() - this
>>happens when I
>>>create a vmx guest. I'm not sure why this happening at first glance.
>>>File: xen/arch/x86/shadow32.c
>>>Line: 689
>>>System: VT/VMX FC3 x86_32 (I can reproduce on FC4 x86_64 too)
>>>ASSERT(pagetable_get_paddr(v->arch.monitor_table) == 0);
>>
>>Solution:
>>What happens is that the monitor page table is not zeroed out
>>during the initial setup for VMX guests. As a result, at a later
>>time when we enable shadow mode for these VMX guests, we trip on
>>the ASSERT problem above. To fix this, we just need to initialize
>>the monitor page table to 0 before calling vmx_final_setup_guest()
>>and enabling shadow mode.
>>
>>This patch has been tested well with VMX guests running WinXP.
>>Please let me know if you need further information, or if you
>>have any comments, suggestions, etc. Thanks.
>>
>>(See attached file: monitor_table.patch)
>
>This patch doesn't really fix the issue here, actually in
>alloc_vcpu, we
>do a memset on the allocated vcpu structure, so monitor_table should be
>0, but I'm not seeing where it is set to a none 0 value.
>
>The problem the patch will cause is, on a SMP VMX guest, monitor
>pagetable is allocated for each vcpu in shadow_mode_enable, which is
>called when we initialize vcpu 0, but it is set to 0 in
>arch_set_info_guest later :(, so it's only OK to vcpu 0.
>
>I think we need find the point where monitor_table is set to a none 0
>value.
In alloc_vcpu_struct, after doing a memset on the new allocated vcpu, we
do a memcpy from idle0_vcpu.arch to arch of the new vcpu, which causes
monitor_pagetable is set to a none 0 value. For VMX guest which is
using external shadow mode, this is not what we really need. the
previous patch is OK for UP VMX guest, but failed on SMP VMX guest. The
attached patch fixes it.
Signed-off-by: Xin Li <xin.b.li@xxxxxxxxx>
thanks
-Xin
>_______________________________________________
>Xen-devel mailing list
>Xen-devel@xxxxxxxxxxxxxxxxxxx
>http://lists.xensource.com/xen-devel
>
zero_vmx_monitor_pagetable.patch
Description: zero_vmx_monitor_pagetable.patch
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|