Blame SOURCES/powertop-2.3-unlimit-fds.patch

4d24b8
diff --git a/src/main.cpp b/src/main.cpp
4d24b8
index 0883424..16b1613 100644
4d24b8
--- a/src/main.cpp
4d24b8
+++ b/src/main.cpp
4d24b8
@@ -28,6 +28,7 @@
4d24b8
  *	Arjan van de Ven <arjan@linux.intel.com>
4d24b8
  */
4d24b8
 #include <iostream>
4d24b8
+#include <fstream>
4d24b8
 #include <stdlib.h>
4d24b8
 #include <stdio.h>
4d24b8
 #include <time.h>
4d24b8
@@ -36,6 +37,7 @@
4d24b8
 #include <getopt.h>
4d24b8
 #include <unistd.h>
4d24b8
 #include <locale.h>
4d24b8
+#include <sys/resource.h>
4d24b8
 
4d24b8
 #include "cpu/cpu.h"
4d24b8
 #include "process/process.h"
4d24b8
@@ -60,6 +62,8 @@
4d24b8
 
4d24b8
 #define DEBUGFS_MAGIC          0x64626720
4d24b8
 
4d24b8
+#define NR_OPEN_DEF 1024 * 1024
4d24b8
+
4d24b8
 int debug_learning = 0;
4d24b8
 unsigned time_out = 20;
4d24b8
 int leave_powertop = 0;
4d24b8
@@ -278,16 +282,35 @@ static void checkroot() {
4d24b8
 
4d24b8
 }
4d24b8
 
4d24b8
+static int get_nr_open(void) {
4d24b8
+	int nr_open = NR_OPEN_DEF;
4d24b8
+	ifstream file;
4d24b8
+
4d24b8
+	file.open("/proc/sys/fs/nr_open", ios::in);
4d24b8
+	if (file) {
4d24b8
+		file >> nr_open;
4d24b8
+		if (!file)
4d24b8
+			nr_open = NR_OPEN_DEF;
4d24b8
+		file.close();
4d24b8
+	}
4d24b8
+	return nr_open;
4d24b8
+}
4d24b8
+
4d24b8
 static void powertop_init(void)
4d24b8
 {
4d24b8
 	static char initialized = 0;
4d24b8
 	int ret;
4d24b8
 	struct statfs st_fs;
4d24b8
+	struct rlimit rlmt;
4d24b8
 
4d24b8
 	if (initialized)
4d24b8
 		return;
4d24b8
 
4d24b8
 	checkroot();
4d24b8
+
4d24b8
+	rlmt.rlim_cur = rlmt.rlim_max = get_nr_open();
4d24b8
+	setrlimit (RLIMIT_NOFILE, &rlmt;;
4d24b8
+
4d24b8
 	ret = system("/sbin/modprobe cpufreq_stats > /dev/null 2>&1");
4d24b8
 	ret = system("/sbin/modprobe msr > /dev/null 2>&1");
4d24b8
 	statfs("/sys/kernel/debug", &st_fs);