ACPI tables limited to 4k in size
Bug #1222863 reported by
Graeme Gregory
This bug affects 1 person
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
linaro-acpi |
Fix Released
|
High
|
Al Stone |
Bug Description
On arm currently because acpi_map() eventually ends at kmap() function our maximum table size is currently limited to 4k.
Tables also cannot cross a 4k boundary.
There is currently a hack in mab (Make Arm Blob) to make sure a table never crosses a 4k boundary, but we need to fix this properly in kernel sometime.
To post a comment you must log in.
The relevant code from osl.c
#ifndef CONFIG_IA64 use_kmap( pfn) page_is_ram(pfn) use_kmap( pfn) 0
#define should_
#else
/* ioremap will take care of cache attributes */
#define should_
#endif
static void __iomem *acpi_map( acpi_physical_ address pg_off, unsigned long pg_sz)
{
unsigned long pfn;
pfn = pg_off >> PAGE_SHIFT; use_kmap( pfn)) { pfn_to_ page(pfn) ); ioremap( pg_off, pg_sz);
if (should_
if (pg_sz > PAGE_SIZE)
return NULL;
return (void __iomem __force *)kmap(
} else
return acpi_os_
}
static void acpi_unmap( acpi_physical_ address pg_off, void __iomem *vaddr)
{
unsigned long pfn;
pfn = pg_off >> PAGE_SHIFT; use_kmap( pfn)) pfn_to_ page(pfn) );
if (should_
kunmap(
else
iounmap(vaddr);
}