kernel_stats.cc revision 1108
113759Sgiacomo.gabrielli@arm.com/*
213759Sgiacomo.gabrielli@arm.com * Copyright (c) 2003 The Regents of The University of Michigan
313759Sgiacomo.gabrielli@arm.com * All rights reserved.
413759Sgiacomo.gabrielli@arm.com *
513759Sgiacomo.gabrielli@arm.com * Redistribution and use in source and binary forms, with or without
613759Sgiacomo.gabrielli@arm.com * modification, are permitted provided that the following conditions are
713759Sgiacomo.gabrielli@arm.com * met: redistributions of source code must retain the above copyright
813759Sgiacomo.gabrielli@arm.com * notice, this list of conditions and the following disclaimer;
913759Sgiacomo.gabrielli@arm.com * redistributions in binary form must reproduce the above copyright
1013759Sgiacomo.gabrielli@arm.com * notice, this list of conditions and the following disclaimer in the
1113759Sgiacomo.gabrielli@arm.com * documentation and/or other materials provided with the distribution;
1213759Sgiacomo.gabrielli@arm.com * neither the name of the copyright holders nor the names of its
1313759Sgiacomo.gabrielli@arm.com * contributors may be used to endorse or promote products derived from
1413759Sgiacomo.gabrielli@arm.com * this software without specific prior written permission.
1513759Sgiacomo.gabrielli@arm.com *
1613759Sgiacomo.gabrielli@arm.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
1713759Sgiacomo.gabrielli@arm.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
1813759Sgiacomo.gabrielli@arm.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
1913759Sgiacomo.gabrielli@arm.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
2013759Sgiacomo.gabrielli@arm.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2113759Sgiacomo.gabrielli@arm.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
2213759Sgiacomo.gabrielli@arm.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2313759Sgiacomo.gabrielli@arm.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2413759Sgiacomo.gabrielli@arm.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2513759Sgiacomo.gabrielli@arm.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
2613759Sgiacomo.gabrielli@arm.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2713759Sgiacomo.gabrielli@arm.com */
2813759Sgiacomo.gabrielli@arm.com
2913759Sgiacomo.gabrielli@arm.com#include <map>
3013759Sgiacomo.gabrielli@arm.com#include <stack>
3113759Sgiacomo.gabrielli@arm.com#include <string>
3213759Sgiacomo.gabrielli@arm.com
3313759Sgiacomo.gabrielli@arm.com#include "arch/alpha/osfpal.hh"
3413759Sgiacomo.gabrielli@arm.com#include "base/trace.hh"
3513759Sgiacomo.gabrielli@arm.com#include "base/statistics.hh"
3613759Sgiacomo.gabrielli@arm.com#include "base/stats/bin.hh"
3713759Sgiacomo.gabrielli@arm.com#include "cpu/exec_context.hh"
3813759Sgiacomo.gabrielli@arm.com#include "cpu/pc_event.hh"
3913759Sgiacomo.gabrielli@arm.com#include "cpu/static_inst.hh"
4013759Sgiacomo.gabrielli@arm.com#include "kern/kernel_stats.hh"
4113759Sgiacomo.gabrielli@arm.com#include "kern/linux/linux_syscalls.hh"
4213759Sgiacomo.gabrielli@arm.com#include "kern/tru64/tru64_syscalls.hh"
4313759Sgiacomo.gabrielli@arm.com
4413759Sgiacomo.gabrielli@arm.comusing namespace std;
4513759Sgiacomo.gabrielli@arm.comusing namespace Stats;
4613759Sgiacomo.gabrielli@arm.com
4713759Sgiacomo.gabrielli@arm.comnamespace Kernel {
4813759Sgiacomo.gabrielli@arm.com
4913759Sgiacomo.gabrielli@arm.comconst char *modestr[] = { "kernel", "user", "idle", "interrupt" };
5013759Sgiacomo.gabrielli@arm.com
5113759Sgiacomo.gabrielli@arm.comStatistics::Statistics(ExecContext *context)
5213759Sgiacomo.gabrielli@arm.com    : xc(context), idleProcess((Addr)-1), themode(kernel), lastModeTick(0),
5313759Sgiacomo.gabrielli@arm.com      iplLast(0), iplLastTick(0)
5413759Sgiacomo.gabrielli@arm.com{
5513759Sgiacomo.gabrielli@arm.com    bin_int = xc->system->params->bin_int;
5613759Sgiacomo.gabrielli@arm.com}
5713759Sgiacomo.gabrielli@arm.com
5813759Sgiacomo.gabrielli@arm.comvoid
5913759Sgiacomo.gabrielli@arm.comStatistics::regStats(const string &_name)
6013759Sgiacomo.gabrielli@arm.com{
6113759Sgiacomo.gabrielli@arm.com    myname = _name;
6213759Sgiacomo.gabrielli@arm.com
6313759Sgiacomo.gabrielli@arm.com    _arm
6413759Sgiacomo.gabrielli@arm.com        .name(name() + ".inst.arm")
6513759Sgiacomo.gabrielli@arm.com        .desc("number of arm instructions executed")
6613759Sgiacomo.gabrielli@arm.com        ;
6713759Sgiacomo.gabrielli@arm.com
6813759Sgiacomo.gabrielli@arm.com    _quiesce
6913759Sgiacomo.gabrielli@arm.com        .name(name() + ".inst.quiesce")
7013759Sgiacomo.gabrielli@arm.com        .desc("number of quiesce instructions executed")
7113759Sgiacomo.gabrielli@arm.com        ;
7213759Sgiacomo.gabrielli@arm.com
7313759Sgiacomo.gabrielli@arm.com    _ivlb
7413759Sgiacomo.gabrielli@arm.com        .name(name() + ".inst.ivlb")
7513759Sgiacomo.gabrielli@arm.com        .desc("number of ivlb instructions executed")
7613759Sgiacomo.gabrielli@arm.com        ;
7713759Sgiacomo.gabrielli@arm.com
7813759Sgiacomo.gabrielli@arm.com    _ivle
7913759Sgiacomo.gabrielli@arm.com        .name(name() + ".inst.ivle")
8013759Sgiacomo.gabrielli@arm.com        .desc("number of ivle instructions executed")
8113759Sgiacomo.gabrielli@arm.com        ;
8213759Sgiacomo.gabrielli@arm.com
8313759Sgiacomo.gabrielli@arm.com    _hwrei
8413759Sgiacomo.gabrielli@arm.com        .name(name() + ".inst.hwrei")
8513759Sgiacomo.gabrielli@arm.com        .desc("number of hwrei instructions executed")
8613759Sgiacomo.gabrielli@arm.com        ;
8713759Sgiacomo.gabrielli@arm.com
8813759Sgiacomo.gabrielli@arm.com    _iplCount
8913759Sgiacomo.gabrielli@arm.com        .init(32)
9013759Sgiacomo.gabrielli@arm.com        .name(name() + ".ipl_count")
9113759Sgiacomo.gabrielli@arm.com        .desc("number of times we switched to this ipl")
9213759Sgiacomo.gabrielli@arm.com        .flags(total | pdf | nozero | nonan)
9313759Sgiacomo.gabrielli@arm.com        ;
9413759Sgiacomo.gabrielli@arm.com
9513759Sgiacomo.gabrielli@arm.com    _iplGood
9613759Sgiacomo.gabrielli@arm.com        .init(32)
9713759Sgiacomo.gabrielli@arm.com        .name(name() + ".ipl_good")
9813759Sgiacomo.gabrielli@arm.com        .desc("number of times we switched to this ipl from a different ipl")
9913759Sgiacomo.gabrielli@arm.com        .flags(total | pdf | nozero | nonan)
10013759Sgiacomo.gabrielli@arm.com        ;
10113759Sgiacomo.gabrielli@arm.com
10213759Sgiacomo.gabrielli@arm.com    _iplTicks
10313759Sgiacomo.gabrielli@arm.com        .init(32)
10413759Sgiacomo.gabrielli@arm.com        .name(name() + ".ipl_ticks")
10513759Sgiacomo.gabrielli@arm.com        .desc("number of cycles we spent at this ipl")
10613759Sgiacomo.gabrielli@arm.com        .flags(total | pdf | nozero | nonan)
10713759Sgiacomo.gabrielli@arm.com        ;
10813759Sgiacomo.gabrielli@arm.com
10913759Sgiacomo.gabrielli@arm.com    _iplUsed
11013759Sgiacomo.gabrielli@arm.com        .name(name() + ".ipl_used")
11113759Sgiacomo.gabrielli@arm.com        .desc("fraction of swpipl calls that actually changed the ipl")
11213759Sgiacomo.gabrielli@arm.com        .flags(total | nozero | nonan)
11313759Sgiacomo.gabrielli@arm.com        ;
11413759Sgiacomo.gabrielli@arm.com
11513759Sgiacomo.gabrielli@arm.com    _iplUsed = _iplGood / _iplCount;
11613759Sgiacomo.gabrielli@arm.com
11713759Sgiacomo.gabrielli@arm.com    _callpal
11813759Sgiacomo.gabrielli@arm.com        .init(256)
11913759Sgiacomo.gabrielli@arm.com        .name(name() + ".callpal")
12013759Sgiacomo.gabrielli@arm.com        .desc("number of callpals executed")
12113759Sgiacomo.gabrielli@arm.com        .flags(total | pdf | nozero | nonan)
12213759Sgiacomo.gabrielli@arm.com        ;
12313759Sgiacomo.gabrielli@arm.com
12413759Sgiacomo.gabrielli@arm.com    for (int i = 0; i < PAL::NumCodes; ++i) {
12513759Sgiacomo.gabrielli@arm.com        const char *str = PAL::name(i);
12613759Sgiacomo.gabrielli@arm.com        if (str)
12713759Sgiacomo.gabrielli@arm.com            _callpal.subname(i, str);
12813759Sgiacomo.gabrielli@arm.com    }
12913759Sgiacomo.gabrielli@arm.com
13013759Sgiacomo.gabrielli@arm.com    _syscall
13113759Sgiacomo.gabrielli@arm.com        .init(SystemCalls<Tru64>::Number)
13213759Sgiacomo.gabrielli@arm.com        .name(name() + ".syscall")
13313759Sgiacomo.gabrielli@arm.com        .desc("number of syscalls executed")
13413759Sgiacomo.gabrielli@arm.com        .flags(total | pdf | nozero | nonan)
13513759Sgiacomo.gabrielli@arm.com        ;
13613759Sgiacomo.gabrielli@arm.com
13713759Sgiacomo.gabrielli@arm.com    for (int i = 0; i < SystemCalls<Tru64>::Number; ++i) {
13813759Sgiacomo.gabrielli@arm.com        const char *str = SystemCalls<Tru64>::name(i);
13913759Sgiacomo.gabrielli@arm.com        if (str) {
14013759Sgiacomo.gabrielli@arm.com            _syscall.subname(i, str);
14113759Sgiacomo.gabrielli@arm.com        }
14213759Sgiacomo.gabrielli@arm.com    }
14313759Sgiacomo.gabrielli@arm.com
14413759Sgiacomo.gabrielli@arm.com    _faults
14513759Sgiacomo.gabrielli@arm.com        .init(Num_Faults)
14613759Sgiacomo.gabrielli@arm.com        .name(name() + ".faults")
14713759Sgiacomo.gabrielli@arm.com        .desc("number of faults")
14813759Sgiacomo.gabrielli@arm.com        .flags(total | pdf | nozero | nonan)
14913759Sgiacomo.gabrielli@arm.com        ;
15013759Sgiacomo.gabrielli@arm.com
15113759Sgiacomo.gabrielli@arm.com    for (int i = 1; i < Num_Faults; ++i) {
15213759Sgiacomo.gabrielli@arm.com        const char *str = FaultName(i);
15313759Sgiacomo.gabrielli@arm.com        if (str)
15413759Sgiacomo.gabrielli@arm.com            _faults.subname(i, str);
15513759Sgiacomo.gabrielli@arm.com    }
15613759Sgiacomo.gabrielli@arm.com
15713759Sgiacomo.gabrielli@arm.com    _mode
15813759Sgiacomo.gabrielli@arm.com        .init(cpu_mode_num)
15913759Sgiacomo.gabrielli@arm.com        .name(name() + ".mode_switch")
16013759Sgiacomo.gabrielli@arm.com        .desc("number of protection mode switches")
16113759Sgiacomo.gabrielli@arm.com        ;
16213759Sgiacomo.gabrielli@arm.com
16313759Sgiacomo.gabrielli@arm.com    for (int i = 0; i < cpu_mode_num; ++i)
16413759Sgiacomo.gabrielli@arm.com        _mode.subname(i, modestr[i]);
16513759Sgiacomo.gabrielli@arm.com
16613759Sgiacomo.gabrielli@arm.com    _modeGood
16713759Sgiacomo.gabrielli@arm.com        .init(cpu_mode_num)
16813759Sgiacomo.gabrielli@arm.com        .name(name() + ".mode_good")
16913759Sgiacomo.gabrielli@arm.com        ;
17013759Sgiacomo.gabrielli@arm.com
17113759Sgiacomo.gabrielli@arm.com    for (int i = 0; i < cpu_mode_num; ++i)
17213759Sgiacomo.gabrielli@arm.com        _modeGood.subname(i, modestr[i]);
17313759Sgiacomo.gabrielli@arm.com
17413759Sgiacomo.gabrielli@arm.com    _modeFraction
17513759Sgiacomo.gabrielli@arm.com        .name(name() + ".mode_switch_good")
17613759Sgiacomo.gabrielli@arm.com        .desc("fraction of useful protection mode switches")
17713759Sgiacomo.gabrielli@arm.com        .flags(total)
17813759Sgiacomo.gabrielli@arm.com        ;
17913759Sgiacomo.gabrielli@arm.com
18013759Sgiacomo.gabrielli@arm.com    for (int i = 0; i < cpu_mode_num; ++i)
18113759Sgiacomo.gabrielli@arm.com        _modeFraction.subname(i, modestr[i]);
18213759Sgiacomo.gabrielli@arm.com
18313759Sgiacomo.gabrielli@arm.com    _modeFraction = _modeGood / _mode;
18413759Sgiacomo.gabrielli@arm.com
18513759Sgiacomo.gabrielli@arm.com    _modeTicks
18613759Sgiacomo.gabrielli@arm.com        .init(cpu_mode_num)
18713759Sgiacomo.gabrielli@arm.com        .name(name() + ".mode_ticks")
18813759Sgiacomo.gabrielli@arm.com        .desc("number of ticks spent at the given mode")
18913759Sgiacomo.gabrielli@arm.com        .flags(pdf)
19013759Sgiacomo.gabrielli@arm.com        ;
19113759Sgiacomo.gabrielli@arm.com    for (int i = 0; i < cpu_mode_num; ++i)
19213759Sgiacomo.gabrielli@arm.com        _modeTicks.subname(i, modestr[i]);
19313759Sgiacomo.gabrielli@arm.com
19413759Sgiacomo.gabrielli@arm.com    _swap_context
19513759Sgiacomo.gabrielli@arm.com        .name(name() + ".swap_context")
19613759Sgiacomo.gabrielli@arm.com        .desc("number of times the context was actually changed")
19713759Sgiacomo.gabrielli@arm.com        ;
19813759Sgiacomo.gabrielli@arm.com}
19913759Sgiacomo.gabrielli@arm.com
20013759Sgiacomo.gabrielli@arm.comvoid
20113759Sgiacomo.gabrielli@arm.comStatistics::setIdleProcess(Addr idlepcbb)
20213759Sgiacomo.gabrielli@arm.com{
20313759Sgiacomo.gabrielli@arm.com    assert(themode == kernel || themode == interrupt);
20413759Sgiacomo.gabrielli@arm.com    idleProcess = idlepcbb;
20513759Sgiacomo.gabrielli@arm.com    themode = idle;
20613759Sgiacomo.gabrielli@arm.com    changeMode(themode);
20713759Sgiacomo.gabrielli@arm.com}
20813759Sgiacomo.gabrielli@arm.com
20913759Sgiacomo.gabrielli@arm.comvoid
21013759Sgiacomo.gabrielli@arm.comStatistics::changeMode(cpu_mode newmode)
21113759Sgiacomo.gabrielli@arm.com{
21213759Sgiacomo.gabrielli@arm.com    _mode[newmode]++;
21313759Sgiacomo.gabrielli@arm.com
21413759Sgiacomo.gabrielli@arm.com    if (newmode == themode)
21513759Sgiacomo.gabrielli@arm.com        return;
21613759Sgiacomo.gabrielli@arm.com
21713759Sgiacomo.gabrielli@arm.com    DPRINTF(Context, "old mode=%-8s new mode=%-8s\n",
21813759Sgiacomo.gabrielli@arm.com            modestr[themode], modestr[newmode]);
21913759Sgiacomo.gabrielli@arm.com
22013759Sgiacomo.gabrielli@arm.com    _modeGood[newmode]++;
22113759Sgiacomo.gabrielli@arm.com    _modeTicks[themode] += curTick - lastModeTick;
22213759Sgiacomo.gabrielli@arm.com
22313759Sgiacomo.gabrielli@arm.com    xc->system->kernelBinning->changeMode(newmode);
22413759Sgiacomo.gabrielli@arm.com
22513759Sgiacomo.gabrielli@arm.com    lastModeTick = curTick;
22613759Sgiacomo.gabrielli@arm.com    themode = newmode;
22713759Sgiacomo.gabrielli@arm.com}
22813759Sgiacomo.gabrielli@arm.com
22913759Sgiacomo.gabrielli@arm.comvoid
23013759Sgiacomo.gabrielli@arm.comStatistics::swpipl(int ipl)
23113759Sgiacomo.gabrielli@arm.com{
23213759Sgiacomo.gabrielli@arm.com    assert(ipl >= 0 && ipl <= 0x1f && "invalid IPL\n");
23313759Sgiacomo.gabrielli@arm.com
23413759Sgiacomo.gabrielli@arm.com    _iplCount[ipl]++;
23513759Sgiacomo.gabrielli@arm.com
23613759Sgiacomo.gabrielli@arm.com    if (ipl == iplLast)
23713759Sgiacomo.gabrielli@arm.com        return;
23813759Sgiacomo.gabrielli@arm.com
23913759Sgiacomo.gabrielli@arm.com    _iplGood[ipl]++;
24013759Sgiacomo.gabrielli@arm.com    _iplTicks[iplLast] += curTick - iplLastTick;
24113759Sgiacomo.gabrielli@arm.com    iplLastTick = curTick;
24213759Sgiacomo.gabrielli@arm.com    iplLast = ipl;
24313759Sgiacomo.gabrielli@arm.com}
24413759Sgiacomo.gabrielli@arm.com
24513759Sgiacomo.gabrielli@arm.comvoid
24613759Sgiacomo.gabrielli@arm.comStatistics::mode(cpu_mode newmode)
24713759Sgiacomo.gabrielli@arm.com{
24813759Sgiacomo.gabrielli@arm.com    Addr pcbb = xc->regs.ipr[AlphaISA::IPR_PALtemp23];
24913759Sgiacomo.gabrielli@arm.com
25013759Sgiacomo.gabrielli@arm.com    if ((newmode == kernel || newmode == interrupt) &&
25113759Sgiacomo.gabrielli@arm.com            pcbb == idleProcess)
25213759Sgiacomo.gabrielli@arm.com        newmode = idle;
25313759Sgiacomo.gabrielli@arm.com
25413759Sgiacomo.gabrielli@arm.com    if (bin_int == false && newmode == interrupt)
25513759Sgiacomo.gabrielli@arm.com        newmode = kernel;
25613759Sgiacomo.gabrielli@arm.com
25713759Sgiacomo.gabrielli@arm.com    changeMode(newmode);
25813759Sgiacomo.gabrielli@arm.com}
25913759Sgiacomo.gabrielli@arm.com
26013759Sgiacomo.gabrielli@arm.comvoid
26113759Sgiacomo.gabrielli@arm.comStatistics::context(Addr oldpcbb, Addr newpcbb)
26213759Sgiacomo.gabrielli@arm.com{
26313759Sgiacomo.gabrielli@arm.com    assert(themode != user);
26413759Sgiacomo.gabrielli@arm.com
26513759Sgiacomo.gabrielli@arm.com    _swap_context++;
26613759Sgiacomo.gabrielli@arm.com    changeMode(newpcbb == idleProcess ? idle : kernel);
26713759Sgiacomo.gabrielli@arm.com}
26813759Sgiacomo.gabrielli@arm.com
26913759Sgiacomo.gabrielli@arm.comvoid
27013759Sgiacomo.gabrielli@arm.comStatistics::callpal(int code)
27113759Sgiacomo.gabrielli@arm.com{
27213759Sgiacomo.gabrielli@arm.com    if (!PAL::name(code))
27313759Sgiacomo.gabrielli@arm.com        return;
27413759Sgiacomo.gabrielli@arm.com
27513759Sgiacomo.gabrielli@arm.com    _callpal[code]++;
27613759Sgiacomo.gabrielli@arm.com
27713759Sgiacomo.gabrielli@arm.com    switch (code) {
27813759Sgiacomo.gabrielli@arm.com      case PAL::callsys: {
27913759Sgiacomo.gabrielli@arm.com          int number = xc->regs.intRegFile[0];
28013759Sgiacomo.gabrielli@arm.com          if (SystemCalls<Tru64>::validSyscallNumber(number)) {
28113759Sgiacomo.gabrielli@arm.com              int cvtnum = SystemCalls<Tru64>::convert(number);
28213759Sgiacomo.gabrielli@arm.com              _syscall[cvtnum]++;
28313759Sgiacomo.gabrielli@arm.com          }
28413759Sgiacomo.gabrielli@arm.com      } break;
28513759Sgiacomo.gabrielli@arm.com
28613759Sgiacomo.gabrielli@arm.com      case PAL::swpctx:
28713759Sgiacomo.gabrielli@arm.com        if (xc->system->kernelBinning)
28813759Sgiacomo.gabrielli@arm.com            xc->system->kernelBinning->palSwapContext(xc);
28913759Sgiacomo.gabrielli@arm.com        break;
29013759Sgiacomo.gabrielli@arm.com    }
29113759Sgiacomo.gabrielli@arm.com}
29213759Sgiacomo.gabrielli@arm.com
29313759Sgiacomo.gabrielli@arm.comvoid
29413759Sgiacomo.gabrielli@arm.comStatistics::serialize(ostream &os)
29513759Sgiacomo.gabrielli@arm.com{
29613759Sgiacomo.gabrielli@arm.com    int exemode = themode;
29713759Sgiacomo.gabrielli@arm.com    SERIALIZE_SCALAR(exemode);
29813759Sgiacomo.gabrielli@arm.com    SERIALIZE_SCALAR(idleProcess);
29913759Sgiacomo.gabrielli@arm.com    SERIALIZE_SCALAR(iplLast);
30013759Sgiacomo.gabrielli@arm.com    SERIALIZE_SCALAR(iplLastTick);
30113759Sgiacomo.gabrielli@arm.com    SERIALIZE_SCALAR(lastModeTick);
30213759Sgiacomo.gabrielli@arm.com}
30313759Sgiacomo.gabrielli@arm.com
30413759Sgiacomo.gabrielli@arm.comvoid
30513759Sgiacomo.gabrielli@arm.comStatistics::unserialize(Checkpoint *cp, const string &section)
30613759Sgiacomo.gabrielli@arm.com{
30713759Sgiacomo.gabrielli@arm.com    int exemode;
30813759Sgiacomo.gabrielli@arm.com    UNSERIALIZE_SCALAR(exemode);
30913759Sgiacomo.gabrielli@arm.com    UNSERIALIZE_SCALAR(idleProcess);
31013759Sgiacomo.gabrielli@arm.com    UNSERIALIZE_SCALAR(iplLast);
31113759Sgiacomo.gabrielli@arm.com    UNSERIALIZE_SCALAR(iplLastTick);
31213759Sgiacomo.gabrielli@arm.com    UNSERIALIZE_SCALAR(lastModeTick);
31313759Sgiacomo.gabrielli@arm.com    themode = (cpu_mode)exemode;
31413759Sgiacomo.gabrielli@arm.com}
31513759Sgiacomo.gabrielli@arm.com
31613759Sgiacomo.gabrielli@arm.com/* end namespace Kernel */ }
31713759Sgiacomo.gabrielli@arm.com