PERFORCE change 1199466 for review
John Baldwin
jhb at FreeBSD.org
Mon Sep 8 04:52:35 UTC 2014
http://p4web.freebsd.org/@@1199466?ac=10
Change 1199466 by jhb at jhb_ralph on 2014/08/28 12:34:36
Port the smap handler to i386.
Affected files ...
.. //depot/projects/smpng/sys/i386/i386/machdep.c#189 edit
Differences ...
==== //depot/projects/smpng/sys/i386/i386/machdep.c#189 (text+ko) ====
@@ -3122,6 +3122,42 @@
pcpu->pc_acpi_id = 0xffffffff;
}
+static int
+smap_sysctl_handler(SYSCTL_HANDLER_ARGS)
+{
+ struct bios_smap *smapbase;
+ struct bios_smap_xattr smap;
+ caddr_t kmdp;
+ uint32_t *smapattr;
+ int count, error, i;
+
+ /* Retrieve the system memory map from the loader. */
+ kmdp = preload_search_by_type("elf kernel");
+ if (kmdp == NULL)
+ kmdp = preload_search_by_type("elf32 kernel");
+ smapbase = (struct bios_smap *)preload_search_info(kmdp,
+ MODINFO_METADATA | MODINFOMD_SMAP);
+ if (smapbase == NULL)
+ return (0);
+ smapattr = (uint32_t *) = preload_search_info(kmdp,
+ MODINFO_METADATA | MODINFOMD_SMAP_XATTR);
+ count = *((u_int32_t *)smapbase - 1) / sizeof(*smapbase);
+ error = 0;
+ for (i = 0; i < count; i++) {
+ smap.base = smapbase[i].base;
+ smap.length = smapbase[i].length;
+ smap.type = smapbase[i].type;
+ if (smapattr != NULL)
+ smap.xattr = smapattr[i];
+ else
+ smap.xattr = 0;
+ error = SYSCTL_OUT(req, &smap, sizeof(smap));
+ }
+ return (error);
+}
+SYSCTL_PROC(_machdep, OID_AUTO, smap, CTLTYPE_OPAQUE|CTLFLAG_RD, NULL, 0,
+ smap_sysctl_handler, "S,bios_smap_xattr", "Raw BIOS SMAP data");
+
void
spinlock_enter(void)
{
More information about the p4-projects
mailing list