Bug 13253 - x86_64 kernel misinterprets "reserve=" boot parameter
Summary: x86_64 kernel misinterprets "reserve=" boot parameter
Alias: None
Product: ACPI
Classification: Unclassified
Component: Config-Other (show other bugs)
Hardware: All Linux
: P1 normal
Assignee: Zhang Rui
Depends on:
Reported: 2009-05-06 01:43 UTC by pablomme
Modified: 2009-08-29 18:58 UTC (History)
3 users (show)

See Also:
Kernel Version: 2.6.28
Regression: No
Bisected commit-id:

dmesg with reserve parameter set on x86_64 (11.81 KB, application/x-gzip)
2009-05-20 18:19 UTC, pablomme
patch: io_start use unsigned int intead of int (499 bytes, patch)
2009-06-02 06:58 UTC, Zhang Rui
Details | Diff

Description pablomme 2009-05-06 01:43:03 UTC
I've reported this on Ubuntu Launchpad as bug 370003, but it seemed wise to report it here as well.

My laptop suffers from bug #9905 (#187671 in launchpad), which is in fact a BIOS defect: the ACPI tables suggest an arrangement where MMIO regions for different devices overlap and cause the machine to freeze on loading the sdhci[-pci] module, as well as the vanilla 8139too module (the latter was modified a while back in Ubuntu to use PIO instead, to partially address this problem).

Recently another user reported successfully bypassing the problem by adding "reserve=0xffb00000,0x100000" to the kernel command line. I can confirm this works on the x86 kernel, but not on the x86_64 kernel, which I'm currently running.

When adding the option to the x86_64 kernel, /proc/iomem shows this as the last line:

ffffffffffb00000-ffffffffffbfffff : reserved

which should have been, clearly, one of:

ffb00000-ffbfffff : reserved
00000000ffb00000-00000000ffbfffff : reserved

but for some reason the kernel prepends a bunch of ones instead of zeros to the 32-bit address to produce a 64-bit address. Specifying "reserve=0x00000000ffb00000,0x100000" on the command line does not help, though.

Let me know if I've misclassified the bug, my guess is ACPI, but I may be very wrong here...
Comment 1 Zhang Rui 2009-05-20 03:44:46 UTC
please attach the full dmesg ouput after boot.
Comment 2 pablomme 2009-05-20 18:19:16 UTC
Created attachment 21457 [details]
dmesg with reserve parameter set on x86_64

Attached. I can also produce dmesgs without using "reserve", and for the 32-bit kernel using an Ubuntu liveCD, if any of these help.
Comment 3 Zhang Rui 2009-06-02 06:58:33 UTC
Created attachment 21703 [details]
patch: io_start use unsigned int intead of int

please re-open this bug if the patch doesn't work for you.
Comment 4 Zhang Rui 2009-06-02 07:11:55 UTC
patch is also sent to the ACPI mail list.
Comment 5 pablomme 2009-06-03 00:45:47 UTC
Works beautifully, thanks.
Comment 6 Len Brown 2009-08-29 18:58:19 UTC
kernel/resource.c: fix sign extension in reserve_setup()
shipped in linux-2.6.31-rc2


Note You need to log in before you can comment on or make changes to this bug.