Xen is intended to be run on server-class machines, and the current
list of supported hardware very much reflects this, avoiding the need
for us to write drivers for "legacy" hardware. Certain desktop chipsets
-such as nvidia nforce2 are currently unsupported.
+such as nvidia nforce2 are not fully supported. Some can be made
+to work by specifying 'noacpi' or 'ignorebiostables' when booting Xen.
Xen requires a "P6" or newer processor (e.g. Pentium Pro, Celeron,
Pentium II, Pentium III, Pentium IV, Xeon, AMD Athlon, AMD Duron).
If you have problems booting Xen, there are a number of boot parameters
that may be able to help diagnose problems:
- noacpi turn acpi probing off, which may confuse Xen on some chipsets
- watchdog enable NMI watchdog which can report certain failures
- nosmp disable SMP support
- noht disable Hyperthreading
- ifname=ethXX select which Ethernet interface to use if you have multiple
- ifname=dummy don't use any network interface
- ser_baud=xxx set serial line baud rate for console
- dom0_mem=xxx set the initial amount of memory for domain0. Xen will also
- reserve some memory fr itself too.
+ ignorebiostables Disable parsing of BIOS-supplied tables. This is needed
+ for some very unsupported chipsets (eg. nforce2). If you
+ specify this option then ACPI tables are also ignored, and
+ SMP suppirt is disabled.
+
+ nosmp Disable SMP support.
+ This option is implied by 'ignorebiostables'.
+
+ noacpi Disable ACPI tables, which confuse Xen on some chipsets.
+ This option is implied by 'ignorebiostables'.
+
+ watchdog Enable NMI watchdog which can report certain failures.
+
+ noht Disable Hyperthreading.
+
+ ifname=ethXX Select which Ethernet interface to use.
+
+ ifname=dummy Don't use any network interface.
+
+ ser_baud=xxx Set serial line baud rate for console.
+
+ dom0_mem=xxx Set the initial amount of memory for domain0.
It's probably a good idea to join the Xen developer's mailing list on
extern void initialize_keytable();
extern void initialize_serial(void);
extern void initialize_keyboard(void);
- extern int opt_nosmp, opt_watchdog;
+ extern int opt_nosmp, opt_watchdog, opt_noacpi, opt_ignorebiostables;
extern int do_timer_lists_from_pit;
unsigned long low_mem_size;
if ( cpu_has_fxsr ) set_in_cr4(X86_CR4_OSFXSR);
if ( cpu_has_xmm ) set_in_cr4(X86_CR4_OSXMMEXCPT);
#ifdef CONFIG_SMP
- find_smp_config(); /* find ACPI tables */
- smp_alloc_memory(); /* trampoline which other CPUs jump at */
+ if ( opt_ignorebiostables )
+ {
+ opt_nosmp = 1; /* No SMP without configuration */
+ opt_noacpi = 1; /* ACPI will just confuse matters also */
+ }
+ else
+ {
+ find_smp_config();
+ smp_alloc_memory(); /* trampoline which other CPUs jump at */
+ }
#endif
paging_init(); /* not much here now, but sets up fixmap */
#ifdef CONFIG_SMP
- if ( smp_found_config ) get_smp_config();
+ if ( smp_found_config )
+ get_smp_config();
#endif
domain_init();
scheduler_init();
#ifndef CONFIG_SMP
APIC_init_uniprocessor();
#else
- if( opt_nosmp )
+ if ( opt_nosmp )
APIC_init_uniprocessor();
else
smp_boot_cpus();
int opt_noacpi=0;
/* opt_nosmp: If true, secondary processors are ignored. */
int opt_nosmp=0;
+/* opt_ignorebiostables: If true, ACPI and MP tables are ignored. */
+/* NB. This flag implies 'nosmp' and 'noacpi'. */
+int opt_ignorebiostables=0;
/* opt_watchdog: If true, run a watchdog NMI on each processor. */
int opt_watchdog=0;
enum { OPT_IP, OPT_STR, OPT_UINT, OPT_BOOL } type;
void *var;
} opts[] = {
- { "console", OPT_UINT, &opt_console },
- { "ser_baud", OPT_UINT, &opt_ser_baud },
- { "dom0_mem", OPT_UINT, &opt_dom0_mem },
- { "ifname", OPT_STR, &opt_ifname },
- { "noht", OPT_BOOL, &opt_noht },
- { "noacpi", OPT_BOOL, &opt_noacpi },
- { "nosmp", OPT_BOOL, &opt_nosmp },
- { "watchdog", OPT_BOOL, &opt_watchdog },
- { NULL, 0, NULL }
+ { "console", OPT_UINT, &opt_console },
+ { "ser_baud", OPT_UINT, &opt_ser_baud },
+ { "dom0_mem", OPT_UINT, &opt_dom0_mem },
+ { "ifname", OPT_STR, &opt_ifname },
+ { "noht", OPT_BOOL, &opt_noht },
+ { "noacpi", OPT_BOOL, &opt_noacpi },
+ { "nosmp", OPT_BOOL, &opt_nosmp },
+ { "ignorebiostables", OPT_BOOL, &opt_ignorebiostables },
+ { "watchdog", OPT_BOOL, &opt_watchdog },
+ { NULL, 0, NULL }
};