OLD | NEW |
1 #include <sys/sysinfo.h> | 1 #include <sys/sysinfo.h> |
2 #include "syscall.h" | 2 #include "syscall.h" |
3 #include "libc.h" | 3 #include "libc.h" |
4 | 4 |
5 #define klong long long | 5 #define klong long long |
6 #define kulong unsigned long long | 6 #define kulong unsigned long long |
7 | 7 |
8 struct kernel_sysinfo { | 8 struct kernel_sysinfo { |
9 » klong uptime; | 9 klong uptime; |
10 » kulong loads[3]; | 10 kulong loads[3]; |
11 » kulong totalram; | 11 kulong totalram; |
12 » kulong freeram; | 12 kulong freeram; |
13 » kulong sharedram; | 13 kulong sharedram; |
14 » kulong bufferram; | 14 kulong bufferram; |
15 » kulong totalswap; | 15 kulong totalswap; |
16 » kulong freeswap; | 16 kulong freeswap; |
17 » short procs; | 17 short procs; |
18 » short pad; | 18 short pad; |
19 » kulong totalhigh; | 19 kulong totalhigh; |
20 » kulong freehigh; | 20 kulong freehigh; |
21 » unsigned mem_unit; | 21 unsigned mem_unit; |
22 }; | 22 }; |
23 | 23 |
24 int __lsysinfo(struct sysinfo *info) | 24 int __lsysinfo(struct sysinfo* info) { |
25 { | 25 struct kernel_sysinfo tmp; |
26 » struct kernel_sysinfo tmp; | 26 int ret = syscall(SYS_sysinfo, &tmp); |
27 » int ret = syscall(SYS_sysinfo, &tmp); | 27 if (ret == -1) |
28 » if(ret == -1) return ret; | 28 return ret; |
29 » info->uptime = tmp.uptime; | 29 info->uptime = tmp.uptime; |
30 » info->loads[0] = tmp.loads[0]; | 30 info->loads[0] = tmp.loads[0]; |
31 » info->loads[1] = tmp.loads[1]; | 31 info->loads[1] = tmp.loads[1]; |
32 » info->loads[2] = tmp.loads[2]; | 32 info->loads[2] = tmp.loads[2]; |
33 » kulong shifts; | 33 kulong shifts; |
34 » kulong max = tmp.totalram | tmp.totalswap; | 34 kulong max = tmp.totalram | tmp.totalswap; |
35 » __asm__("bsr %1,%0" : "=r"(shifts) : "r"(max)); | 35 __asm__("bsr %1,%0" : "=r"(shifts) : "r"(max)); |
36 » shifts = shifts >= 32 ? shifts - 31 : 0; | 36 shifts = shifts >= 32 ? shifts - 31 : 0; |
37 » info->totalram = tmp.totalram >> shifts; | 37 info->totalram = tmp.totalram >> shifts; |
38 » info->freeram = tmp.freeram >> shifts; | 38 info->freeram = tmp.freeram >> shifts; |
39 » info->sharedram = tmp.sharedram >> shifts; | 39 info->sharedram = tmp.sharedram >> shifts; |
40 » info->bufferram = tmp.bufferram >> shifts; | 40 info->bufferram = tmp.bufferram >> shifts; |
41 » info->totalswap = tmp.totalswap >> shifts; | 41 info->totalswap = tmp.totalswap >> shifts; |
42 » info->freeswap = tmp.freeswap >> shifts; | 42 info->freeswap = tmp.freeswap >> shifts; |
43 » info->procs = tmp.procs ; | 43 info->procs = tmp.procs; |
44 » info->totalhigh = tmp.totalhigh >> shifts; | 44 info->totalhigh = tmp.totalhigh >> shifts; |
45 » info->freehigh = tmp.freehigh >> shifts; | 45 info->freehigh = tmp.freehigh >> shifts; |
46 » info->mem_unit = (tmp.mem_unit ? tmp.mem_unit : 1) << shifts; | 46 info->mem_unit = (tmp.mem_unit ? tmp.mem_unit : 1) << shifts; |
47 » return ret; | 47 return ret; |
48 } | 48 } |
49 | 49 |
50 weak_alias(__lsysinfo, sysinfo); | 50 weak_alias(__lsysinfo, sysinfo); |
OLD | NEW |