thread_state.hh revision 2292
19022Sgblack@eecs.umich.edu
29022Sgblack@eecs.umich.edu#ifndef __CPU_THREAD_STATE_HH__
39022Sgblack@eecs.umich.edu#define __CPU_THREAD_STATE_HH__
49022Sgblack@eecs.umich.edu
59022Sgblack@eecs.umich.edu#include "cpu/exec_context.hh"
69022Sgblack@eecs.umich.edu
79022Sgblack@eecs.umich.edu#if FULL_SYSTEM
89022Sgblack@eecs.umich.educlass EndQuiesceEvent;
99022Sgblack@eecs.umich.educlass FunctionProfile;
109022Sgblack@eecs.umich.educlass ProfileNode;
119022Sgblack@eecs.umich.edu#else
129022Sgblack@eecs.umich.educlass Process;
139022Sgblack@eecs.umich.educlass FunctionalMemory;
149022Sgblack@eecs.umich.edu#endif
159022Sgblack@eecs.umich.edu
169022Sgblack@eecs.umich.edustruct ThreadState {
179022Sgblack@eecs.umich.edu#if FULL_SYSTEM
189022Sgblack@eecs.umich.edu    ThreadState(int _cpuId, int _tid, FunctionalMemory *_mem)
199022Sgblack@eecs.umich.edu        : cpuId(_cpuId), tid(_tid), mem(_mem), lastActivate(0), lastSuspend(0),
209022Sgblack@eecs.umich.edu          profile(NULL), profileNode(NULL), profilePC(0), quiesceEvent(NULL)
219022Sgblack@eecs.umich.edu#else
229022Sgblack@eecs.umich.edu    ThreadState(int _cpuId, int _tid, FunctionalMemory *_mem,
239022Sgblack@eecs.umich.edu                Process *_process, short _asid)
249022Sgblack@eecs.umich.edu        : cpuId(_cpuId), tid(_tid), mem(_mem), process(_process), asid(_asid)
259022Sgblack@eecs.umich.edu#endif
269022Sgblack@eecs.umich.edu    {
279022Sgblack@eecs.umich.edu        funcExeInst = 0;
289022Sgblack@eecs.umich.edu        storeCondFailures = 0;
299022Sgblack@eecs.umich.edu    }
309022Sgblack@eecs.umich.edu
319022Sgblack@eecs.umich.edu    ExecContext::Status status;
329023Sgblack@eecs.umich.edu
339023Sgblack@eecs.umich.edu    int cpuId;
349023Sgblack@eecs.umich.edu
359023Sgblack@eecs.umich.edu    // Index of hardware thread context on the CPU that this represents.
369023Sgblack@eecs.umich.edu    int tid;
379022Sgblack@eecs.umich.edu
389022Sgblack@eecs.umich.edu    Counter numInst;
399022Sgblack@eecs.umich.edu    Stats::Scalar<> numInsts;
409376Sgblack@eecs.umich.edu    Stats::Scalar<> numMemRefs;
419376Sgblack@eecs.umich.edu
429376Sgblack@eecs.umich.edu    // number of simulated loads
439023Sgblack@eecs.umich.edu    Counter numLoad;
449023Sgblack@eecs.umich.edu    Counter startNumLoad;
459023Sgblack@eecs.umich.edu
469376Sgblack@eecs.umich.edu    FunctionalMemory *mem;	// functional storage for process address space
479376Sgblack@eecs.umich.edu
489376Sgblack@eecs.umich.edu#if FULL_SYSTEM
499023Sgblack@eecs.umich.edu    Tick lastActivate;
509023Sgblack@eecs.umich.edu    Tick lastSuspend;
5110593Sgabeblack@google.com
529023Sgblack@eecs.umich.edu    FunctionProfile *profile;
539023Sgblack@eecs.umich.edu    ProfileNode *profileNode;
549023Sgblack@eecs.umich.edu    Addr profilePC;
559023Sgblack@eecs.umich.edu
569023Sgblack@eecs.umich.edu    EndQuiesceEvent *quiesceEvent;
579023Sgblack@eecs.umich.edu
589023Sgblack@eecs.umich.edu#else
599023Sgblack@eecs.umich.edu    Process *process;
609023Sgblack@eecs.umich.edu
619376Sgblack@eecs.umich.edu    // Address space ID.  Note that this is used for TIMING cache
629376Sgblack@eecs.umich.edu    // simulation only; all functional memory accesses should use
639376Sgblack@eecs.umich.edu    // one of the FunctionalMemory pointers above.
649376Sgblack@eecs.umich.edu    short asid;
659376Sgblack@eecs.umich.edu
669376Sgblack@eecs.umich.edu#endif
679376Sgblack@eecs.umich.edu
689023Sgblack@eecs.umich.edu    /**
699023Sgblack@eecs.umich.edu     * Temporary storage to pass the source address from copy_load to
709376Sgblack@eecs.umich.edu     * copy_store.
719376Sgblack@eecs.umich.edu     * @todo Remove this temporary when we have a better way to do it.
729023Sgblack@eecs.umich.edu     */
739023Sgblack@eecs.umich.edu    Addr copySrcAddr;
749023Sgblack@eecs.umich.edu    /**
759023Sgblack@eecs.umich.edu     * Temp storage for the physical source address of a copy.
769023Sgblack@eecs.umich.edu     * @todo Remove this temporary when we have a better way to do it.
779023Sgblack@eecs.umich.edu     */
789023Sgblack@eecs.umich.edu    Addr copySrcPhysAddr;
799023Sgblack@eecs.umich.edu
809023Sgblack@eecs.umich.edu    /*
819376Sgblack@eecs.umich.edu     * number of executed instructions, for matching with syscall trace
829376Sgblack@eecs.umich.edu     * points in EIO files.
839376Sgblack@eecs.umich.edu     */
849376Sgblack@eecs.umich.edu    Counter funcExeInst;
859376Sgblack@eecs.umich.edu
869376Sgblack@eecs.umich.edu    //
879376Sgblack@eecs.umich.edu    // Count failed store conditionals so we can warn of apparent
889376Sgblack@eecs.umich.edu    // application deadlock situations.
899023Sgblack@eecs.umich.edu    unsigned storeCondFailures;
909376Sgblack@eecs.umich.edu};
919023Sgblack@eecs.umich.edu
929376Sgblack@eecs.umich.edu#endif // __CPU_THREAD_STATE_HH__
939023Sgblack@eecs.umich.edu