WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

Re: [Xen-devel] [PATCH] [Xen] Check FADT's signature

To: Keir Fraser <keir@xxxxxxxxxxxxx>
Subject: Re: [Xen-devel] [PATCH] [Xen] Check FADT's signature
From: Stefan Berger <stefanb@xxxxxxxxxx>
Date: Fri, 10 Aug 2007 07:36:44 -0400
Cc: xen-devel <xen-devel@xxxxxxxxxxxxxxxxxxx>
Delivery-date: Fri, 10 Aug 2007 04:37:12 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
In-reply-to: <C2E1CA86.C5C2%keir@xxxxxxxxxxxxx>
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx

Again the output and the debugging changes to acpi/boot.c.

There are 5 additional calls to the fadt parser.

   Stefan

[...]
(XEN) sign: RSDT; name=RSDT0
(XEN) ACPI: RSDT (v001 IBM    SERBLADE 0x00001000 IBM  0x45444f43) @ 0x3ffcff80
(XEN) (2) Mapped 0x3ffcfec0 to fff9bec0, base = 0xfff9b000
(XEN) (2) Mapped 0x3ffcfec0 to fff9bec0, base = 0xfff9b000
(XEN) sign: FACP; name=FADT
(XEN) ACPI: FADT (v002 IBM    SERBLADE 0x00001000 IBM  0x45444f43) @ 0x3ffcfec0
(XEN) std_entry[0].id = 7,matches sign FACP
(XEN) (2) Mapped 0x3ffcfe00 to fff9be00, base = 0xfff9b000
(XEN) (2) Mapped 0x3ffcfe00 to fff9be00, base = 0xfff9b000
(XEN) sign: APIC; name=MADT
(XEN) ACPI: MADT (v001 IBM    SERBLADE 0x00001000 IBM  0x45444f43) @ 0x3ffcfe00
(XEN) std_entry[1].id = 1,matches sign APIC
(XEN) (2) Mapped 0x3ffcfdc0 to fff9bdc0, base = 0xfff9b000
(XEN) (2) Mapped 0x3ffcfdc0 to fff9bdc0, base = 0xfff9b000
(XEN) sign: MCFG; name=MCFG<
(XEN) ACPI: MCFG (v001 IBM    SERBLADE 0x00001000 IBM  0x45444f43) @ 0x3ffcfdc0
(XEN) std_entry[2].id = 18,matches sign MCFG
(XEN) (2) Mapped 0x3ffcfec0 to fff9bec0, base = 0xfff9b000
(XEN) (2) Mapped 0x3ffbe4a8 to fff9b4a8, base = 0xfff9b000
(XEN) sign: DSDT; name=DSDT
(XEN) ACPI: DSDT (v001 IBM    SERBLADE 0x00001000 INTL 0x02002025) @ 0x00000000
(XEN) NUMA turned off
(XEN) Faking a node at 0000000000000000-000000003ffb0000
(XEN) Xen heap: 9MB (10184kB)
(XEN) Domain heap initialised: DMA width 32 bits
(XEN) PAE enabled, limit: 16 GB
(XEN) found SMP MP-table at 0009d540
(XEN) DMI 2.3 present.
(XEN) (1) Mapped 0xf601f to ff0f601f
(XEN) Using APIC driver default
(XEN) IN acpi_parse_fadt.
(XEN) (2) Mapped 0x3ffcfec0 to fff9bec0, base = 0xfff9b000
(XEN) ACPI: Invalid FADT signature A__ADR

(XEN) IN acpi_parse_fadt.
(XEN) (2) Mapped 0x3ffcfec0 to fff9bec0, base = 0xfff9b000
(XEN) ACPI: PM-Timer IO Port: 0x588

(XEN) (2) Mapped 0x3ffcfd80 to fff9bd80, base = 0xfff9b000
(XEN) ACPI: ACPI SLEEP INFO: pm1x_cnt[584,0], pm1x_evt[580,0]
(XEN)                  wakeup_vec[3ffcfd8c], vec_size[20]
(XEN) IN acpi_parse_fadt.
(XEN) (2) Mapped 0x3ffcfec0 to fff9bec0, base = 0xfff9b000
(XEN) ACPI: PM-Timer IO Port: 0x588

(XEN) (2) Mapped 0x3ffcfd80 to fff9bd80, base = 0xfff9b000
(XEN) ACPI: ACPI SLEEP INFO: pm1x_cnt[584,0], pm1x_evt[580,0]
(XEN)                  wakeup_vec[3ffcfd8c], vec_size[20]
(XEN) IN acpi_parse_fadt.
(XEN) (2) Mapped 0x3ffcfec0 to fff9bec0, base = 0xfff9b000
(XEN) ACPI: PM-Timer IO Port: 0x588
(XEN) (2) Mapped 0x3ffcfd80 to fff9bd80, base = 0xfff9b000
(XEN) ACPI: ACPI SLEEP INFO: pm1x_cnt[584,0], pm1x_evt[580,0]
(XEN)                  wakeup_vec[3ffcfd8c], vec_size[20]






