diff options
Diffstat (limited to 'sys/x86')
-rw-r--r-- | sys/x86/acpica/srat.c | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/sys/x86/acpica/srat.c b/sys/x86/acpica/srat.c index 8737688..7ea715e 100644 --- a/sys/x86/acpica/srat.c +++ b/sys/x86/acpica/srat.c @@ -244,33 +244,34 @@ static int renumber_domains(void) { int domains[VM_PHYSSEG_MAX]; - int ndomain, i, j, slot; + int i, j, slot; /* Enumerate all the domains. */ - ndomain = 0; + vm_ndomains = 0; for (i = 0; i < num_mem; i++) { /* See if this domain is already known. */ - for (j = 0; j < ndomain; j++) { + for (j = 0; j < vm_ndomains; j++) { if (domains[j] >= mem_info[i].domain) break; } - if (j < ndomain && domains[j] == mem_info[i].domain) + if (j < vm_ndomains && domains[j] == mem_info[i].domain) continue; /* Insert the new domain at slot 'j'. */ slot = j; - for (j = ndomain; j > slot; j--) + for (j = vm_ndomains; j > slot; j--) domains[j] = domains[j - 1]; domains[slot] = mem_info[i].domain; - ndomain++; - if (ndomain > MAXMEMDOM) { + vm_ndomains++; + if (vm_ndomains > MAXMEMDOM) { + vm_ndomains = 1; printf("SRAT: Too many memory domains\n"); return (EFBIG); } } /* Renumber each domain to its index in the sorted 'domains' list. */ - for (i = 0; i < ndomain; i++) { + for (i = 0; i < vm_ndomains; i++) { /* * If the domain is already the right value, no need * to renumber. @@ -286,6 +287,9 @@ renumber_domains(void) if (cpus[j].enabled && cpus[j].domain == domains[i]) cpus[j].domain = i; } + KASSERT(vm_ndomains > 0, + ("renumber_domains: invalid final vm_ndomains setup")); + return (0); } |