Pistachio: Code for parsing the ACPI tables doesn't map every physical pointer

Frank Mehnert <[email protected]>
Newsgroups gmane.comp.micro-kernel.l4.l4ka.general
Organization InnoTek Systemberatung GmbH
Message-ID <[email protected]>
Hi,

when searching the ACPI tables for, pointers to physical pointers are not
mapped in every case. Look at acpi__std_t::find(): This code assumes that
ptrs[] contains pointers to physical pages which are already mapped. This
is not necessary guaranteed. My test box fails to boot when APIC support
is enabled:

  kmem_init (f0132000, f0152000) [128K]
  remap area f0000000->00000000 len=400000, w=1, k=1, size=1
  remap area 00000000->00000000 len=400000, w=1, k=1, size=1
  remap area 00000000->00000000 len=400000, w=1, k=1, size=1
  activate_gdt
  remap area fe000000->0e000000 len=1000000, w=1, k=1, size=1
  RSDP is at 000feb00
  RSDT is at 000fd211
  XSDT is at 000fd265

  headers.len = 0x5C => 7 ptrs
  ptrs[0] = 000fd35d
  ptrs[1] = fffcaf60
  ptrs[2] = 000fd451
  ptrs[3] = 000fd4c3
  ptrs[4] = 000fd4eb
  ptrs[5] = 000fd552
  ptrs[6] = 000fd590
  ptrs[7] = 00000000

The value of ptrs[2] points to a physical memory page which is still not
mapped. This examples shows furthermore that it is dangerous to map the
ACPI tables one-by-one (conflicts with kernel region).

Frank
-- 
## InnoTek Systemberatung GmbH, http://www.innotek.de ##
signature.asc (application/pgp-signature, 189 B)
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.3 (GNU/Linux)

iD8DBQBEOoB16z8pigLf3EcRAtAqAJ0VxlYebGi4+yYl8j2GafTXNOSEFQCgkzbW
NkS4kGoCcUiroLl8jelkBik=
=i7U4
-----END PGP SIGNATURE-----
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.