ia64/xen-unstable

changeset 12462:344fc55eb52f

[IA64] MCA support - Disable CPE interrupt mode for dom0

This patch disables CPE interupt mode for dom0. In current MCA
implementaion, CPE interrupts do not notify to dom0. The dom0 is
expected to get error logs in polling mode.

Therefore I modified the ACPI table to disable CPE interrupt mode
in before the address of it is passed through to dom0. I think that
there is no problem because the initialization of ACPI is completed by
the passed time even if this modification is added.

Signed-off-by: Yutaka Ezaki <yutaka.ezaki@jp.fujitsu.com>
Signed-off-by: Masaki Kanno <kanno.masaki@jp.fujitsu.com>
Signed-off-by: Kazuhiro Suzuki <kaz@jp.fujitsu.com>
author awilliam@xenbuild.aw
date Wed Nov 15 11:55:04 2006 -0700 (2006-11-15)
parents cef0cc0a3236
children 05d227d81935
files xen/arch/ia64/xen/dom_fw.c
line diff
     1.1 --- a/xen/arch/ia64/xen/dom_fw.c	Wed Nov 15 11:34:31 2006 -0700
     1.2 +++ b/xen/arch/ia64/xen/dom_fw.c	Wed Nov 15 11:55:04 2006 -0700
     1.3 @@ -240,6 +240,23 @@ acpi_update_lsapic (acpi_table_entry_hea
     1.4  	return 0;
     1.5  }
     1.6  
     1.7 +static int __init
     1.8 +acpi_patch_plat_int_src (
     1.9 +	acpi_table_entry_header *header, const unsigned long end)
    1.10 +{
    1.11 +	struct acpi_table_plat_int_src *plintsrc;
    1.12 +
    1.13 +	plintsrc = (struct acpi_table_plat_int_src *)header;
    1.14 +	if (!plintsrc)
    1.15 +		return -EINVAL;
    1.16 +
    1.17 +	if (plintsrc->type == ACPI_INTERRUPT_CPEI) {
    1.18 +		printk("ACPI_INTERRUPT_CPEI disabled for Domain0\n");
    1.19 +		plintsrc->type = -1;
    1.20 +	}
    1.21 +	return 0;
    1.22 +}
    1.23 +
    1.24  static u8
    1.25  generate_acpi_checksum(void *tbl, unsigned long len)
    1.26  {
    1.27 @@ -271,7 +288,11 @@ static void touch_acpi_table(void)
    1.28  {
    1.29  	lsapic_nbr = 0;
    1.30  	if (acpi_table_parse_madt(ACPI_MADT_LSAPIC, acpi_update_lsapic, 0) < 0)
    1.31 -		printk("Error parsing MADT - no LAPIC entires\n");
    1.32 +		printk("Error parsing MADT - no LAPIC entries\n");
    1.33 +	if (acpi_table_parse_madt(ACPI_MADT_PLAT_INT_SRC,
    1.34 +	                          acpi_patch_plat_int_src, 0) < 0)
    1.35 +		printk("Error parsing MADT - no PLAT_INT_SRC entries\n");
    1.36 +
    1.37  	acpi_table_parse(ACPI_APIC, acpi_update_madt_checksum);
    1.38  
    1.39  	return;