## Parameter details
### acpi
-> `= force | ht | noirq | <boolean>`
+> `= force | ht | noirq | <boolean> | verbose`
**String**, or **Boolean** to disable.
-The **acpi** option is used to control a set of four related boolean
-flags; `acpi_force`, `acpi_ht`, `acpi_noirq` and `acpi_disabled`.
-
By default, Xen will scan the DMI data and blacklist certain systems
which are known to have broken ACPI setups. Providing `acpi=force`
will cause Xen to ignore the blacklist and attempt to use all ACPI
Additionally, this will not prevent Xen from finding IO-APIC entries
from the MP tables.
-Finally, any of the boolean false options can be used to disable ACPI
+Further, any of the boolean false options can be used to disable ACPI
usage entirely.
Because responsibility for ACPI processing is shared between Xen and
the domain 0 kernel this option is automatically propagated to the
-domain 0 command line
+domain 0 command line.
+
+Finally, `acpi=verbose` will enable per-processor information logging
+which may otherwise be too noisy in particular on large systems.
### acpi_apic_instance
> `= <integer>`
/* "acpi=force": Override the disable blacklist. */
/* "acpi=ht": Limit ACPI just to boot-time to enable HT. */
/* "acpi=noirq": Disables ACPI interrupt routing. */
+/* "acpi=verbose": Enables more verbose ACPI boot time logging. */
static int parse_acpi_param(const char *s);
custom_param("acpi", parse_acpi_param);
static int __init parse_acpi_param(const char *s)
{
- /* Save the parameter so it can be propagated to domain0. */
- safe_strcpy(acpi_param, s);
-
/* Interpret the parameter for use within Xen. */
if ( !parse_bool(s, NULL) )
{
{
acpi_noirq_set();
}
+ else if ( !strcmp(s, "verbose") )
+ {
+ opt_acpi_verbose = true;
+ return 0;
+ }
else
return -EINVAL;
+ /* Save the parameter so it can be propagated to domain0. */
+ safe_strcpy(acpi_param, s);
+
return 0;
}
apicid_to_node[pa->apic_id] = node;
node_set(node, processor_nodes_parsed);
acpi_numa = 1;
- printk(KERN_INFO "SRAT: PXM %u -> APIC %08x -> Node %u\n",
- pxm, pa->apic_id, node);
+
+ if (opt_acpi_verbose)
+ printk(KERN_INFO "SRAT: PXM %u -> APIC %08x -> Node %u\n",
+ pxm, pa->apic_id, node);
}
/* Callback for Proximity Domain -> LAPIC mapping */
apicid_to_node[pa->apic_id] = node;
node_set(node, processor_nodes_parsed);
acpi_numa = 1;
- printk(KERN_INFO "SRAT: PXM %u -> APIC %02x -> Node %u\n",
- pxm, pa->apic_id, node);
+
+ if (opt_acpi_verbose)
+ printk(KERN_INFO "SRAT: PXM %u -> APIC %02x -> Node %u\n",
+ pxm, pa->apic_id, node);
}
/* Callback for parsing of the Proximity Domain <-> Memory Area mappings */
#define ACPI_MAX_TABLES 128
+bool __initdata opt_acpi_verbose;
+
static const char *__initdata
mps_inti_flags_polarity[] = { "dfl", "high", "res", "low" };
static const char *__initdata
switch (header->type) {
case ACPI_MADT_TYPE_LOCAL_APIC:
+ if (opt_acpi_verbose)
{
struct acpi_madt_local_apic *p =
(struct acpi_madt_local_apic *)header;
break;
case ACPI_MADT_TYPE_LOCAL_X2APIC:
+ if (opt_acpi_verbose)
{
struct acpi_madt_local_x2apic *p =
(struct acpi_madt_local_x2apic *)header;
break;
case ACPI_MADT_TYPE_LOCAL_APIC_NMI:
+ if (opt_acpi_verbose)
{
struct acpi_madt_local_apic_nmi *p =
(struct acpi_madt_local_apic_nmi *)header;
break;
case ACPI_MADT_TYPE_LOCAL_X2APIC_NMI:
+ if (opt_acpi_verbose)
{
u16 polarity, trigger;
struct acpi_madt_local_x2apic_nmi *p =
break;
case ACPI_MADT_TYPE_LOCAL_SAPIC:
+ if (opt_acpi_verbose)
{
struct acpi_madt_local_sapic *p =
(struct acpi_madt_local_sapic *)header;
extern acpi_physical_address rsdp_hint;
+extern bool opt_acpi_verbose;
+
enum acpi_interrupt_id {
ACPI_INTERRUPT_PMI = 1,
ACPI_INTERRUPT_INIT,