aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorBjoern Brandenburg <bbb@mpi-sws.org>2012-08-14 14:29:17 -0400
committerBjoern Brandenburg <bbb@mpi-sws.org>2012-08-14 14:46:16 -0400
commitf215a05c0ea23c7779b1a3a4361b4d88ddc73dc1 (patch)
tree8d105f8894c1a3f52ae88561faa6e866218fcf10 /src
parenta72371ea7d7b13bf0126b4636a7cba9e03ea12b8 (diff)
Implement get_nr_ts_release_waiters() /proc wrapper
Add a wrapper for /proc/litmus/stats to make it easy to query the number of tasks already waiting for a task set release.
Diffstat (limited to 'src')
-rw-r--r--src/kernel_iface.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/kernel_iface.c b/src/kernel_iface.c
index 33d56df..b9c8f59 100644
--- a/src/kernel_iface.c
+++ b/src/kernel_iface.c
@@ -12,6 +12,8 @@
12#define LITMUS_CTRL_DEVICE "/dev/litmus/ctrl" 12#define LITMUS_CTRL_DEVICE "/dev/litmus/ctrl"
13#define CTRL_PAGES 1 13#define CTRL_PAGES 1
14 14
15#define LITMUS_STATS_FILE "/proc/litmus/stats"
16
15static int map_file(const char* filename, void **addr, size_t size) 17static int map_file(const char* filename, void **addr, size_t size)
16{ 18{
17 int error = 0; 19 int error = 0;
@@ -35,6 +37,43 @@ static int map_file(const char* filename, void **addr, size_t size)
35 return error; 37 return error;
36} 38}
37 39
40ssize_t read_file(const char* fname, void* buf, size_t maxlen)
41{
42 int fd;
43 ssize_t n = 0;
44 size_t got = 0;
45
46 fd = open(fname, O_RDONLY);
47 if (fd == -1)
48 return -1;
49
50 while (got < maxlen && (n = read(fd, buf + got, maxlen - got)) > 0)
51 got += n;
52 close(fd);
53 if (n < 0)
54 return -1;
55 else
56 return got;
57}
58
59int get_nr_ts_release_waiters(void)
60{
61 int ready = 0, all = 0;
62 char buf[100];
63 ssize_t len;
64
65 len = read_file(LITMUS_STATS_FILE, buf, sizeof(buf) - 1);
66 if (len >= 0)
67 len = sscanf(buf,
68 "real-time tasks = %d\n"
69 "ready for release = %d\n",
70 &all, &ready);
71 if (len == 2)
72 return ready;
73 else
74 return len;
75}
76
38/* thread-local pointer to control page */ 77/* thread-local pointer to control page */
39static __thread struct control_page *ctrl_page; 78static __thread struct control_page *ctrl_page;
40 79