PERFORCE change 1199336 for review
John Baldwin
jhb at FreeBSD.org
Mon Sep 8 04:52:02 UTC 2014
http://p4web.freebsd.org/@@1199336?ac=10
Change 1199336 by jhb at jhb_ralph on 2014/08/25 21:05:38
- Export the xattr variant of smap structures.
- Export the EFI memory map.
Affected files ...
.. //depot/projects/smpng/sys/amd64/amd64/machdep.c#127 edit
Differences ...
==== //depot/projects/smpng/sys/amd64/amd64/machdep.c#127 (text+ko) ====
@@ -2097,8 +2097,10 @@
smap_sysctl_handler(SYSCTL_HANDLER_ARGS)
{
struct bios_smap *smapbase;
+ struct bios_smap_xattr smap;
caddr_t kmdp;
- uint32_t smapsize;
+ uint32_t *smapattr;
+ int count, error, i;
/* Retrieve the system memory map from the loader. */
kmdp = preload_search_by_type("elf kernel");
@@ -2108,11 +2110,44 @@
MODINFO_METADATA | MODINFOMD_SMAP);
if (smapbase == NULL)
return (0);
- smapsize = *((u_int32_t *)smapbase - 1);
- return (SYSCTL_OUT(req, smapbase, smapsize));
+ 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", "Raw BIOS SMAP data");
+ smap_sysctl_handler, "S,bios_smap_xattr", "Raw BIOS SMAP data");
+
+static int
+efi_map_sysctl_handler(SYSCTL_HANDLER_ARGS)
+{
+ struct efi_map_header *efihdr;
+ caddr_t kmdp;
+ uint32_t *efisize;
+
+ kmdp = preload_search_by_type("elf kernel");
+ if (kmdp == NULL)
+ kmdp = preload_search_by_type("elf64 kernel");
+ efihdr = (struct efi_map_header *)preload_search_info(kmdp,
+ MODINFO_METADATA | MODINFOMD_EFI_MAP);
+ if (efihdr == NULL)
+ return (0);
+ efisize = *((uint32_t *)efihdr - 1);
+ return (SYSCTL_OUT(req, efihdr, efisize));
+}
+SYSCTL_PROC(_machdep, OID_AUTO, efi_map, CTLTYPE_OPAQUE|CTLFLAG_RD, NULL, 0,
+ efi_map_sysctl_handler, "S,efi_map_header", "Raw EFI Memory Map");
void
spinlock_enter(void)
More information about the p4-projects
mailing list