Skip to content
Browse files

cpufreq: only try to open files under cpuX

There are called many useless 'open' syscalls that always fail, like:
  open("/sys/devices/system/cpu/uevent/cpufreq/scaling_governor", O_RDONLY) = -1 ENOTDIR (Not a directory)
This patch filters them to 'likely' patterns, like e.g.:
/sys/devices/system/cpu/cpuX/cpufreq/scaling_governor, where X is string
starting with digit. For match cases it will add only small overhead.

Originally reported as:
https://bugzilla.redhat.com/show_bug.cgi?id=886185

Signed-off-by: Jaroslav Škarvada <jskarvad@redhat.com>
  • Loading branch information...
1 parent 6524d88 commit 0b036863b1a0c600ad638b410f34e1c80f456f6b Jaroslav Skarvada committed with ceferron Dec 13, 2012
Showing with 12 additions and 11 deletions.
  1. +1 −1 src/devices/alsa.cpp
  2. +2 −0 src/devices/backlight.cpp
  3. +2 −1 src/devlist.cpp
  4. +6 −5 src/tuning/cpufreq.cpp
  5. +1 −4 src/tuning/tuningsysfs.cpp
View
2 src/devices/alsa.cpp
@@ -167,7 +167,7 @@ void create_all_alsa(void)
entry = readdir(dir);
if (!entry)
break;
- if (entry->d_name[0] == '.')
+ if (strncmp(entry->d_name, "hwC", 3) != 0)
continue;
sprintf(filename, "/sys/class/sound/card0/%s/power_on_acct", entry->d_name);
View
2 src/devices/backlight.cpp
@@ -90,6 +90,8 @@ static int dpms_screen_on(void)
if (!entry)
break;
+ if (strncmp(entry->d_name, "card", 4) != 0)
+ continue;
sprintf(filename, "/sys/class/drm/card0/%s/enabled", entry->d_name);
file.open(filename, ios::in);
if (!file)
View
3 src/devlist.cpp
@@ -37,6 +37,7 @@
#include <sys/types.h>
#include <dirent.h>
#include <string.h>
+#include <ctype.h>
using namespace std;
@@ -117,7 +118,7 @@ void collect_open_devices(void)
entry2 = readdir(dir2);
if (!entry2)
break;
- if (entry2->d_name[0] == '.')
+ if (!isdigit(entry2->d_name[0]))
continue;
sprintf(filename, "/proc/%s/fd/%s", entry->d_name, entry2->d_name);
memset(link, 0, 4096);
View
11 src/tuning/cpufreq.cpp
@@ -36,6 +36,7 @@
#include <dirent.h>
#include <errno.h>
#include <sys/stat.h>
+#include <ctype.h>
#include "../lib.h"
#include "cpufreq.h"
@@ -72,7 +73,7 @@ int cpufreq_tunable::good_bad(void)
return ret;
while ((dirent = readdir(dir))) {
- if (dirent->d_name[0]=='.')
+ if (strncmp(dirent->d_name, "cpu", 3) != 0 || !isdigit(dirent->d_name[3]))
continue;
sprintf(filename, "/sys/devices/system/cpu/%s/cpufreq/scaling_governor", dirent->d_name);
file = fopen(filename, "r");
@@ -123,7 +124,7 @@ void cpufreq_tunable::toggle(void)
return;
while ((dirent = readdir(dir))) {
- if (dirent->d_name[0]=='.')
+ if (strncmp(dirent->d_name, "cpu", 3) != 0 || !isdigit(dirent->d_name[3]))
continue;
sprintf(filename, "/sys/devices/system/cpu/%s/cpufreq/scaling_governor", dirent->d_name);
file = fopen(filename, "w");
@@ -141,7 +142,7 @@ void cpufreq_tunable::toggle(void)
return;
while ((dirent = readdir(dir))) {
- if (dirent->d_name[0]=='.')
+ if (strncmp(dirent->d_name, "cpu", 3) != 0 || !isdigit(dirent->d_name[3]))
continue;
sprintf(filename, "/sys/devices/system/cpu/%s/cpufreq/scaling_governor", dirent->d_name);
file = fopen(filename, "w");
@@ -171,7 +172,7 @@ const char *cpufreq_tunable::toggle_script(void) {
return NULL;
while ((dirent = readdir(dir))) {
- if (dirent->d_name[0]=='.')
+ if (strncmp(dirent->d_name, "cpu", 3) != 0 || !isdigit(dirent->d_name[3]))
continue;
sprintf(filename, "/sys/devices/system/cpu/%s/cpufreq/scaling_governor", dirent->d_name);
if (stat(filename, &statbuf) == -1)
@@ -189,7 +190,7 @@ const char *cpufreq_tunable::toggle_script(void) {
return NULL;
while ((dirent = readdir(dir))) {
- if (dirent->d_name[0]=='.')
+ if (strncmp(dirent->d_name, "cpu", 3) != 0 || !isdigit(dirent->d_name[3]))
continue;
sprintf(filename, "/sys/devices/system/cpu/%s/cpufreq/scaling_governor", dirent->d_name);
if (stat(filename, &statbuf) == -1)
View
5 src/tuning/tuningsysfs.cpp
@@ -131,10 +131,7 @@ void add_sata_tunables(void)
if (!entry)
break;
- if (strcmp(entry->d_name, ".") == 0)
- continue;
-
- if (strcmp(entry->d_name, "..") == 0)
+ if (entry->d_name[0] == '.')
continue;
sprintf(filename, "/sys/class/scsi_host/%s/link_power_management_policy", entry->d_name);

0 comments on commit 0b03686

Please sign in to comment.
Something went wrong with that request. Please try again.