I found the reason why mfn_valid behaves abnormally.  We should mask out 
TLB_TRACK bits  from p2m entry before using it as mfn_valid's parameter. 

diff -r 4a5acf020c0f xen/arch/ia64/vmx/vtlb.c
--- a/xen/arch/ia64/vmx/vtlb.c  Thu Oct 30 11:51:55 2008 +0900
+++ b/xen/arch/ia64/vmx/vtlb.c  Thu Oct 30 21:57:38 2008 +0800
@@ -522,7 +522,8 @@
      * which is required by vga acceleration since qemu maps shared
      * vram buffer with WB.
      */
-    if (mfn_valid(maddr >> PAGE_SHIFT) && phy_pte.ma != VA_MATTR_NATPAGE)
+    if (mfn_valid((maddr & _PAGE_PPN_MASK) >> PAGE_SHIFT) 
+                               && phy_pte.ma != VA_MATTR_NATPAGE)
         phy_pte.ma = VA_MATTR_WB;
 
     maddr = ((maddr & _PAGE_PPN_MASK) & PAGE_MASK) | (paddr & ~PAGE_MASK);
diff -r 4a5acf020c0f xen/arch/ia64/xen/mm.c
--- a/xen/arch/ia64/xen/mm.c    Thu Oct 30 11:51:55 2008 +0900
+++ b/xen/arch/ia64/xen/mm.c    Thu Oct 30 21:57:38 2008 +0800
@@ -926,7 +926,8 @@
     /* in HVM guest, when VTD is enabled,
      * P2M entry may change from _PAGE_IO type to real MMIO page 
      */
-    if(VMX_DOMAIN(d->vcpu[0]) && (pte_val(ret_pte) & _PAGE_IO)) {
+    if(is_hvm_domain(d) && (pte_val(ret_pte) & _PAGE_IO) && 
+       !mfn_valid(physaddr >> PAGE_SHIFT)) {
         old_pte = ret_pte;
         goto again_hvm_page_io;
     }



Zhang, Xiantao wrote:
> Isaku Yamahata wrote:
>> On Wed, Oct 29, 2008 at 04:10:50PM +0800, Zhang, Jingke wrote:
>>> Hi all,
>>>     There is one new regression in Cset#18691. With latest
>>> Cset#18694, all the case can pass!
>>> 
>>>     One regression between Cset#18688 and Cset#18691: ==============
>>>     1. Qemu graphic mode display abnormally while booting
>>>         VTI_Windows and Linux-Xwin. This issue existed in either
>>> sdl=1 or vnc=1 mode. And this issue does not exist with Cset#18688.
>> 
>> Hmm, I suspect the change set 18689:7ad8c47f5c4b. But I'm not sure.
> Hi, Isaku
>       We found the cause,maybe rootcause.  18669 may has a poetentail
> issue, but doesn't lead to the issue.  We found valid_mfn() doesn't
> work in its way, and seems it is buggy.  I have no enough time to
> debug it, but the following patch should fix the current issue.   
> 
> diff -r a6b1be5a83de xen/arch/ia64/vmx/vtlb.c
> --- a/xen/arch/ia64/vmx/vtlb.c  Wed Oct 29 11:02:23 2008 +0900
> +++ b/xen/arch/ia64/vmx/vtlb.c  Thu Oct 30 13:47:08 2008 +0800
> @@ -522,7 +522,7 @@
>       * which is required by vga acceleration since qemu maps shared
>       * vram buffer with WB.
>       */
> -    if (mfn_valid(maddr >> PAGE_SHIFT) && phy_pte.ma ==
> VA_MATTR_NATPAGE) +    if (!(maddr >> 61) && phy_pte.ma ==
>          VA_MATTR_NATPAGE) phy_pte.ma = VA_MATTR_WB;
> 
>      maddr = ((maddr & _PAGE_PPN_MASK) & PAGE_MASK) | (paddr &
> ~PAGE_MASK); 
> 
> Xiantao
> _______________________________________________
> Xen-ia64-devel mailing list
> Xen-ia64-devel@lists.xensource.com
> http://lists.xensource.com/xen-ia64-devel

Attachment: fix-vga-abnormal.patch
Description: fix-vga-abnormal.patch

_______________________________________________
Xen-ia64-devel mailing list
Xen-ia64-devel@lists.xensource.com
http://lists.xensource.com/xen-ia64-devel

Reply via email to