svn commit: r250260 - user/attilio/jeff-numa/sys/x86/acpica

Attilio Rao attilio at FreeBSD.org
Sat May 4 23:33:55 UTC 2013


Author: attilio
Date: Sat May  4 23:33:54 2013
New Revision: 250260
URL: http://svnweb.freebsd.org/changeset/base/250260

Log:
  Add code to correctly parse and display ACPI SLIT
  (System Locality Information Table).
  
  Sponsored by:	EMC / Isilon storage division
  Obtained from:	jeff

Modified:
  user/attilio/jeff-numa/sys/x86/acpica/srat.c

Modified: user/attilio/jeff-numa/sys/x86/acpica/srat.c
==============================================================================
--- user/attilio/jeff-numa/sys/x86/acpica/srat.c	Sat May  4 22:50:15 2013	(r250259)
+++ user/attilio/jeff-numa/sys/x86/acpica/srat.c	Sat May  4 23:33:54 2013	(r250260)
@@ -331,6 +331,48 @@ srat_walk_table(acpi_subtable_handler *h
 	acpi_walk_subtables(srat + 1, (char *)srat + srat->Header.Length,
 	    handler, arg);
 }
+ 
+static void
+acpi_handle_slit(ACPI_TABLE_SLIT *slit)
+{
+	UINT64 i, j;
+
+	printf("ACPI System Locality Information Table: %ju localities\n",
+	    (uintmax_t)slit->LocalityCount);
+	printf("      ");
+	for (i = 0; i < slit->LocalityCount; i++)
+		printf(" %3ju", (uintmax_t)i);
+	printf("\n     +");
+	for (i = 0; i < slit->LocalityCount; i++)
+		printf("----");
+	printf("\n");
+	for (i = 0; i < slit->LocalityCount; i++) {
+		printf(" %3ju |", (uintmax_t)i);
+		for (j = 0; j < slit->LocalityCount; j++)
+			printf(" %3u",
+			    slit->Entry[i * slit->LocalityCount + j]);
+		printf("\n");
+	}
+}
+
+static void
+parse_slit(void *arg __unused)
+{
+	ACPI_TABLE_SLIT *slit;
+	vm_paddr_t slit_physaddr;
+
+	if (resource_disabled("slit", 0))
+		return;
+
+	slit_physaddr = acpi_find_table(ACPI_SIG_SLIT);
+	if (slit_physaddr == 0)
+		return;
+	slit = acpi_map_table(slit_physaddr, ACPI_SIG_SLIT);
+	acpi_handle_slit(slit);
+	acpi_unmap_table(slit);
+}
+
+SYSINIT(parse_slit, SI_SUB_VM - 1, SI_ORDER_SECOND, parse_slit, NULL);
 
 /*
  * Setup per-CPU ACPI IDs.


More information about the svn-src-user mailing list