HomeFreeBSD

Fix boot on systems where NUMA domain 0 is unpopulated.

Description

Fix boot on systems where NUMA domain 0 is unpopulated.

  • Add vm_phys_early_add_seg(), complementing vm_phys_early_alloc(), to ensure that segments registered during hammer_time() are placed in the right domain. Otherwise, since the SRAT is not parsed at that point, we just add them to domain 0, which may be incorrect and results in a domain with only several MB worth of memory.
  • Fix uma_startup1() to try allocating memory for zones from any domain. If domain 0 is unpopulated, the allocation will simply fail, resulting in a page fault slightly later during boot.
  • Change _vm_phys_domain() to return -1 for addresses not covered by the affinity table, and change vm_phys_early_alloc() to handle wildcard domains. This is necessary on amd64, where the page array is dense and pmap_page_array_startup() may allocate page table pages for non-existent page frames.

Reported and tested by: Rafael Kitover <rkitover@gmail.com>
Reviewed by: cem (earlier version), kib
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D25001

Details

Provenance
markjAuthored on
Reviewer
cem
Differential Revision
D25001: Fix boot on systems where NUMA domain 0 is unpopulated.
Parents
rS361594: MFS11 r361592:
Branches
Unknown
Tags
Unknown