[PATCH] module: support reading coresize from /sys if supported

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Linux 3.3 introduced the coresize attribute in /sys/module/*. When
available, use this instead of parsing some portion of /proc/modules.
---
 libkmod/libkmod-module.c | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/libkmod/libkmod-module.c b/libkmod/libkmod-module.c
index fb3a64e..375c2a9 100644
--- a/libkmod/libkmod-module.c
+++ b/libkmod/libkmod-module.c
@@ -1686,7 +1686,6 @@ KMOD_EXPORT int kmod_module_get_initstate(const struct kmod_module *mod)
  */
 KMOD_EXPORT long kmod_module_get_size(const struct kmod_module *mod)
 {
-	// FIXME TODO: this should be available from /sys/module/foo
 	FILE *fp;
 	char line[4096];
 	int lineno = 0;
@@ -1695,6 +1694,16 @@ KMOD_EXPORT long kmod_module_get_size(const struct kmod_module *mod)
 	if (mod == NULL)
 		return -ENOENT;
 
+	/* available as of linux 3.3.x */
+	snprintf(line, sizeof(line), "/sys/module/%s/coresize", mod->name);
+	fp = fopen(line, "r");
+	if (fp != NULL) {
+		if (fscanf(fp, "%ld", &size) != 1)
+			size = -errno;
+		goto done;
+	}
+
+	/* fall back on parsing /proc/modules */
 	fp = fopen("/proc/modules", "re");
 	if (fp == NULL) {
 		int err = -errno;
@@ -1728,6 +1737,8 @@ KMOD_EXPORT long kmod_module_get_size(const struct kmod_module *mod)
 		size = value;
 		break;
 	}
+
+done:
 	fclose(fp);
 	return size;
 }
-- 
1.7.11.1

--
To unsubscribe from this list: send the line "unsubscribe linux-modules" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux