Hi Tristan,
This issue is due to cset 115 in Open GFW, although actually the older
xen implies a slight bug. The combination of newer GFW and old hypervisor
can't work well.
Attached patch fixes it. Please apply.
Thanks,
Kouya
tgingold@xxxxxxx writes:
> Quoting "Mu, Qin" <qin.mu@xxxxxxxxx>:
>
> > Xen/IPF 3.2.1-rc4 Test Result:
> > =============================================================
> > Issues:
> >
> > 1. If configured with Open GFW of version 119, Windows guest boot-up
> > hangs up at starting windows stage, despite of the "R" status observed
> > from command "xm list".
> > All test cases relating window HVM consequently failed. Please see the
> > attached snapshot captured at Windows guest booting time.
> > Windows HVM guests boot-up success with using Open GFW of version 92.
>
> Ok. After merging the last submitted patch I will make a new binary release.
>
> Tristan.
>
> _______________________________________________
> Xen-ia64-devel mailing list
> Xen-ia64-devel@xxxxxxxxxxxxxxxxxxx
> http://lists.xensource.com/xen-ia64-devel
# HG changeset patch
# User Kouya Shimura <kouya@xxxxxxxxxxxxxx>
# Date 1207948585 -32400
# Node ID 71080197611f18bcd27221e08101df3b0d583f66
# Parent c51f419011fd0a6319c8527ecf75c028ff1089a2
Fix windows 2003 boot issue again.
Windows 2003 can't boot on older Xen hypervisor due to cset 115.
Signed-off-by: Kouya Shimura <kouya@xxxxxxxxxxxxxx>
diff -r c51f419011fd -r 71080197611f edk2-sparse/EdkXenPkg/SecMain/Ipf/startup.s
--- a/edk2-sparse/EdkXenPkg/SecMain/Ipf/startup.s Tue Apr 01 04:04:02
2008 +0200
+++ b/edk2-sparse/EdkXenPkg/SecMain/Ipf/startup.s Sat Apr 12 06:16:25
2008 +0900
@@ -186,39 +186,6 @@ IpfContextBuf:
// loc4 - temporary storage of last address in context record
HookHandler:
- // switch to using physical data addressing
-#define IA64_PSR_DT_BIT 17
-#define IA64_PSR_RT_BIT 27
-#define IA64_PSR_DT (1<<IA64_PSR_DT_BIT)
-#define IA64_PSR_RT (1<<IA64_PSR_RT_BIT)
- mov r30=pr
- mov r16=psr
- movl r17=~(IA64_PSR_DT|IA64_PSR_RT)
- ;;
- tbit.nz p6,p0=r16,IA64_PSR_DT_BIT
- and r17=r16,r17
- ;;
-(p6) mov psr.l=r17
- ;;
-(p6) srlz.d
- mov pr=r30,-1
- ;;
- // now we are in physical data addressing mode
- mov r16=cr.iip
- mov r17=cr.ifa
- mov r20=cr.isr
-#if 0
- mov r18=pr
- mov r19=0x5a00
- ;;
- cmp.eq p6,p7=r19,SCRATCH_REG1
- ;;
-(p6) break.m 0
- ;;
- mov pr=r18
-#endif
- ;;
-// flushrs
#define CTXT_SIZE 62 // Must be a multiple of 2
add sp=-((CTXT_SIZE + 2) * 8),sp // Also reserve scratch area
mov r19=ar.unat
@@ -947,7 +914,7 @@ _start:
movl r8=sale_entry
mov ar.bspstore=r2
;;
- /* pin mapping into tr[0] for IVT */
+ /* pin mapping into itr[0] for IVT */
mov r2=16<<2 // 64KB
movl r4=(1<<52)|0x661 // ED,AR=3,PL=0(RWX),D,A,P
;;
@@ -956,6 +923,23 @@ _start:
mov cr.ifa=r11
;;
itr.i itr[r0]=r4
+ ;;
+ /*
+ * pin mapping into dtr[0] for legacy I/O.
+ * This is a workaround for Windows 2003 which set psr.dt=1
+ * on boot, while EFI's KeyboardTimerHandler reads a legacy i/o
+ * port periodically. That causes a data nested tlb fault.
+ */
+#define LEGACY_IO_START 0x00000000e0000000
+#define UC_ATTR 0x8000000000000000
+ mov r2=26<<2 // 64MB
+ movl r11=UC_ATTR|LEGACY_IO_START
+ ;;
+ mov cr.itir=r2
+ mov cr.ifa=r11
+ movl r4=(1<<52)|LEGACY_IO_START|0x661 // ED,AR=3,PL=0(RWX),D,A,P
+ ;;
+ itr.d dtr[r0]=r4
;;
srlz.d
//mov ar.rsc=3 // eager mode
_______________________________________________
Xen-ia64-devel mailing list
Xen-ia64-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-ia64-devel
|