Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F144685423
D27620.id80740.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
2 KB
Referenced Files
None
Subscribers
None
D27620.id80740.diff
View Options
Index: sys/dev/acpica/acpi_pxm.c
===================================================================
--- sys/dev/acpica/acpi_pxm.c
+++ sys/dev/acpica/acpi_pxm.c
@@ -265,6 +265,7 @@
ACPI_SRAT_MEM_AFFINITY *mem;
ACPI_SRAT_GICC_AFFINITY *gicc;
static struct cpu_info *cpup;
+ uint64_t base, length;
int domain, i, slot;
switch (entry->Type) {
@@ -327,20 +328,22 @@
break;
case ACPI_SRAT_TYPE_MEMORY_AFFINITY:
mem = (ACPI_SRAT_MEM_AFFINITY *)entry;
+ base = mem->BaseAddress;
+ length = mem->Length;
+ domain = mem->ProximityDomain;
+
if (bootverbose)
printf(
"SRAT: Found memory domain %d addr 0x%jx len 0x%jx: %s\n",
- mem->ProximityDomain, (uintmax_t)mem->BaseAddress,
- (uintmax_t)mem->Length,
+ domain, (uintmax_t)base, (uintmax_t)length,
(mem->Flags & ACPI_SRAT_MEM_ENABLED) ?
"enabled" : "disabled");
if (!(mem->Flags & ACPI_SRAT_MEM_ENABLED))
break;
- if (mem->BaseAddress >= maxphyaddr ||
- !overlaps_phys_avail(mem->BaseAddress,
- mem->BaseAddress + mem->Length)) {
+ if (base >= maxphyaddr ||
+ !overlaps_phys_avail(base, base + length)) {
printf("SRAT: Ignoring memory at addr 0x%jx\n",
- (uintmax_t)mem->BaseAddress);
+ (uintmax_t)base);
break;
}
if (num_mem == VM_PHYSSEG_MAX) {
@@ -350,10 +353,20 @@
}
slot = num_mem;
for (i = 0; i < num_mem; i++) {
- if (mem_info[i].end <= mem->BaseAddress)
+ if (mem_info[i].domain == domain) {
+ /* Try to extend an existing segment. */
+ if (base == mem_info[i].end) {
+ mem_info[i].end += length;
+ return;
+ }
+ if (base + length == mem_info[i].start) {
+ mem_info[i].start -= length;
+ return;
+ }
+ }
+ if (mem_info[i].end < base)
continue;
- if (mem_info[i].start <
- (mem->BaseAddress + mem->Length)) {
+ if (mem_info[i].start < base + length) {
printf("SRAT: Overlapping memory entries\n");
*(int *)arg = ENXIO;
return;
@@ -362,9 +375,9 @@
}
for (i = num_mem; i > slot; i--)
mem_info[i] = mem_info[i - 1];
- mem_info[slot].start = mem->BaseAddress;
- mem_info[slot].end = mem->BaseAddress + mem->Length;
- mem_info[slot].domain = mem->ProximityDomain;
+ mem_info[slot].start = base;
+ mem_info[slot].end = base + length;
+ mem_info[slot].domain = domain;
num_mem++;
break;
}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Thu, Feb 12, 2:56 AM (12 h, 41 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
28663225
Default Alt Text
D27620.id80740.diff (2 KB)
Attached To
Mode
D27620: acpi: Ensure that the affinity table is maximally coalesced
Attached
Detach File
Event Timeline
Log In to Comment