I/O Memory Mapping failed

Sebastian Sumpf Sebastian.Sumpf at ...1...
Mon Jul 23 15:43:19 CEST 2012


Hi Markus,

On 07/23/2012 12:59 PM, Christian Helmuth wrote:
> Hello Markus,
>
> On Mon, Jul 23, 2012 at 12:47:37PM +0200, Markus Partheymueller wrote:
>> the only thing verbose logging added was this line:
>>
>> [init -> acpi] Acpi_table::Acpi_table():RSDP 2a020
>>
>> Does this help?
> Hm, not much info. I'd recommend to instrument the Acpi_table methods
> with some PDBG()'s to find out what's going on with your machine:
>
> 	...
> 	uint8_t *_map_io(addr_t base, size_t size, Io_mem_session_capability &cap)
> 	{
> 		PDBG("_map_io: [%p, %p)", (void*)base, (void*)(base + size));
> 		Io_mem_connection io_mem(base, size);
> 	...
>
> I'm not the original author of the ACPI driver and, therefore, does
> not know it that well. Maybe, Sebastian could shed some light on this?
>

It seems like you are only getting the 'root descriptor pointer'
(RSDP).  After that the driver tries to map the ACPI tables found in the
'root descriptor table' (RSDT). If you should be on a 64-Bit machine (I
am guessing that since last time the driver worked for you), this is the
wrong way to go from here. On 64Bit one has to use the XSDT table to
retrieve the other ACPI table pointers. In that case it should be not
too hard to extent the driver (use offset 24 instead of 16 to retrieve
the XDST pointer from RSDP).
If you are on a 32-Bit machine something is indeed very strange. I am
not sure if region 11 is really not available. Usually the driver tries
to map the table using one page (of I/O memory), which seems to work. If
the table header suggests that the table is larger than 4K, it remaps
the table using the corresponding size -- that fails (see Table_wrapper
constructor). There is one thing you could try. We are only looking for
'DSTDT', 'SSDT', 'FACP', and 'MADT' tables. You could enclose line 930
and 951 in acpi.cc (Table_wrapper) with a try catch block and simply
continue if mapping fails. If you are lucky only the first table pointer
is messed up and the others work.

Please share your insights,

Sebastian







More information about the users mailing list