From: Pavel M. <pa...@uc...> - 2002-06-24 14:28:34
|
Hi! > acpi_tb_get_rsdt_address (&address); > status = acpi_tb_get_table (&address, &table_info); > > The first gets the address and is used in the second one. > The latter one returns the AE_NO_MEMORY in status and gets passed on via > return(status) where it later on creates the error report. The > acpi_tb_get_table calls acpi_tb_map_acpi_table and this finally calls > acpi_os_map_memory. In this function now there are again two sources for the > NULL pointer returned: > > *virt = ioremap(phys, size); or > *virt = phys_to_virt(phys); > > I don't know which call actually is used and returns a NULL pointer (there > are some #ifdefs around so that I don't know which code actually is > compiled), but there is a check which returns AE_NO_MEMORY if *virt is NULL > and I inserted a printk there and found that the parameters leading to the > error were: > size = 32; phys = 0xdefc4a8 > > As I see the phys is identical to the 0x0defc4a8 from the kernel messages, so > this should be ok. The small size also should not create problems, thus the > source of the error either is the ioremap or the phys_to_virt call. It should be easy to decide which one it is... One printk before ioremap and one phys_to_virt. Compared to number of printk's you must have already done.... phys = 0xdef * 64K ~= 256 * 64K * 16 = 4K * 64K = 256M. Do you have at least 256MB ram? If not I can see why phys_to_virt would fail... Ioremap seems to be some compatibility crap? If acpi uses it, it is most probably wrong. static inline void *ioremap(unsigned long base, long length) { if (base < 0x100000) return (void *)base; return vremap (base, length); } Pavel -- (about SSSCA) "I don't say this lightly. However, I really think that the U.S. no longer is classifiable as a democracy, but rather as a plutocracy." --hpa |