svn commit: r272800 - head/sys/x86/acpica

Adrian Chadd adrian at FreeBSD.org
Thu Oct 9 05:34:29 UTC 2014


Author: adrian
Date: Thu Oct  9 05:34:28 2014
New Revision: 272800
URL: https://svnweb.freebsd.org/changeset/base/272800

Log:
  Missing from previous commit - keep the VM domain -> PXM mapping
  array and use it to map PXM -> VM domain when needed.
  
  Differential Revision:	D906
  Reviewed by:	jhb

Modified:
  head/sys/x86/acpica/srat.c

Modified: head/sys/x86/acpica/srat.c
==============================================================================
--- head/sys/x86/acpica/srat.c	Thu Oct  9 05:33:25 2014	(r272799)
+++ head/sys/x86/acpica/srat.c	Thu Oct  9 05:34:28 2014	(r272800)
@@ -62,6 +62,8 @@ int num_mem;
 static ACPI_TABLE_SRAT *srat;
 static vm_paddr_t srat_physaddr;
 
+static int vm_domains[VM_PHYSSEG_MAX];
+
 static void	srat_walk_table(acpi_subtable_handler *handler, void *arg);
 
 /*
@@ -247,7 +249,6 @@ check_phys_avail(void)
 static int
 renumber_domains(void)
 {
-	int domains[VM_PHYSSEG_MAX];
 	int i, j, slot;
 
 	/* Enumerate all the domains. */
@@ -255,17 +256,17 @@ renumber_domains(void)
 	for (i = 0; i < num_mem; i++) {
 		/* See if this domain is already known. */
 		for (j = 0; j < vm_ndomains; j++) {
-			if (domains[j] >= mem_info[i].domain)
+			if (vm_domains[j] >= mem_info[i].domain)
 				break;
 		}
-		if (j < vm_ndomains && domains[j] == mem_info[i].domain)
+		if (j < vm_ndomains && vm_domains[j] == mem_info[i].domain)
 			continue;
 
 		/* Insert the new domain at slot 'j'. */
 		slot = j;
 		for (j = vm_ndomains; j > slot; j--)
-			domains[j] = domains[j - 1];
-		domains[slot] = mem_info[i].domain;
+			vm_domains[j] = vm_domains[j - 1];
+		vm_domains[slot] = mem_info[i].domain;
 		vm_ndomains++;
 		if (vm_ndomains > MAXMEMDOM) {
 			vm_ndomains = 1;
@@ -280,15 +281,15 @@ renumber_domains(void)
 		 * If the domain is already the right value, no need
 		 * to renumber.
 		 */
-		if (domains[i] == i)
+		if (vm_domains[i] == i)
 			continue;
 
 		/* Walk the cpu[] and mem_info[] arrays to renumber. */
 		for (j = 0; j < num_mem; j++)
-			if (mem_info[j].domain == domains[i])
+			if (mem_info[j].domain == vm_domains[i])
 				mem_info[j].domain = i;
 		for (j = 0; j <= MAX_APIC_ID; j++)
-			if (cpus[j].enabled && cpus[j].domain == domains[i])
+			if (cpus[j].enabled && cpus[j].domain == vm_domains[i])
 				cpus[j].domain = i;
 	}
 	KASSERT(vm_ndomains > 0,
@@ -368,4 +369,23 @@ srat_set_cpus(void *dummy)
 	}
 }
 SYSINIT(srat_set_cpus, SI_SUB_CPU, SI_ORDER_ANY, srat_set_cpus, NULL);
+
+/*
+ * Map a _PXM value to a VM domain ID.
+ *
+ * Returns the domain ID, or -1 if no domain ID was found.
+ */
+int
+acpi_map_pxm_to_vm_domainid(int pxm)
+{
+	int i;
+
+	for (i = 0; i < vm_ndomains; i++) {
+		if (vm_domains[i] == pxm)
+			return (i);
+	}
+
+	return (-1);
+}
+
 #endif /* MAXMEMDOM > 1 */


More information about the svn-src-all mailing list