Page MenuHomeFreeBSD

D38267.diff
No OneTemporary

D38267.diff

diff --git a/stand/kboot/main.c b/stand/kboot/main.c
--- a/stand/kboot/main.c
+++ b/stand/kboot/main.c
@@ -50,6 +50,45 @@
extern int command_fdt_internal(int argc, char *argv[]);
+static uint64_t commit_limit;
+static uint64_t committed_as;
+static uint64_t mem_avail;
+
+static void
+memory_limits(void)
+{
+ int fd;
+ char buf[128];
+
+ /*
+ * To properly size the slabs, we need to find how much memory we can
+ * commit to using. commit_limit is the max, while commited_as is the
+ * current total. We can use these later to allocate the largetst amount
+ * of memory possible so we can support larger ram disks than we could
+ * by using fixed segment sizes. We also grab the memory available so
+ * we don't use more than 49% of that.
+ */
+ fd = open("host:/proc/meminfo", O_RDONLY);
+ if (fd != -1) {
+ while (fgetstr(buf, sizeof(buf), fd) > 0) {
+ if (strncmp(buf, "MemAvailable:", 13) == 0) {
+ mem_avail = strtoll(buf + 13, NULL, 0);
+ mem_avail <<= 10; /* Units are kB */
+ } else if (strncmp(buf, "CommitLimit:", 12) == 0) {
+ commit_limit = strtoll(buf + 13, NULL, 0);
+ commit_limit <<= 10; /* Units are kB */
+ } else if (strncmp(buf, "Committed_AS:", 13) == 0) {
+ committed_as = strtoll(buf + 14, NULL, 0);
+ committed_as <<= 10; /* Units are kB */
+ }
+ }
+ }
+ printf("Commit limit: %lld Committed bytes %lld Available %lld\n",
+ (long long)commit_limit, (long long)committed_as,
+ (long long)mem_avail);
+ close(fd);
+}
+
/*
* NB: getdev should likely be identical to this most places, except maybe
* we should move to storing the length of the platform devdesc.
@@ -217,6 +256,8 @@
setenv("LINES", "24", 1);
setenv("usefdt", "1", 1);
+ memory_limits();
+
/*
* Find acpi, if it exists
*/

File Metadata

Mime Type
text/plain
Expires
Sat, Jan 18, 1:39 PM (18 h, 8 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
15862473
Default Alt Text
D38267.diff (1 KB)

Event Timeline