thread_state.hh revision 2678:1f86b91dc3bb
1/*
2 * Copyright (c) 2006 The Regents of The University of Michigan
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are
7 * met: redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer;
9 * redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution;
12 * neither the name of the copyright holders nor the names of its
13 * contributors may be used to endorse or promote products derived from
14 * this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29#ifndef __CPU_THREAD_STATE_HH__
30#define __CPU_THREAD_STATE_HH__
31
32#include "cpu/exec_context.hh"
33
34#if !FULL_SYSTEM
35#include "mem/translating_port.hh"
36#endif
37
38#if FULL_SYSTEM
39class EndQuiesceEvent;
40class FunctionProfile;
41class ProfileNode;
42namespace Kernel {
43    class Statistics;
44};
45#else
46class FunctionalMemory;
47class Process;
48#endif
49
50/**
51 *  Struct for holding general thread state that is needed across CPU
52 *  models.  This includes things such as pointers to the process,
53 *  memory, quiesce events, and certain stats.  This can be expanded
54 *  to hold more thread-specific stats within it.
55 */
56struct ThreadState {
57#if FULL_SYSTEM
58    ThreadState(int _cpuId, int _tid)
59        : cpuId(_cpuId), tid(_tid), lastActivate(0), lastSuspend(0),
60          profile(NULL), profileNode(NULL), profilePC(0), quiesceEvent(NULL)
61#else
62    ThreadState(int _cpuId, int _tid, MemObject *mem,
63                Process *_process, short _asid)
64        : cpuId(_cpuId), tid(_tid), process(_process), asid(_asid)
65#endif
66    {
67        funcExeInst = 0;
68        storeCondFailures = 0;
69#if !FULL_SYSTEM
70        /* Use this port to for syscall emulation writes to memory. */
71        Port *mem_port;
72        port = new TranslatingPort(csprintf("%d-funcport",
73                                            tid),
74                                   process->pTable, false);
75        mem_port = mem->getPort("functional");
76        mem_port->setPeer(port);
77        port->setPeer(mem_port);
78#endif
79    }
80
81    ExecContext::Status status;
82
83    int cpuId;
84
85    // Index of hardware thread context on the CPU that this represents.
86    int tid;
87
88    Counter numInst;
89    Stats::Scalar<> numInsts;
90    Stats::Scalar<> numMemRefs;
91
92    // number of simulated loads
93    Counter numLoad;
94    Counter startNumLoad;
95
96#if FULL_SYSTEM
97    Tick lastActivate;
98    Tick lastSuspend;
99
100    FunctionProfile *profile;
101    ProfileNode *profileNode;
102    Addr profilePC;
103
104    EndQuiesceEvent *quiesceEvent;
105
106    Kernel::Statistics *kernelStats;
107#else
108    TranslatingPort *port;
109
110    Process *process;
111
112    // Address space ID.  Note that this is used for TIMING cache
113    // simulation only; all functional memory accesses should use
114    // one of the FunctionalMemory pointers above.
115    short asid;
116
117#endif
118
119    /**
120     * Temporary storage to pass the source address from copy_load to
121     * copy_store.
122     * @todo Remove this temporary when we have a better way to do it.
123     */
124    Addr copySrcAddr;
125    /**
126     * Temp storage for the physical source address of a copy.
127     * @todo Remove this temporary when we have a better way to do it.
128     */
129    Addr copySrcPhysAddr;
130
131    /*
132     * number of executed instructions, for matching with syscall trace
133     * points in EIO files.
134     */
135    Counter funcExeInst;
136
137    //
138    // Count failed store conditionals so we can warn of apparent
139    // application deadlock situations.
140    unsigned storeCondFailures;
141};
142
143#endif // __CPU_THREAD_STATE_HH__
144