diff -r ec03b24a2d83 xen/arch/x86/shadow_public.c --- a/xen/arch/x86/shadow_public.c Tue Aug 15 19:53:55 2006 +0100 +++ b/xen/arch/x86/shadow_public.c Wed Aug 16 15:01:41 2006 +0800 @@ -1104,6 +1104,9 @@ int __shadow_mode_enable(struct domain * { struct vcpu *v; int new_modes = (mode & ~d->arch.shadow_mode); +#if defined(CONFIG_PAGING_LEVELS) + int initial_paging_levels = 3; +#endif // Gotta be adding something to call this function. ASSERT(new_modes); @@ -1112,8 +1115,10 @@ int __shadow_mode_enable(struct domain * ASSERT(!(d->arch.shadow_mode & ~mode)); #if defined(CONFIG_PAGING_LEVELS) - if(!shadow_set_guest_paging_levels(d, - CONFIG_PAGING_LEVELS)) { + if ( CONFIG_PAGING_LEVELS == 2 ) + initial_paging_levels = CONFIG_PAGING_LEVELS; + if ( !shadow_set_guest_paging_levels(d, + initial_paging_levels) ) { printk("Unsupported guest paging levels\n"); domain_crash_synchronous(); /* need to take a clean path */ }