ia64/xen-unstable

changeset 6134:37ee6b4b409e

Rearrange code in __start_xen() to work around internal
compiler error in x86/64 gcc.
Signed-off-by: Keir Fraser <keir@xensource.com>
author kaf24@firebug.cl.cam.ac.uk
date Fri Aug 12 09:14:02 2005 +0000 (2005-08-12)
parents 7dc610b0d1ba
children f6d6d17eaeb5 b7ee6eb5000b
files xen/arch/x86/setup.c
line diff
     1.1 --- a/xen/arch/x86/setup.c	Fri Aug 12 07:21:45 2005 +0000
     1.2 +++ b/xen/arch/x86/setup.c	Fri Aug 12 09:14:02 2005 +0000
     1.3 @@ -336,26 +336,25 @@ void __init __start_xen(multiboot_info_t
     1.4      /* Find a large enough RAM extent to stash the DOM0 modules. */
     1.5      for ( i = 0; ; i++ )
     1.6      {
     1.7 -        if ( (e820.map[i].type == E820_RAM) &&
     1.8 -             (e820.map[i].size >= modules_length) &&
     1.9 -             ((e820.map[i].addr + e820.map[i].size) >=
    1.10 -              (xenheap_phys_end + modules_length)) )
    1.11 -        {
    1.12 -            /* Stash as near as possible to the beginning of the RAM extent. */
    1.13 -            initial_images_start = e820.map[i].addr;
    1.14 -            if ( initial_images_start < xenheap_phys_end )
    1.15 -                initial_images_start = xenheap_phys_end;
    1.16 -            initial_images_end = initial_images_start + modules_length;
    1.17 -            break;
    1.18 -        }
    1.19 -
    1.20          if ( i == e820.nr_map )
    1.21          {
    1.22              printk("Not enough memory to stash the DOM0 kernel image.\n");
    1.23              for ( ; ; ) ;
    1.24          }
    1.25 +        
    1.26 +        if ( (e820.map[i].type == E820_RAM) &&
    1.27 +             (e820.map[i].size >= modules_length) &&
    1.28 +             ((e820.map[i].addr + e820.map[i].size) >=
    1.29 +              (xenheap_phys_end + modules_length)) )
    1.30 +            break;
    1.31      }
    1.32  
    1.33 +    /* Stash as near as possible to the beginning of the RAM extent. */
    1.34 +    initial_images_start = e820.map[i].addr;
    1.35 +    if ( initial_images_start < xenheap_phys_end )
    1.36 +        initial_images_start = xenheap_phys_end;
    1.37 +    initial_images_end = initial_images_start + modules_length;
    1.38 +
    1.39  #if defined(CONFIG_X86_32)
    1.40      memmove((void *)initial_images_start,  /* use low mapping */
    1.41              (void *)mod[0].mod_start,      /* use low mapping */