From: Waldemar Kozaczuk <
jwkoz...@gmail.com>
Committer: Waldemar Kozaczuk <
jwkoz...@gmail.com>
Branch: master
procfs: add meminfo pseudo-file
Signed-off-by: Waldemar Kozaczuk <
jwkoz...@gmail.com>
---
diff --git a/fs/procfs/procfs_vnops.cc b/fs/procfs/procfs_vnops.cc
--- a/fs/procfs/procfs_vnops.cc
+++ b/fs/procfs/procfs_vnops.cc
@@ -182,6 +182,7 @@ procfs_mount(mount* mp, const char *dev, int flags,
const void* data)
root->add("sys", sys);
root->add("cpuinfo", inode_count++, [] { return
processor::features_str(); });
+ root->add("meminfo", inode_count++, [] { return
pseudofs::meminfo("MemTotal:\t%ld kB\nMemFree: \t%ld kB\n"); });
vp->v_data = static_cast<void*>(root);
diff --git a/fs/pseudofs/pseudofs.cc b/fs/pseudofs/pseudofs.cc
--- a/fs/pseudofs/pseudofs.cc
+++ b/fs/pseudofs/pseudofs.cc
@@ -8,6 +8,7 @@
#include "pseudofs.hh"
#include <osv/sched.hh>
+#include <sys/sysinfo.h>
namespace pseudofs {
@@ -191,4 +192,14 @@ string cpumap()
}
return os.str();
}
+
+string meminfo(const char* format)
+{
+ struct sysinfo info;
+ sysinfo(&info);
+
+ std::ostringstream os;
+ osv::fprintf(os, format, info.totalram >> 10, info.freeram >> 10);
+ return os.str();
+}
}
diff --git a/fs/pseudofs/pseudofs.hh b/fs/pseudofs/pseudofs.hh
--- a/fs/pseudofs/pseudofs.hh
+++ b/fs/pseudofs/pseudofs.hh
@@ -146,6 +146,8 @@ int readdir(vnode *vp, file *fp, dirent *dir);
int getattr(vnode *vp, vattr *attr);
string cpumap();
+
+string meminfo(const char* format);
}
#endif
diff --git a/fs/sysfs/sysfs_vnops.cc b/fs/sysfs/sysfs_vnops.cc
--- a/fs/sysfs/sysfs_vnops.cc
+++ b/fs/sysfs/sysfs_vnops.cc
@@ -8,7 +8,6 @@
#include <unistd.h>
#include <osv/mount.h>
#include <mntent.h>
-#include <sys/sysinfo.h>
#include "fs/pseudofs/pseudofs.hh"
@@ -21,18 +20,6 @@ static uint64_t inode_count = 1; /* inode 0 is reserved
to root */
static mutex_t sysfs_mutex;
-static string sysfs_meminfo()
-{
- struct sysinfo info;
- sysinfo(&info);
-
- char total_line[200];
- sprintf(total_line, "Node 0 MemTotal:\t%ld kB\nNode 0 MemFree: \t%ld
kB\n",
- info.totalram >> 10, info.freeram >> 10);
-
- return std::string(total_line);
-}
-
static string sysfs_cpumap()
{
return pseudofs::cpumap() + "\n";
@@ -49,7 +36,7 @@ sysfs_mount(mount* mp, const char *dev, int flags, const
void* data)
auto* vp = mp->m_root->d_vnode;
auto node0 = make_shared<pseudo_dir_node>(inode_count++);
- node0->add("meminfo", inode_count++, sysfs_meminfo);
+ node0->add("meminfo", inode_count++, [] { return
pseudofs::meminfo("Node 0 MemTotal:\t%ld kB\nNode 0 MemFree: \t%ld kB\n");
});
node0->add("cpumap", inode_count++, sysfs_cpumap);
node0->add("distance", inode_count++, sysfs_distance);