I'm glad to see this go in. Has someone stepped up to make sure that all of Vince's patches get in the tree?
Nate On Tue, Sep 15, 2009 at 10:37 PM, Vince Weaver <vi...@csl.cornell.edu> wrote: > changeset 30d92d2b66a1 in /z/repo/m5 > details: http://repo.m5sim.org/m5?cmd=changeset;node=30d92d2b66a1 > description: > Syscalls: Implement sysinfo() syscall. > > diffstat: > > 11 files changed, 133 insertions(+), 7 deletions(-) > src/arch/alpha/linux/linux.hh | 15 +++++++++++++++ > src/arch/alpha/linux/process.cc | 2 +- > src/arch/arm/linux/linux.hh | 15 +++++++++++++++ > src/arch/arm/linux/process.cc | 2 +- > src/arch/mips/linux/linux.hh | 16 ++++++++++++++++ > src/arch/mips/linux/process.cc | 2 +- > src/arch/sparc/linux/linux.hh | 32 ++++++++++++++++++++++++++++++++ > src/arch/sparc/linux/syscalls.cc | 4 ++-- > src/arch/x86/linux/linux.hh | 31 +++++++++++++++++++++++++++++++ > src/arch/x86/linux/syscalls.cc | 4 ++-- > src/sim/syscall_emul.hh | 17 +++++++++++++++++ > > diffs (285 lines): > > diff -r ae3263589c7c -r 30d92d2b66a1 src/arch/alpha/linux/linux.hh > --- a/src/arch/alpha/linux/linux.hh Tue Sep 15 05:48:20 2009 -0700 > +++ b/src/arch/alpha/linux/linux.hh Tue Sep 15 22:36:47 2009 -0700 > @@ -125,6 +125,21 @@ > TGT_RLIMIT_MEMLOCK = 9, > TGT_RLIMIT_LOCKS = 10 > }; > + > + typedef struct { > + int64_t uptime; /* Seconds since boot */ > + uint64_t loads[3]; /* 1, 5, and 15 minute load averages */ > + uint64_t totalram; /* Total usable main memory size */ > + uint64_t freeram; /* Available memory size */ > + uint64_t sharedram; /* Amount of shared memory */ > + uint64_t bufferram; /* Memory used by buffers */ > + uint64_t totalswap; /* Total swap space size */ > + uint64_t freeswap; /* swap space still available */ > + uint16_t procs; /* Number of current processes */ > + uint64_t totalhigh; /* Total high memory size */ > + uint64_t freehigh; /* Available high memory size */ > + uint64_t mem_unit; /* Memory unit size in bytes */ > + } tgt_sysinfo; > }; > > #endif // __ALPHA_ALPHA_LINUX_LINUX_HH__ > diff -r ae3263589c7c -r 30d92d2b66a1 src/arch/alpha/linux/process.cc > --- a/src/arch/alpha/linux/process.cc Tue Sep 15 05:48:20 2009 -0700 > +++ b/src/arch/alpha/linux/process.cc Tue Sep 15 22:36:47 2009 -0700 > @@ -440,7 +440,7 @@ > /* 315 */ SyscallDesc("munlock", unimplementedFunc), > /* 316 */ SyscallDesc("mlockall", unimplementedFunc), > /* 317 */ SyscallDesc("munlockall", unimplementedFunc), > - /* 318 */ SyscallDesc("sysinfo", unimplementedFunc), > + /* 318 */ SyscallDesc("sysinfo", sysinfoFunc<AlphaLinux>), > /* 319 */ SyscallDesc("_sysctl", unimplementedFunc), > /* 320 */ SyscallDesc("was sys_idle", unimplementedFunc), > /* 321 */ SyscallDesc("oldumount", unimplementedFunc), > diff -r ae3263589c7c -r 30d92d2b66a1 src/arch/arm/linux/linux.hh > --- a/src/arch/arm/linux/linux.hh Tue Sep 15 05:48:20 2009 -0700 > +++ b/src/arch/arm/linux/linux.hh Tue Sep 15 22:36:47 2009 -0700 > @@ -147,6 +147,21 @@ > uint64_t st_ino; > } tgt_stat64; > > + typedef struct { > + int32_t uptime; /* Seconds since boot */ > + uint32_t loads[3]; /* 1, 5, and 15 minute load averages */ > + uint32_t totalram; /* Total usable main memory size */ > + uint32_t freeram; /* Available memory size */ > + uint32_t sharedram; /* Amount of shared memory */ > + uint32_t bufferram; /* Memory used by buffers */ > + uint32_t totalswap; /* Total swap space size */ > + uint32_t freeswap; /* swap space still available */ > + uint16_t procs; /* Number of current processes */ > + uint32_t totalhigh; /* Total high memory size */ > + uint32_t freehigh; /* Available high memory size */ > + uint32_t mem_unit; /* Memory unit size in bytes */ > + } tgt_sysinfo; > + > > }; > > diff -r ae3263589c7c -r 30d92d2b66a1 src/arch/arm/linux/process.cc > --- a/src/arch/arm/linux/process.cc Tue Sep 15 05:48:20 2009 -0700 > +++ b/src/arch/arm/linux/process.cc Tue Sep 15 22:36:47 2009 -0700 > @@ -179,7 +179,7 @@ > /* 113 */ SyscallDesc("vm86", unimplementedFunc), > /* 114 */ SyscallDesc("wait4", unimplementedFunc), > /* 115 */ SyscallDesc("swapoff", unimplementedFunc), > - /* 116 */ SyscallDesc("sysinfo", unimplementedFunc), > + /* 116 */ SyscallDesc("sysinfo", sysinfoFunc<ArmLinux>), > /* 117 */ SyscallDesc("ipc", unimplementedFunc), > /* 118 */ SyscallDesc("fsync", unimplementedFunc), > /* 119 */ SyscallDesc("sigreturn", unimplementedFunc), > diff -r ae3263589c7c -r 30d92d2b66a1 src/arch/mips/linux/linux.hh > --- a/src/arch/mips/linux/linux.hh Tue Sep 15 05:48:20 2009 -0700 > +++ b/src/arch/mips/linux/linux.hh Tue Sep 15 22:36:47 2009 -0700 > @@ -126,6 +126,22 @@ > /// assign themselves to process IDs reserved for > /// the root users. > static const int NUM_ROOT_PROCS = 2; > + > + typedef struct { > + int32_t uptime; /* Seconds since boot */ > + uint32_t loads[3]; /* 1, 5, and 15 minute load averages */ > + uint32_t totalram; /* Total usable main memory size */ > + uint32_t freeram; /* Available memory size */ > + uint32_t sharedram; /* Amount of shared memory */ > + uint32_t bufferram; /* Memory used by buffers */ > + uint32_t totalswap; /* Total swap space size */ > + uint32_t freeswap; /* swap space still available */ > + uint16_t procs; /* Number of current processes */ > + uint32_t totalhigh; /* Total high memory size */ > + uint32_t freehigh; /* Available high memory size */ > + uint32_t mem_unit; /* Memory unit size in bytes */ > + } tgt_sysinfo; > + > }; > > #endif > diff -r ae3263589c7c -r 30d92d2b66a1 src/arch/mips/linux/process.cc > --- a/src/arch/mips/linux/process.cc Tue Sep 15 05:48:20 2009 -0700 > +++ b/src/arch/mips/linux/process.cc Tue Sep 15 22:36:47 2009 -0700 > @@ -238,7 +238,7 @@ > /* 113 */ SyscallDesc("vm86", unimplementedFunc), > /* 114 */ SyscallDesc("wait4", unimplementedFunc), > /* 115 */ SyscallDesc("swapoff", unimplementedFunc), > - /* 116 */ SyscallDesc("sysinfo", unimplementedFunc), > + /* 116 */ SyscallDesc("sysinfo", sysinfoFunc<MipsLinux>), > /* 117 */ SyscallDesc("ipc", unimplementedFunc), > /* 118 */ SyscallDesc("fsync", unimplementedFunc), > /* 119 */ SyscallDesc("sigreturn", unimplementedFunc), > diff -r ae3263589c7c -r 30d92d2b66a1 src/arch/sparc/linux/linux.hh > --- a/src/arch/sparc/linux/linux.hh Tue Sep 15 05:48:20 2009 -0700 > +++ b/src/arch/sparc/linux/linux.hh Tue Sep 15 22:36:47 2009 -0700 > @@ -77,6 +77,22 @@ > static const int NUM_OPEN_FLAGS; > > static const unsigned TGT_MAP_ANONYMOUS = 0x20; > + > + typedef struct { > + int64_t uptime; /* Seconds since boot */ > + uint64_t loads[3]; /* 1, 5, and 15 minute load averages */ > + uint64_t totalram; /* Total usable main memory size */ > + uint64_t freeram; /* Available memory size */ > + uint64_t sharedram; /* Amount of shared memory */ > + uint64_t bufferram; /* Memory used by buffers */ > + uint64_t totalswap; /* Total swap space size */ > + uint64_t freeswap; /* swap space still available */ > + uint16_t procs; /* Number of current processes */ > + uint64_t totalhigh; /* Total high memory size */ > + uint64_t freehigh; /* Available high memory size */ > + uint64_t mem_unit; /* Memory unit size in bytes */ > + } tgt_sysinfo; > + > }; > > class Sparc32Linux : public SparcLinux > @@ -105,6 +121,22 @@ > uint32_t __unused4; > uint32_t __unused5; > } tgt_stat64; > + > + typedef struct { > + int32_t uptime; /* Seconds since boot */ > + uint32_t loads[3]; /* 1, 5, and 15 minute load averages */ > + uint32_t totalram; /* Total usable main memory size */ > + uint32_t freeram; /* Available memory size */ > + uint32_t sharedram; /* Amount of shared memory */ > + uint32_t bufferram; /* Memory used by buffers */ > + uint32_t totalswap; /* Total swap space size */ > + uint32_t freeswap; /* swap space still available */ > + uint16_t procs; /* Number of current processes */ > + uint32_t totalhigh; /* Total high memory size */ > + uint32_t freehigh; /* Available high memory size */ > + uint32_t mem_unit; /* Memory unit size in bytes */ > + } tgt_sysinfo; > + > }; > > #endif > diff -r ae3263589c7c -r 30d92d2b66a1 src/arch/sparc/linux/syscalls.cc > --- a/src/arch/sparc/linux/syscalls.cc Tue Sep 15 05:48:20 2009 -0700 > +++ b/src/arch/sparc/linux/syscalls.cc Tue Sep 15 22:36:47 2009 -0700 > @@ -302,7 +302,7 @@ > /* 211 */ SyscallDesc("tgkill", unimplementedFunc), //32 bit > /* 212 */ SyscallDesc("waitpid", unimplementedFunc), //32 bit > /* 213 */ SyscallDesc("swapoff", unimplementedFunc), > - /* 214 */ SyscallDesc("sysinfo", unimplementedFunc), //32 bit > + /* 214 */ SyscallDesc("sysinfo", sysinfoFunc<Sparc32Linux>), //32 bit > /* 215 */ SyscallDesc("ipc", unimplementedFunc), //32 bit > /* 216 */ SyscallDesc("sigreturn", unimplementedFunc), //32 bit > /* 217 */ SyscallDesc("clone", cloneFunc), > @@ -608,7 +608,7 @@ > /* 211 */ SyscallDesc("tgkill", unimplementedFunc), > /* 212 */ SyscallDesc("waitpid", unimplementedFunc), > /* 213 */ SyscallDesc("swapoff", unimplementedFunc), > - /* 214 */ SyscallDesc("sysinfo", unimplementedFunc), > + /* 214 */ SyscallDesc("sysinfo", sysinfoFunc<SparcLinux>), > /* 215 */ SyscallDesc("ipc", unimplementedFunc), > /* 216 */ SyscallDesc("sigreturn", unimplementedFunc), > /* 217 */ SyscallDesc("clone", cloneFunc), > diff -r ae3263589c7c -r 30d92d2b66a1 src/arch/x86/linux/linux.hh > --- a/src/arch/x86/linux/linux.hh Tue Sep 15 05:48:20 2009 -0700 > +++ b/src/arch/x86/linux/linux.hh Tue Sep 15 22:36:47 2009 -0700 > @@ -111,6 +111,22 @@ > uint64_t iov_base; // void * > uint64_t iov_len; // size_t > } tgt_iovec; > + > + typedef struct { > + int64_t uptime; /* Seconds since boot */ > + uint64_t loads[3]; /* 1, 5, and 15 minute load averages */ > + uint64_t totalram; /* Total usable main memory size */ > + uint64_t freeram; /* Available memory size */ > + uint64_t sharedram; /* Amount of shared memory */ > + uint64_t bufferram; /* Memory used by buffers */ > + uint64_t totalswap; /* Total swap space size */ > + uint64_t freeswap; /* swap space still available */ > + uint16_t procs; /* Number of current processes */ > + uint64_t totalhigh; /* Total high memory size */ > + uint64_t freehigh; /* Available high memory size */ > + uint64_t mem_unit; /* Memory unit size in bytes */ > + } tgt_sysinfo; > + > }; > > class X86Linux32 : public Linux > @@ -160,6 +176,21 @@ > static const int NUM_OPEN_FLAGS; > > static const unsigned TGT_MAP_ANONYMOUS = 0x20; > + > + typedef struct { > + int32_t uptime; /* Seconds since boot */ > + uint32_t loads[3]; /* 1, 5, and 15 minute load averages */ > + uint32_t totalram; /* Total usable main memory size */ > + uint32_t freeram; /* Available memory size */ > + uint32_t sharedram; /* Amount of shared memory */ > + uint32_t bufferram; /* Memory used by buffers */ > + uint32_t totalswap; /* Total swap space size */ > + uint32_t freeswap; /* swap space still available */ > + uint16_t procs; /* Number of current processes */ > + uint32_t totalhigh; /* Total high memory size */ > + uint32_t freehigh; /* Available high memory size */ > + uint32_t mem_unit; /* Memory unit size in bytes */ > + } tgt_sysinfo; > }; > > #endif > diff -r ae3263589c7c -r 30d92d2b66a1 src/arch/x86/linux/syscalls.cc > --- a/src/arch/x86/linux/syscalls.cc Tue Sep 15 05:48:20 2009 -0700 > +++ b/src/arch/x86/linux/syscalls.cc Tue Sep 15 22:36:47 2009 -0700 > @@ -327,7 +327,7 @@ > /* 96 */ SyscallDesc("gettimeofday", unimplementedFunc), > /* 97 */ SyscallDesc("getrlimit", unimplementedFunc), > /* 98 */ SyscallDesc("getrusage", unimplementedFunc), > - /* 99 */ SyscallDesc("sysinfo", unimplementedFunc), > + /* 99 */ SyscallDesc("sysinfo", sysinfoFunc<X86Linux64>), > /* 100 */ SyscallDesc("times", unimplementedFunc), > /* 101 */ SyscallDesc("ptrace", unimplementedFunc), > /* 102 */ SyscallDesc("getuid", getuidFunc), > @@ -623,7 +623,7 @@ > /* 113 */ SyscallDesc("vm86old", unimplementedFunc), > /* 114 */ SyscallDesc("wait4", unimplementedFunc), > /* 115 */ SyscallDesc("swapoff", unimplementedFunc), > - /* 116 */ SyscallDesc("sysinfo", unimplementedFunc), > + /* 116 */ SyscallDesc("sysinfo", sysinfoFunc<X86Linux32>), > /* 117 */ SyscallDesc("ipc", unimplementedFunc), > /* 118 */ SyscallDesc("fsync", unimplementedFunc), > /* 119 */ SyscallDesc("sigreturn", unimplementedFunc), > diff -r ae3263589c7c -r 30d92d2b66a1 src/sim/syscall_emul.hh > --- a/src/sim/syscall_emul.hh Tue Sep 15 05:48:20 2009 -0700 > +++ b/src/sim/syscall_emul.hh Tue Sep 15 22:36:47 2009 -0700 > @@ -59,6 +59,7 @@ > #include "cpu/thread_context.hh" > #include "mem/translating_port.hh" > #include "mem/page_table.hh" > +#include "sim/system.hh" > #include "sim/process.hh" > > /// > @@ -558,6 +559,22 @@ > > } > > +/// Target sysinfo() handler. > +template <class OS> > +SyscallReturn > +sysinfoFunc(SyscallDesc *desc, int callnum, LiveProcess *process, > + ThreadContext *tc) > +{ > + > + TypedBufferArg<typename OS::tgt_sysinfo> > sysinfo(process->getSyscallArg(tc, 0)); > + > + sysinfo->uptime=seconds_since_epoch; > + sysinfo->totalram=process->system->memSize(); > + > + sysinfo.copyOut(tc->getMemPort()); > + > + return 0; > +} > > /// Target chmod() handler. > template <class OS> > _______________________________________________ > m5-dev mailing list > m5-dev@m5sim.org > http://m5sim.org/mailman/listinfo/m5-dev > > _______________________________________________ m5-dev mailing list m5-dev@m5sim.org http://m5sim.org/mailman/listinfo/m5-dev