[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: [Xen-devel] Cs/ 14346 breaks 64bit hv


  • To: "Woller, Thomas" <thomas.woller@xxxxxxx>, xen-devel@xxxxxxxxxxxxxxxxxxx
  • From: "Woller, Thomas" <thomas.woller@xxxxxxx>
  • Date: Wed, 14 Mar 2007 01:47:01 -0500
  • Delivery-date: Tue, 13 Mar 2007 23:46:24 -0700
  • List-id: Xen developer discussion <xen-devel.lists.xensource.com>
  • Thread-index: Acdlw4R1sYja/9ERS+2bokByIRmUGQANY4Ng
  • Thread-topic: [Xen-devel] Cs/ 14346 breaks 64bit hv

Initial email was incorrect.  The issue is not with c/s 14346 but with
14345.  c/s 14344 is able to boot pae/64b HVM AMD-V guests on AMD-V
without issue, while c/s 14345 fails.

[snip from 14345 changeset]
 #endif
-  /* Debugging info */
-  printf("Booting from %x:%x\n", bootseg, bootip);
   
   /* Jump to the boot vector */
 ASM_START
[end code snippet]

Removing the printf causes pae and 64bit HVM AMD-V guests to fail to
boot on 64bit hypervisor.
If I add just the single "printf" line back into the rombios.c file,
then guests boot without issues.
Very strange!  
Tested with only changing the hvmloader, starting with an installed
14344 base, and used the 14345 hvmloader, result is grub failure.


Took a look at the rombios.s code generated in both cases (14344 and
14345) and seems like the "jump to the boot vector" code is not executed
on the failing case.  There is a "default: return" in the function
immediately above an "#if BX_TCGBIOS", and then the non-executed asm
code. 
Is bcc not understanding that the asm code following should be executed?
Seems like there is added a default "return" so that the "jump to boot
vector" code is never executed?  appears to be the case..but not sure.  
Code snippets are below.  Using gcc 3.3.5, but will try 4.x compiler,
although looks like bcc is used to generate the rombios.s file if I read
the Makefile correctly.

Any thoughts appreciated.

[code from rombios.c]
  default: return;
  }

#if BX_TCGBIOS
  tcpa_ipl((Bit32u)bootseg);               /* specs: 8.2.3 steps 4 and 5
*/
#endif
/* 14345 removes this: printf("Booting from %x:%x\n", bootseg, bootip);
*/
  
  /* Jump to the boot vector */
ASM_START
    mov  bp, sp
    ;; Build an iret stack frame that will take us to the boot vector.
    ;; iret pops ip, then cs, then flags, so push them in the opposite
order.
    pushf
    mov  ax, _int18_function.bootseg + 0[bp] 
    push ax
    mov  ax, _int18_function.bootip + 0[bp] 
    push ax

[code from 14344 that boots ]
push    -$A[bp]
push    -8[bp]
mov     bx,#.668
push    bx
mov     ax,*2
push    ax
call    _bios_printf
add     sp,*8
! 6170 
! 6171 
! 6172  #asm
!BCC_ASM
_int18_function.bootip  set     $12
_int18_function.seq_nr  set     $20
_int18_function.bootchk set     $16
_int18_function.bootseg set     $14
_int18_function.ebda_seg        set     $1A
_int18_function.status  set     $10
_int18_function.bootdrv set     $17
_int18_function.bootdev set     $18
_int18_function.e       set     0
    mov bp, sp
    ;; Build an iret stack frame that will take us to the boot vector.
    ;; iret pops ip, then cs, then flags, so push them in the opposite
order.
    pushf
    mov ax, _int18_function.bootseg + 0[bp]
    push ax
    mov ax, _int18_function.bootip + 0[bp]


[code from 14345 that does not boot ]
mov     -$A[bp],ax
! 6161     break;
jmp .654
! 6162 
! 6163   default: return;
.667:
mov     sp,bp
pop     bp
ret
! 6164   }
! 6165 
! 6166 
! 6167 
! 6168 
! 6169 
! 6170 
! 6171 
! 6172  #asm
!BCC_ASM
_int18_function.bootip  set     $12
_int18_function.seq_nr  set     $20
_int18_function.bootchk set     $16
_int18_function.bootseg set     $14
_int18_function.ebda_seg        set     $1A
_int18_function.status  set     $10
_int18_function.bootdrv set     $17
_int18_function.bootdev set     $18
_int18_function.e       set     0
    mov bp, sp
    ;; Build an iret stack frame that will take us to the boot vector.
    ;; iret pops ip, then cs, then flags, so push them in the opposite
order.
    pushf
    mov ax, _int18_function.bootseg + 0[bp]
    push ax
    mov ax, _int18_function.bootip + 0[bp]
    push ax


tom

 

> -----Original Message-----
> From: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx 
> [mailto:xen-devel-bounces@xxxxxxxxxxxxxxxxxxx] On Behalf Of 
> Woller, Thomas
> Sent: Tuesday, March 13, 2007 6:01 PM
> To: xen-devel@xxxxxxxxxxxxxxxxxxx
> Subject: [Xen-devel] Cs/ 14346 breaks 64bit hv
> 
> Hi Keir,
> Appears as if c/s 14346 has broken booting pae and 64bit HVM 
> linux guests, on 64bit hv on AMD-V.  
> 
> Seems like grub can't find a bootable device, and errors out.
> 
> We haven't tried VT boxes at this point.  We just uncovered 
> this issue and will investigate more.  Looks like 32bit 
> hypervisor works ok, but haven't tested thoroughly.
> 
> We'll look at the patch, but if you have any thoughts. 
> Appreciate taking a closer look at the modification.
> 
>   --Tom
> 
> thomas.woller@xxxxxxx
> AMD Corporation
> 5204 E. Ben White Blvd. UBC1
> Austin, Texas 78741
> +1-512-602-0059
> 
> 
> 
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxxxxxxxx
> http://lists.xensource.com/xen-devel
> 
> 
> 



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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.