On Tue, Mar 9, 2021 at 6:54 PM Mike Rapoport <rppt@xxxxxxxxxxxxx> wrote: > > On Sun, Mar 07, 2021 at 09:46:22AM +0200, Mike Rapoport wrote: > > Hello Rafael, > > > > On Fri, Mar 05, 2021 at 02:30:07PM +0100, Rafael J. Wysocki wrote: > > > On Fri, Mar 5, 2021 at 12:14 AM George Kennedy <george.kennedy@xxxxxxxxxx> wrote: > > > > > > > The ibft table, for example, is mapped in via acpi_map() and kmap(). The > > > > page for the ibft table is not reserved, so it can end up on the freelist. > > > > > > You appear to be saying that it is not sufficient to kmap() a page in > > > order to use it safely. It is also necessary to reserve it upfront, > > > for example with the help of memblock_reserve(). Is that correct? If > > > so, is there an alternative way to reserve a page frame? > > > > Like David said in the other reply, if a BIOS does not mark the memory that > > contains an ACPI table as used (e.g. reserved or ACPI data), we need to > > make sure the kernel knows that such memory is in use and an early call to > > memblock_reserve() is exactly what we need here. > > George had this issue with iBFT, but in general this could be any table > > that a buggy BIOS forgot to mark as ACPI data. > > BTW, I wonder is there a fundamental reason to use ioremap() to access ACPI > tables at all? > In the end, they reside in RAM and, apparently, they live at the same DIMM > as neighboring "normal memory" so why cannot we just map them normally as > read-only not executable? This may be NVS memory (depending on the configuration of the system) which isn't "normal" RAM AFAICS.