Changeset View
Changeset View
Standalone View
Standalone View
head/sys/x86/acpica/srat.c
Show First 20 Lines • Show All 223 Lines • ▼ Show 20 Lines | KASSERT(!cpus[x2apic->ApicId].enabled, | ||||
("Duplicate local APIC ID %u", x2apic->ApicId)); | ("Duplicate local APIC ID %u", x2apic->ApicId)); | ||||
cpus[x2apic->ApicId].domain = x2apic->ProximityDomain; | cpus[x2apic->ApicId].domain = x2apic->ProximityDomain; | ||||
cpus[x2apic->ApicId].enabled = 1; | cpus[x2apic->ApicId].enabled = 1; | ||||
break; | break; | ||||
case ACPI_SRAT_TYPE_MEMORY_AFFINITY: | case ACPI_SRAT_TYPE_MEMORY_AFFINITY: | ||||
mem = (ACPI_SRAT_MEM_AFFINITY *)entry; | mem = (ACPI_SRAT_MEM_AFFINITY *)entry; | ||||
if (bootverbose) | if (bootverbose) | ||||
printf( | printf( | ||||
"SRAT: Found memory domain %d addr %jx len %jx: %s\n", | "SRAT: Found memory domain %d addr 0x%jx len 0x%jx: %s\n", | ||||
mem->ProximityDomain, (uintmax_t)mem->BaseAddress, | mem->ProximityDomain, (uintmax_t)mem->BaseAddress, | ||||
(uintmax_t)mem->Length, | (uintmax_t)mem->Length, | ||||
(mem->Flags & ACPI_SRAT_MEM_ENABLED) ? | (mem->Flags & ACPI_SRAT_MEM_ENABLED) ? | ||||
"enabled" : "disabled"); | "enabled" : "disabled"); | ||||
if (!(mem->Flags & ACPI_SRAT_MEM_ENABLED)) | if (!(mem->Flags & ACPI_SRAT_MEM_ENABLED)) | ||||
break; | break; | ||||
if (!overlaps_phys_avail(mem->BaseAddress, | if (!overlaps_phys_avail(mem->BaseAddress, | ||||
mem->BaseAddress + mem->Length)) { | mem->BaseAddress + mem->Length)) { | ||||
printf("SRAT: Ignoring memory at addr %jx\n", | printf("SRAT: Ignoring memory at addr 0x%jx\n", | ||||
(uintmax_t)mem->BaseAddress); | (uintmax_t)mem->BaseAddress); | ||||
break; | break; | ||||
} | } | ||||
if (num_mem == VM_PHYSSEG_MAX) { | if (num_mem == VM_PHYSSEG_MAX) { | ||||
printf("SRAT: Too many memory regions\n"); | printf("SRAT: Too many memory regions\n"); | ||||
*(int *)arg = ENXIO; | *(int *)arg = ENXIO; | ||||
break; | break; | ||||
} | } | ||||
▲ Show 20 Lines • Show All 80 Lines • ▼ Show 20 Lines | while (address >= mem_info[i].start && | ||||
phys_avail[j + 1] == 0) { | phys_avail[j + 1] == 0) { | ||||
return (0); | return (0); | ||||
} | } | ||||
address = phys_avail[j]; | address = phys_avail[j]; | ||||
} else | } else | ||||
address = mem_info[i].end + 1; | address = mem_info[i].end + 1; | ||||
} | } | ||||
} | } | ||||
printf("SRAT: No memory region found for %jx - %jx\n", | printf("SRAT: No memory region found for 0x%jx - 0x%jx\n", | ||||
(uintmax_t)phys_avail[j], (uintmax_t)phys_avail[j + 1]); | (uintmax_t)phys_avail[j], (uintmax_t)phys_avail[j + 1]); | ||||
return (ENXIO); | return (ENXIO); | ||||
} | } | ||||
/* | /* | ||||
* Renumber the memory domains to be compact and zero-based if not | * Renumber the memory domains to be compact and zero-based if not | ||||
* already. Returns an error if there are too many domains. | * already. Returns an error if there are too many domains. | ||||
*/ | */ | ||||
▲ Show 20 Lines • Show All 181 Lines • Show Last 20 Lines |