acpi/srat: fix build without DMAP

Use pmap_mapbios to map memory used to store the cpus array.

Reported by:	lwhsu
X-MFC-with:	r322348
This commit is contained in:
Roger Pau Monné 2017-08-11 14:19:55 +00:00
parent 1866d42eec
commit c642d2f5b5
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=322403

View File

@ -443,7 +443,12 @@ parse_srat(void)
("Not enough memory for SRAT table items"));
phys_avail[idx + 1] = addr - 1;
cpus = (struct cpu_info *)PHYS_TO_DMAP(addr);
/*
* We cannot rely on PHYS_TO_DMAP because this code is also used in
* i386, so use pmap_mapbios to map the memory, this will end up using
* the default memory attribute (WB), and the DMAP when available.
*/
cpus = (struct cpu_info *)pmap_mapbios(addr, size);
/*
* Make a pass over the table to populate the cpus[] and
@ -529,6 +534,10 @@ srat_set_cpus(void *dummy)
printf("SRAT: CPU %u has memory domain %d\n", i,
cpu->domain);
}
/* Last usage of the cpus array, unmap it. */
pmap_unmapdev((vm_offset_t)cpus, sizeof(*cpus) * (max_apic_id + 1));
cpus = NULL;
}
SYSINIT(srat_set_cpus, SI_SUB_CPU, SI_ORDER_ANY, srat_set_cpus, NULL);