The same could be reproduced via zone shuffling with a little luck.
But nobody does that in practice.
Dan will most certainly object. And I don't know what makes you speak in
absolute words here.
This would be relatively straightforward to address if ACPICA was not
involved in it, but unfortunately that's not the case.
Changing this part of ACPICA is risky, because such changes may affect
other OSes using it, so that requires some serious consideration.
Alternatively, the previous memory allocation order in Linux could be
restored.
Of course, long-term this needs to be addressed in the ACPI
initialization code, because it clearly is not robust enough, but in
the meantime there's practical breakage observable in the field, so
what can be done about that?
*joke* enable zone shuffling.
No seriously, fix the latent BUG. What again is problematic about excluding
these pages from the page allcoator, for example, via memblock_reserve()?
@Mike?
There is some care that should be taken to make sure we get the order
right, but I don't see a fundamental issue here.
If I understand correctly, Rafael's concern is about changing the parts of
ACPICA that should be OS agnostic, so I think we just need another place to
call memblock_reserve() rather than acpi_tb_install_table_with_override().
Since the reservation should be done early in x86::setup_arch() (and
probably in arm64::setup_arch()) we might just have a function that parses
table headers and reserves them, similarly to how we parse the tables
during KASLR setup.