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
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