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

Reply via email to