2005-04-29 21:05:03

by Jakub Jermar

[permalink] [raw]
Subject: PATCH: acpi_find_rsdp() diverges from ACPI specification

Hello,

I found out that acpi_find_rsdp() tries to find the RSDP structure in an area
bit larger than the ACPI specification wants. The right interval should start
at 0xe0000 and end at 0xfffff. The search area is thus 128K+1B large.

Given the semantics of acpi_scan_rsdp(), the second argument should therefore be
the size, not the end address.

Should there be any comments, please email me directly as I don't regularily
read LKM.

Please, apply.

Jakub

--- linux-2.6.11.7/arch/i386/kernel/acpi/boot.c 2005-04-07 20:58:17.000000000
+0200
+++ linux-2.6.11.7-acpi-patch/arch/i386/kernel/acpi/boot.c 2005-04-29
21:39:08.000000000 +0200
@@ -644,7 +644,7 @@ acpi_find_rsdp (void)
*/
rsdp_phys = acpi_scan_rsdp (0, 0x400);
if (!rsdp_phys)
- rsdp_phys = acpi_scan_rsdp (0xE0000, 0xFFFFF);
+ rsdp_phys = acpi_scan_rsdp (0xE0000, 128*1024 + 1);

return rsdp_phys;
}

Signed-off-by: Jakub Jermar <[email protected]>


----------------------------------------------------------------
Powered by http://www.hosting123.cz


2005-04-29 21:46:02

by Randy.Dunlap

[permalink] [raw]
Subject: Re: PATCH: acpi_find_rsdp() diverges from ACPI specification

On Fri, 29 Apr 2005 23:03:50 +0200 [email protected] wrote:

| Hello,
|
| I found out that acpi_find_rsdp() tries to find the RSDP structure in an area
| bit larger than the ACPI specification wants. The right interval should start
| at 0xe0000 and end at 0xfffff. The search area is thus 128K+1B large.

The search area is thus 128 KB large, so I agree with the intent of
this patch, except for the +1B.


| Given the semantics of acpi_scan_rsdp(), the second argument should therefore be
| the size, not the end address.

Yes.

| Should there be any comments, please email me directly as I don't regularily
| read LKM.
|
| Please, apply.
|
| Jakub
|
| --- linux-2.6.11.7/arch/i386/kernel/acpi/boot.c 2005-04-07 20:58:17.000000000
| +0200
| +++ linux-2.6.11.7-acpi-patch/arch/i386/kernel/acpi/boot.c 2005-04-29
| 21:39:08.000000000 +0200
| @@ -644,7 +644,7 @@ acpi_find_rsdp (void)
| */
| rsdp_phys = acpi_scan_rsdp (0, 0x400);
| if (!rsdp_phys)
| - rsdp_phys = acpi_scan_rsdp (0xE0000, 0xFFFFF);
| + rsdp_phys = acpi_scan_rsdp (0xE0000, 128*1024 + 1);
Just drop the "+ 1".

|
| return rsdp_phys;
| }


---
~Randy

2005-05-06 22:22:17

by Jakub Jermar

[permalink] [raw]
Subject: Re: PATCH: acpi_find_rsdp() diverges from ACPI specification

Hello,

here I resend corrected patch for acpi_find_rsdp().
Please, apply this patch.


--- linux-2.6.11.7/arch/i386/kernel/acpi/boot.c 2005-04-07 20:58:17.000000000 +0200
+++ linux-2.6.11.7-acpi-patch/arch/i386/kernel/acpi/boot.c 2005-04-29 21:39:08.000000000 +0200
@@ -644,7 +644,7 @@ acpi_find_rsdp (void)
*/
rsdp_phys = acpi_scan_rsdp (0, 0x400);
if (!rsdp_phys)
- rsdp_phys = acpi_scan_rsdp (0xE0000, 0xFFFFF);
+ rsdp_phys = acpi_scan_rsdp (0xE0000, 128*1024);

return rsdp_phys;
}

Best regards,
Jakub


Randy.Dunlap wrote:
> On Fri, 29 Apr 2005 23:03:50 +0200 [email protected] wrote:
>
> | Hello,
> |
> | I found out that acpi_find_rsdp() tries to find the RSDP structure in an area
> | bit larger than the ACPI specification wants. The right interval should start
> | at 0xe0000 and end at 0xfffff. The search area is thus 128K+1B large.
>
> The search area is thus 128 KB large, so I agree with the intent of
> this patch, except for the +1B.
>
>
> | Given the semantics of acpi_scan_rsdp(), the second argument should therefore be
> | the size, not the end address.
>
> Yes.
>
> | Should there be any comments, please email me directly as I don't regularily
> | read LKM.
> |
> | Please, apply.
> |
> | Jakub
> |
> | --- linux-2.6.11.7/arch/i386/kernel/acpi/boot.c 2005-04-07 20:58:17.000000000
> | +0200
> | +++ linux-2.6.11.7-acpi-patch/arch/i386/kernel/acpi/boot.c 2005-04-29
> | 21:39:08.000000000 +0200
> | @@ -644,7 +644,7 @@ acpi_find_rsdp (void)
> | */
> | rsdp_phys = acpi_scan_rsdp (0, 0x400);
> | if (!rsdp_phys)
> | - rsdp_phys = acpi_scan_rsdp (0xE0000, 0xFFFFF);
> | + rsdp_phys = acpi_scan_rsdp (0xE0000, 128*1024 + 1);
> Just drop the "+ 1".
>
> |
> | return rsdp_phys;
> | }
>
>
> ---
> ~Randy