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 */
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to