diff -r 7c5c3aa858cc xen/arch/x86/acpi/boot.c
--- a/xen/arch/x86/acpi/boot.c                 Tue Jul 31 15:09:45 2007 +0100
+++ b/xen/arch/x86/acpi/boot.c                 Fri Aug 10 07:34:46 2007 -0400
@@ -106,8 +106,10 @@ char *__acpi_map_table(unsigned long phy
                 unsigned long base, offset, mapped_size;
                 int idx;

-                 if (phys + size < 8 * 1024 * 1024)
+                 if (phys + size < 8 * 1024 * 1024) {
+                                  printk("(1) Mapped 0x%lx to %p\n",phys,__va(phys));
                                  return __va(phys);
+                 }

                 offset = phys & (PAGE_SIZE - 1);
                 mapped_size = PAGE_SIZE - offset;
@@ -126,6 +128,7 @@ char *__acpi_map_table(unsigned long phy
                                  mapped_size += PAGE_SIZE;
                 }

+                 printk("(2) Mapped 0x%lx to %p, base = 0x%lx\n",phys,((char *)base + offset),base);
                 return ((char *) base + offset);
}

@@ -308,8 +311,10 @@ static int __init acpi_parse_sbf(unsigne
{
                 struct acpi_table_sbf *sb;

-                 if (!phys_addr || !size)
+                 if (!phys_addr || !size) {
+                                  printk("SBF: Bad phys addr. or size.\n");
                                  return -EINVAL;
+                 }

                 sb = (struct acpi_table_sbf *)__acpi_map_table(phys_addr, size);
                 if (!sb) {
@@ -318,6 +323,7 @@ static int __init acpi_parse_sbf(unsigne
                 }

                 sbf_port = sb->sbf_cmos;                 /* Save CMOS port */
+printk("Successfully read SBF.\n");

                 return 0;
}
@@ -467,11 +473,19 @@ static int __init acpi_parse_fadt(unsign
{
                 struct fadt_descriptor_rev2 *fadt = NULL;

+printk("IN acpi_parse_fadt.\n");
                 fadt = (struct fadt_descriptor_rev2 *)__acpi_map_table(phys, size);
                 if (!fadt) {
                                  printk(KERN_WARNING PREFIX "Unable to map FADT\n");
                                  return 0;
                 }
+
+                 if (strncmp(fadt->signature, "FACP", 4)) {
+                                  printk(KERN_ERR PREFIX "Invalid FADT signature %s\n",
+                                                   fadt->signature);
+                                  return 0;
+                 }
+

#ifdef                 CONFIG_ACPI_INTERPRETER
                 /* initialize sci_int early for INT_SRC_OVR MADT parsing */
@@ -1002,19 +1016,24 @@ int __init acpi_boot_init(void)
                 if (acpi_disabled && !acpi_ht)
                                  return 1;

+acpi_table_parse(ACPI_FADT, acpi_parse_fadt);
                 acpi_table_parse(ACPI_BOOT, acpi_parse_sbf);

                 /*
                  * set sci_int and PM timer address
                  */
+acpi_table_parse(ACPI_FADT, acpi_parse_fadt);
                 acpi_table_parse(ACPI_FADT, acpi_parse_fadt);

                 /*
                  * Process the Multiple APIC Description Table (MADT), if present
                  */
+acpi_table_parse(ACPI_FADT, acpi_parse_fadt);
                 acpi_process_madt();

+acpi_table_parse(ACPI_FADT, acpi_parse_fadt);
                 acpi_table_parse(ACPI_HPET, acpi_parse_hpet);
-
-                 return 0;
-}
+acpi_table_parse(ACPI_FADT, acpi_parse_fadt);
+
+                 return 0;
+}





Keir Fraser <keir@xxxxxxxxxxxxx> wrote on 08/10/2007 02:55:50 AM:

> Did you check the signature on all three mappings, and only the
> first time you mapped it was broken? Weird.
>
>  -- Keir
>
>
> On 9/8/07 18:54, "Stefan Berger" <stefanb@xxxxxxxxxx> wrote:

> (XEN) (2) Mapped 0x3ffcfec0 to fff9bec0
> (XEN) ACPI: Invalid FADT signature A__ADR
>
> That one is bad. It has a bad signature! First call.
>
>
> (XEN) (2) Mapped 0x3ffcfec0 to fff9bec0
> (XEN) ACPI: PM-Timer IO Port: 0x588
>
> 2nd call. This one is good! POrt is also good.
>
> (XEN) (2) Mapped 0x3ffcfd80 to fff9bd80
> (XEN) ACPI: ACPI SLEEP INFO: pm1x_cnt[584,0], pm1x_evt[580,0]
> (XEN)                  wakeup_vec[3ffcfd8c], vec_size[20]
> (XEN) (2) Mapped 0x3ffcfec0 to fff9bec0
> (XEN) ACPI: PM-Timer IO Port: 0x588
>
> 3rd call. This one is also good!
>
> Looks like the mapping does not work correctly.
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel