gem5.git
10 years agostats: Update stats to reflect ARM fixes
Andreas Hansson [Sun, 28 Sep 2014 20:53:48 +0000 (16:53 -0400)]
stats: Update stats to reflect ARM fixes

As a result of the fixes, the full-system dual-core ARM regressions
are slightly changed. Hopefully this also means there will no longer
be any discrepancies between the results observed on different hosts.

10 years agoarm: Fixed undefined behaviours identified by gcc
Andreas Hansson [Sat, 27 Sep 2014 13:08:37 +0000 (09:08 -0400)]
arm: Fixed undefined behaviours identified by gcc

This patch fixes the runtime errors highlighted by the undefined
behaviour sanitizer. In the end there were two issues. First, when
rotating an immediate, we ended up shifting an uint32_t by 32 in some
cases. This case is fixed by checking for a rotation by 0
positions. Second, the Mrc15 and Mcr15 are operating on an IntReg and
a MiscReg, but we used the type RegRegImmOp and passed a MiscRegIndex
as an IntRegIndex. This issue is resolved by introducing a
MiscRegRegImmOp and RegMiscRegImmOp with the appropriate types.

With these fixes there are no runtime errors identified for the full
ARM regressions.

10 years agoarch: Use const StaticInstPtr references where possible
Andreas Hansson [Sat, 27 Sep 2014 13:08:36 +0000 (09:08 -0400)]
arch: Use const StaticInstPtr references where possible

This patch optimises the passing of StaticInstPtr by avoiding copying
the reference-counting pointer. This avoids first incrementing and
then decrementing the reference-counting pointer.

10 years agoscons: Address issues related to gcc 4.9.1
Andreas Hansson [Sat, 27 Sep 2014 13:08:34 +0000 (09:08 -0400)]
scons: Address issues related to gcc 4.9.1

Fix a number few minor issues to please gcc 4.9.1. Removing the
'-fuse-linker-plugin' flag means no libraries are part of the LTO
process, but hopefully this is an acceptable loss, as the flag causes
issues on a lot of systems (only certain combinations of gcc, ld and
ar work).

10 years agodev: Output invalid access size in IsaFake panic
Curtis Dunham [Sat, 27 Sep 2014 13:08:33 +0000 (09:08 -0400)]
dev: Output invalid access size in IsaFake panic

10 years agomem: Output precise range when XBar has conflicts
Curtis Dunham [Sat, 27 Sep 2014 13:08:32 +0000 (09:08 -0400)]
mem: Output precise range when XBar has conflicts

10 years agomem: Provide better diagnostic for unconnected port
Curtis Dunham [Sat, 27 Sep 2014 13:08:30 +0000 (09:08 -0400)]
mem: Provide better diagnostic for unconnected port

When _masterPort is null, a message to that effect is
more helpful than a segfault.

10 years agomisc: Fix a bunch of minor issues identified by static analysis
Andreas Hansson [Sat, 27 Sep 2014 13:08:29 +0000 (09:08 -0400)]
misc: Fix a bunch of minor issues identified by static analysis

Add some missing initialisation, and fix a handful benign resource
leaks (including some false positives).

10 years agostats: update t1000 stats for recent changes
Steve Reinhardt [Mon, 22 Sep 2014 03:04:39 +0000 (23:04 -0400)]
stats: update t1000 stats for recent changes

10 years agostats: update eio stats for recent changes
Steve Reinhardt [Sun, 21 Sep 2014 20:15:14 +0000 (16:15 -0400)]
stats: update eio stats for recent changes

10 years agostats: Bump stats for filter, crossbar and config changes
Andreas Hansson [Sat, 20 Sep 2014 21:18:53 +0000 (17:18 -0400)]
stats: Bump stats for filter, crossbar and config changes

This patch bumps the stats to reflect the addition of the snoop filter
and snoop stats, the change from bus to crossbar, and the updates to
the ARM regressions that are now using a different CPU and cache
configuration. Lastly, some minor changes are expected due to the
activation cleanup of the CPUs.

10 years agocpu: Remove unused deallocateContext calls
Mitch Hayenga [Sat, 20 Sep 2014 21:18:36 +0000 (17:18 -0400)]
cpu: Remove unused deallocateContext calls

The call paths for de-scheduling a thread are halt() and suspend(), from
the thread context. There is no call to deallocateContext() in general,
though some CPUs chose to define it. This patch removes the function
from BaseCPU and the cores which do not require it.

10 years agoalpha,arm,mips,power,x86,cpu,sim: Cleanup activate/deactivate
Mitch Hayenga [Sat, 20 Sep 2014 21:18:35 +0000 (17:18 -0400)]
alpha,arm,mips,power,x86,cpu,sim: Cleanup activate/deactivate

activate(), suspend(), and halt() used on thread contexts had an optional
delay parameter. However this parameter was often ignored. Also, when used,
the delay was seemily arbitrarily set to 0 or 1 cycle (no other delays were
ever specified). This patch removes the delay parameter and 'Events'
associated with them across all ISAs and cores. Unused activate logic
is also removed.

10 years agotests: Use more representative configs for ARM tests
Andreas Hansson [Sat, 20 Sep 2014 21:18:33 +0000 (17:18 -0400)]
tests: Use more representative configs for ARM tests

This patch changes the CPU and cache configurations used in the ARM SE and FS
regressions to make them more representative, and also get better code
coverage by exercising different replacement policies and use an L2
prefetcher.

10 years agomem: Rename Bus to XBar to better reflect its behaviour
Andreas Hansson [Sat, 20 Sep 2014 21:18:32 +0000 (17:18 -0400)]
mem: Rename Bus to XBar to better reflect its behaviour

This patch changes the name of the Bus classes to XBar to better
reflect the actual timing behaviour. The actual instances in the
config scripts are not renamed, and remain as e.g. iobus or membus.

As part of this renaming, the code has also been clean up slightly,
making use of range-based for loops and tidying up some comments. The
only changes outside the bus/crossbar code is due to the delay
variables in the packet.

--HG--
rename : src/mem/Bus.py => src/mem/XBar.py
rename : src/mem/coherent_bus.cc => src/mem/coherent_xbar.cc
rename : src/mem/coherent_bus.hh => src/mem/coherent_xbar.hh
rename : src/mem/noncoherent_bus.cc => src/mem/noncoherent_xbar.cc
rename : src/mem/noncoherent_bus.hh => src/mem/noncoherent_xbar.hh
rename : src/mem/bus.cc => src/mem/xbar.cc
rename : src/mem/bus.hh => src/mem/xbar.hh

10 years agotests: Add a memtest version using the ideal SnoopFilter
Andreas Hansson [Sat, 20 Sep 2014 21:18:30 +0000 (17:18 -0400)]
tests: Add a memtest version using the ideal SnoopFilter

This patch adds a basic regression test for the snoop filter.

--HG--
rename : tests/configs/memtest.py => tests/configs/memtest-filter.py

10 years agomem: Add access statistics for the snoop filter
Stephan Diestelhorst [Fri, 25 Apr 2014 11:36:16 +0000 (12:36 +0100)]
mem: Add access statistics for the snoop filter

Adds a simple access counter for requests and snoops for the snoop filter and
also classifies hits based on whether a single other holder existed or whether
multiple shares held the line.

10 years agomem: Tie in the snoop filter in the coherent bus
Stephan Diestelhorst [Sat, 20 Sep 2014 21:18:29 +0000 (17:18 -0400)]
mem: Tie in the snoop filter in the coherent bus

10 years agomem: Add a simple snoop counter per bus
Stephan Diestelhorst [Thu, 24 Apr 2014 12:28:47 +0000 (13:28 +0100)]
mem: Add a simple snoop counter per bus

This patch adds a simple counter for both total messages and a histogram for
the fan-out of snoop messages.  The fan-out describes to how many ports snoops
had to be sent per incoming request / snoop-from-below.  Without any
cleverness, this usually means to either all, or all but the requesting port.

10 years agomisc: Add functions for doing popcount and power-of-two checking
Stephan Diestelhorst [Thu, 24 Apr 2014 16:41:26 +0000 (17:41 +0100)]
misc: Add functions for doing popcount and power-of-two checking

Adds two public domain algorithms for determining number of set bits and also
whether a value is a power of two, uses the builtin that is available in GCC
and clang for popcount.

10 years agomem: Simple Snoop Filter
Stephan Diestelhorst [Sat, 20 Sep 2014 21:18:26 +0000 (17:18 -0400)]
mem: Simple Snoop Filter

This is a first cut at a simple snoop filter that tracks presence of lines in
the caches "above" it. The snoop filter can be applied at any given cache
hierarchy and will then handle the caches above it appropriately; there is no
need to use this only in the last-level bus.

This design currently has some limitations: missing stats, no notion of clean
evictions (these will not update the underlying snoop filter, because they are
not sent from the evicting cache down), no notion of capacity for the snoop
filter and thus no need for invalidations caused by capacity pressure in the
snoop filter. These are planned to be added on top with future change sets.

10 years agoenergy: Tighter checking of levels for DFS systems
Stephan Diestelhorst [Tue, 12 Aug 2014 18:00:44 +0000 (19:00 +0100)]
energy: Tighter checking of levels for DFS systems

There are cases where users might by accident / intention specify less voltage
operating points thatn frequency points.  We consider one of these cases
special: giving only a single voltage to a voltage domain effectively renders
it as a static domain.  This patch adds additional logic in the auxiliary parts
of the functionality to handle these cases properly (simple driver asking for
N>1 operating levels, we should return the same voltage for all of them) and
adds error checking code in the voltage domain.

10 years agoenergy: Add the Energy Controller in the right configs
Stephan Diestelhorst [Fri, 25 Jul 2014 12:36:23 +0000 (13:36 +0100)]
energy: Add the Energy Controller in the right configs

Tie in the newly created energy controller components in the default
configurations.

10 years agoenergy: Memory-mapped Energy Controller component
Akash Bagdia [Sat, 20 Sep 2014 21:18:23 +0000 (17:18 -0400)]
energy: Memory-mapped Energy Controller component

This patch provides an Energy Controller device that provides software
(driver) access to a DVFS handler. The device is currently residing in
the dev/arm tree, but there is nothing inherently ARM specific in the
behaviour. It is currently only tested and supported for ARM Linux,
hence the location.

10 years agoenergy: Small extentions and fixes for DVFS handler
Stephan Diestelhorst [Mon, 16 Jun 2014 13:59:44 +0000 (14:59 +0100)]
energy: Small extentions and fixes for DVFS handler

These additions allow easier interoperability with and querying from an
additional controller which will be in a separate patch.  Also adding warnings
for changing the enabled state of the handler across checkpoint / resume and
deviating from the state in the configuration.

Contributed-by: Akash Bagdia <akash.bagdia@arm.com>
10 years agomem: Add DDR4 bank group timing
Wendy Elsasser [Sat, 20 Sep 2014 21:18:21 +0000 (17:18 -0400)]
mem: Add DDR4 bank group timing

Added the following parameter to the DRAMCtrl class:
 - bank_groups_per_rank

This defaults to 1. For the DDR4 case, the default is overridden to indicate
bank group architecture, with multiple bank groups per rank.

Added the following delays to the DRAMCtrl class:
 - tCCD_L : CAS-to-CAS, same bank group delay
 - tRRD_L : RAS-to-RAS, same bank group delay

These parameters are only applied when bank group timing is enabled.  Bank
group timing is currently enabled only for DDR4 memories.

For all other memories, these delays will default to '0 ns'

In the DRAM controller model, applied the bank group timing to the per bank
parameters actAllowedAt and colAllowedAt.
The actAllowedAt will be updated based on bank group when an ACT is issued.
The colAllowedAt will be updated based on bank group when a RD/WR burst is
issued.

At the moment no modifications are made to the scheduling.

10 years agomem: Add memory rank-to-rank delay
Wendy Elsasser [Sat, 20 Sep 2014 21:17:57 +0000 (17:17 -0400)]
mem: Add memory rank-to-rank delay

Add the following delay to the DRAM controller:
 - tCS : Different rank bus turnaround delay

This will be applied for
 1) read-to-read,
 2) write-to-write,
 3) write-to-read, and
 4) read-to-write
command sequences, where the new command accesses a different rank
than the previous burst.

The delay defaults to 2*tCK for each defined memory class. Note that
this does not correspond to one particular timing constraint, but is a
way of modelling all the associated constraints.

The DRAM controller has some minor changes to prioritize commands to
the same rank. This prioritization will only occur when the command
stream is not switching from a read to write or vice versa (in the
case of switching we have a gap in any case).

To prioritize commands to the same rank, the model will determine if there are
any commands queued (same type) to the same rank as the previous command.
This check will ensure that the 'same rank' command will be able to execute
without adding bubbles to the command flow, e.g. any ACT delay requirements
can be done under the hoods, allowing the burst to issue seamlessly.

10 years agocpu: Update DRAM traffic gen
Wendy Elsasser [Sat, 20 Sep 2014 21:17:55 +0000 (17:17 -0400)]
cpu: Update DRAM traffic gen

Add new DRAM_ROTATE mode to traffic generator.
This mode will generate DRAM traffic that rotates across
banks per rank, command types, and ranks per channel

The looping order is illustrated below:
for (ranks per channel)
   for (command types)
      for (banks per rank)
         // Generate DRAM Command Series

This patch also adds the read percentage as an input argument to the
DRAM sweep script. If the simulated read percentage is 0 or 100, the
middle for loop does not generate additional commands.  This loop is
used only when the read percentage is set to 50, in which case the
middle loop will toggle between read and write commands.

Modified sweep.py script, which generates DRAM traffic.
Added input arguments and support for new DRAM_ROTATE mode.
The script now has input arguments for:
 1) Read percentage
 2) Number of ranks
 3) Address mapping
 4) Traffic generator mode  (DRAM or DRAM_ROTATE)

The default values are:
 100% reads, 1 rank, RoRaBaCoCh address mapping, and DRAM traffic gen mode

For the DRAM traffic mode, added multi-rank support.

10 years agodev: Add support for 9p proxying over VirtIO
Andreas Sandberg [Sat, 20 Sep 2014 21:17:54 +0000 (17:17 -0400)]
dev: Add support for 9p proxying over VirtIO

This patch adds support for 9p filesystem proxying over VirtIO. It can
currently operate by connecting to a 9p server over a socket
(VirtIO9PSocket) or by starting the diod 9p server and connecting over
pipe (VirtIO9PDiod).

*WARNING*: Checkpoints are currently not supported for systems with 9p
 proxies!

10 years agodev: Add a VirtIO block device model
Andreas Sandberg [Sat, 20 Sep 2014 21:17:53 +0000 (17:17 -0400)]
dev: Add a VirtIO block device model

10 years agodev: Add a VirtIO console device model
Andreas Sandberg [Sat, 20 Sep 2014 21:17:52 +0000 (17:17 -0400)]
dev: Add a VirtIO console device model

10 years agodev, pci: Implement basic VirtIO support
Andreas Sandberg [Sat, 20 Sep 2014 21:17:51 +0000 (17:17 -0400)]
dev, pci: Implement basic VirtIO support

This patch adds support for VirtIO over the PCI bus. It does so by
providing the following new SimObjects:

 * VirtIODeviceBase - Abstract base class for VirtIO devices.
 * PciVirtIO - VirtIO PCI transport interface.

A VirtIO device is hooked up to the guest system by adding a PciVirtIO
device to the PCI bus and connecting it to a VirtIO device using the
vio parameter.

New VirtIO devices should inherit from VirtIODevice base and
implementing one or more VirtQueues. The VirtQueues are usually
device-specific and all derive from the VirtQueue class. Queues must
be registered with the base class from the constructor since the
device assumes that the number of queues stay constant.

10 years agodev: Refactor terminal<->UART interface to make it more generic
Andreas Sandberg [Sat, 20 Sep 2014 21:17:50 +0000 (17:17 -0400)]
dev: Refactor terminal<->UART interface to make it more generic

The terminal currently assumes that the transport to the guest always
inherits from the Uart class. This assumption breaks when
implementing, for example, a VirtIO consoles. This patch removes this
assumption by adding pointer to the from the terminal to the uart and
replacing it with a more general callback interface. The Uart, or any
other class using the terminal, class implements an instance of the
callbacks class and registers it with the terminal.

10 years agobase: Clean up redundant string functions and use C++11
Andreas Hansson [Sat, 20 Sep 2014 21:17:49 +0000 (17:17 -0400)]
base: Clean up redundant string functions and use C++11

This patch does a bit of housekeeping on the string helper functions
and relies on the C++11 standard library where possible. It also does
away with our custom string hash as an implementation is already part
of the standard library.

10 years agobase: Add getSectionNames to IniFile
Andrew Bardsley [Sat, 20 Sep 2014 21:17:47 +0000 (17:17 -0400)]
base: Add getSectionNames to IniFile

Add an accessor to IniFile to list all the sections in the file.

10 years agotests: automatically kill regressions that take too long
Curtis Dunham [Mon, 25 Aug 2014 19:32:00 +0000 (14:32 -0500)]
tests: automatically kill regressions that take too long

When GNU coreutils 'timeout' is available, limit each regression
simulation to 4 hours.

10 years agocpu: Add ExecFlags debug flag
Mitch Hayenga [Sat, 20 Sep 2014 21:17:45 +0000 (17:17 -0400)]
cpu: Add ExecFlags debug flag

Adds a debug flag to print out the flags a instruction is tagged with.

10 years agomem: Remove the GHB prefetcher from the source tree
Mitch Hayenga [Sat, 20 Sep 2014 21:17:44 +0000 (17:17 -0400)]
mem: Remove the GHB prefetcher from the source tree

There are two primary issues with this code which make it deserving of deletion.

1) GHB is a way to structure a prefetcher, not a definitive type of prefetcher
2) This prefetcher isn't even structured like a GHB prefetcher.
   It's basically a worse version of the stride prefetcher.

It primarily serves to confuse new gem5 users and most functionality is already
present in the stride prefetcher.

10 years agocpu: use probes infrastructure to do simpoint profiling
Dam Sunwoo [Sat, 20 Sep 2014 21:17:43 +0000 (17:17 -0400)]
cpu: use probes infrastructure to do simpoint profiling

Instead of having code embedded in cpu model to do simpoint profiling use
the probes infrastructure to do it.

10 years agoconfig: Cleanup .json config file generation
Andrew Bardsley [Sat, 20 Sep 2014 21:17:42 +0000 (17:17 -0400)]
config: Cleanup .json config file generation

This patch 'completes' .json config files generation by adding in the
SimObject references and String-valued parameters not currently
printed.

TickParamValues are also changed to print in the same tick-value
format as in .ini files.

This allows .json files to describe a system as fully as the .ini files
currently do.

This patch adds a new function config_value (which mirrors ini_str) to
each ParamValue and to SimObject.  This function can then be explicitly
changed to give different .json and .ini printing behaviour rather than
being written in terms of ini_str.

10 years agoarch: Pass faults by const reference where possible
Andreas Hansson [Fri, 19 Sep 2014 14:35:18 +0000 (10:35 -0400)]
arch: Pass faults by const reference where possible

This patch changes how faults are passed between methods in an attempt
to copy as few reference-counting pointer instances as possible. This
should avoid unecessary copies being created, contributing to the
increment/decrement of the reference counters.

10 years agocpu: Use a deque in o3 rename instruction queue
Andreas Hansson [Fri, 19 Sep 2014 14:35:14 +0000 (10:35 -0400)]
cpu: Use a deque in o3 rename instruction queue

Switch from a list to a data structure with better data layout.

10 years agobase: Ensure the CP annotation compiles again
Andreas Hansson [Fri, 19 Sep 2014 14:35:12 +0000 (10:35 -0400)]
base: Ensure the CP annotation compiles again

A bit of revamping to get the CP annotate functionality to compile.

10 years agomisc: Use safe_cast when assumptions are made about return value
Andreas Hansson [Fri, 19 Sep 2014 14:35:11 +0000 (10:35 -0400)]
misc: Use safe_cast when assumptions are made about return value

This patch changes two dynamic_cast to safe_cast as we assume the
return value is not NULL (without checking).

10 years agomisc: Restore ostream flags where needed
Andreas Hansson [Fri, 19 Sep 2014 14:35:09 +0000 (10:35 -0400)]
misc: Restore ostream flags where needed

This patch ensures we adhere to the normal ostream usage rules, and
restore the flags after modifying them.

10 years agostats: Fix flow-control bug in Vector2D printing
Andreas Hansson [Fri, 19 Sep 2014 14:35:08 +0000 (10:35 -0400)]
stats: Fix flow-control bug in Vector2D printing

10 years agomisc: Remove assertions ensuring unsigned values >= 0
Andreas Hansson [Fri, 19 Sep 2014 14:35:07 +0000 (10:35 -0400)]
misc: Remove assertions ensuring unsigned values >= 0

10 years agomem: Check return value of checkFunctional in SimpleMemory
Andreas Hansson [Fri, 19 Sep 2014 14:35:06 +0000 (10:35 -0400)]
mem: Check return value of checkFunctional in SimpleMemory

Simple fix to ensure we only iterate until we are done.

10 years agomem: Add checks to sendTimingReq in cache
Andreas Hansson [Fri, 19 Sep 2014 14:35:04 +0000 (10:35 -0400)]
mem: Add checks to sendTimingReq in cache

A small fix to ensure the return value is not ignored.

10 years agoruby: network: revert some of the changes from ad9c042dce54
Nilay Vaish [Mon, 15 Sep 2014 21:19:38 +0000 (16:19 -0500)]
ruby: network: revert some of the changes from ad9c042dce54
The changeset ad9c042dce54 made changes to the structures under the network
directory to use a map of buffers instead of vector of buffers.
The reasoning was that not all vnets that are created are used and we
needlessly allocate more buffers than required and then iterate over them
while processing network messages.  But the move to map resulted in a slow
down which was pointed out by Andreas Hansson.  This patch moves things
back to using vector of message buffers.

10 years agostats: Minor update of Minor stats after uncacheable fix
Andreas Hansson [Fri, 12 Sep 2014 14:22:50 +0000 (10:22 -0400)]
stats: Minor update of Minor stats after uncacheable fix

10 years agocpu: Fix memory access in Minor not setting parent Request flags
Andrew Bardsley [Fri, 12 Sep 2014 14:22:49 +0000 (10:22 -0400)]
cpu: Fix memory access in Minor not setting parent Request flags

This patch fixes cases where uncacheable/memory type flags are not set
correctly on a memory op which is split in the LSQ.  Without this
patch, request->request if freely used to check flags where the flags
should actually come from the accumulation of request fragment flags.

This patch also fixes a bug where an uncacheable access which passes
through tryToSendRequest more than once can increment
LSQ::numAccessesInMemorySystem more than once.

10 years agostyle: Fix line continuation, especially in debug messages
Andrew Bardsley [Fri, 12 Sep 2014 14:22:47 +0000 (10:22 -0400)]
style: Fix line continuation, especially in debug messages

This patch closes a number of space gaps in debug messages caused by
the incorrect use of line continuation within strings. (There's also
one consistency change to a similar, but correct, use of line
continuation)

10 years agominor: Fix typo in DPRINTF for Minor branch prediction
Andreas Hansson [Fri, 12 Sep 2014 14:22:46 +0000 (10:22 -0400)]
minor: Fix typo in DPRINTF for Minor branch prediction

10 years agosim: Automatically unregister probe listeners
Andreas Sandberg [Tue, 9 Sep 2014 08:36:43 +0000 (04:36 -0400)]
sim: Automatically unregister probe listeners

The ProbeListener base class automatically registers itself with a
probe manager. Currently, the class does not unregister a itself when
it is destroyed, which makes removing probes listeners somewhat
cumbersome. This patch adds an automatic call to
manager->removeListener in the ProbeListener destructor, which solves
the problem.

10 years agoconfig: Fix vectorparam command line parsing
Geoffrey Blake [Tue, 9 Sep 2014 08:36:34 +0000 (04:36 -0400)]
config: Fix vectorparam command line parsing

Parsing vectorparams from the command was slightly broken
in that it wouldn't accept the input that the help message
provided to the user and it didn't do the conversion
on the second code path used to convert the string input
to the actual internal representation.  This patch fixes these bugs.

10 years agocpu: Only iterate over possible threads on the o3 cpu
Mitch Hayenga [Tue, 9 Sep 2014 08:36:34 +0000 (04:36 -0400)]
cpu: Only iterate over possible threads on the o3 cpu

Some places in O3 always iterated over "Impl::MaxThreads" even if a CPU had
fewer threads.  This removes a few of those instances.

10 years agomem: Add accessor function for vaddr
Mitch Hayenga [Tue, 9 Sep 2014 08:36:33 +0000 (04:36 -0400)]
mem: Add accessor function for vaddr

Determine if a request has an associated virtual address.

10 years agosim: Fix resource leak in BaseGlobalEvent
Andreas Sandberg [Tue, 9 Sep 2014 08:36:32 +0000 (04:36 -0400)]
sim: Fix resource leak in BaseGlobalEvent

Static analysis revealed that BaseGlobalEvent::barrier was never
deallocated. This changeset solves this leak by making the barrier
allocation a part of the BaseGlobalEvent instead of storing a pointer
to a separate heap-allocated barrier.

10 years agomisc: Fix a number of unitialised variables and members
Andreas Hansson [Tue, 9 Sep 2014 08:36:31 +0000 (04:36 -0400)]
misc: Fix a number of unitialised variables and members

Static analysis unearther a bunch of uninitialised variables and
members, and this patch addresses the problem. In all cases these
omissions seem benign in the end, but at least fixing them means less
false positives next time round.

10 years agodev: seperate legacy io offsets from PCI offset
Ali Saidi [Wed, 3 Sep 2014 11:43:06 +0000 (07:43 -0400)]
dev: seperate legacy io offsets from PCI offset

The PC platform has a single IO range that is used both legacy IO and PCI IO
while other platforms may use seperate regions. Provide another mechanism to
configure the legacy IO base address range and set it to the PCI IO address
range for x86.

10 years agoarm: Support >2GB of memory for AArch64 systems
Ali Saidi [Wed, 3 Sep 2014 11:43:05 +0000 (07:43 -0400)]
arm: Support >2GB of memory for AArch64 systems

10 years agoarm: Assume we have a kernel that supports pci devices
Ali Saidi [Wed, 3 Sep 2014 11:43:04 +0000 (07:43 -0400)]
arm: Assume we have a kernel that supports pci devices

Change the default kernel for AArch64 and since it supports PCI devices
remove the hack that made it use CF. Unfortunately, there isn't really
a half-way here and we need to switch. Current users will get an error
message that the kernel isn't found and hopefully go download a new
kernel that supports PCI.

10 years agodev, arm: Add support for linux generic pci host driver
Ali Saidi [Wed, 3 Sep 2014 11:43:04 +0000 (07:43 -0400)]
dev, arm: Add support for linux generic pci host driver

This change adds support for a generic pci host bus driver that
has been included in recent Linux kernel instead of the more
bespoke one we've been using to date. It also works with
aarch64 so it provides PCI support for 64-bit ARM Linux.

To make this work a new configuration option pci_io_base is added
to the RealView platform that should be set to the start of
the memory used as memory mapped IO ports (IO ports that are
memory mapped, not regular memory mapped IO). And a parameter
pci_cfg_gen_offsets which specifies if the config space
offsets should be used that the generic driver expects.

To use the pci-host-generic device you need to:
pci_io_base = 0x2f000000 (Valid for VExpress EMM)
pci_cfg_gen_offsets = True

and add the following to your device tree:

    pci {
        compatible = "pci-host-ecam-generic";
        device_type = "pci";
        #address-cells = <0x3>;
        #size-cells = <0x2>;
        #interrupt-cells = <0x1>;
        //bus-range = <0x0 0x1>;

        // CPU_PHYSICAL(2)  SIZE(2)
        // Note, some DTS blobs only support 1 size
        reg = <0x0 0x30000000 0x0 0x10000000>;

        // IO (1), no bus address (2), cpu address (2), size (2)
        // MMIO (1), at address (2), cpu address (2), size (2)
        ranges = <0x01000000 0x0 0x00000000 0x0 0x2f000000 0x0 0x10000>,
                 <0x02000000 0x0 0x40000000 0x0 0x40000000 0x0 0x10000000>;

        // With gem5 we typically use INTA/B/C/D one per device
        interrupt-map = <0x0000 0x0 0x0 0x1 0x1 0x0 0x11 0x1
                         0x0000 0x0 0x0 0x2 0x1 0x0 0x12 0x1
                         0x0000 0x0 0x0 0x3 0x1 0x0 0x13 0x1
                         0x0000 0x0 0x0 0x4 0x1 0x0 0x14 0x1>;

        // Only match INTA/B/C/D and not BDF
        interrupt-map-mask = <0x0000 0x0 0x0 0x7>;
    };

10 years agoconfig: Add port splicing capability to PortRef class
Geoffrey Blake [Wed, 3 Sep 2014 11:43:03 +0000 (07:43 -0400)]
config: Add port splicing capability to PortRef class

The new configuration scripts need the ability to splice
a simobject between a pair of ports that are already connected.
The primary use case is when a CommMonitor needs to be
created after the system is configured and then spliced between
the pair of ports it will monitor.

10 years agoconfig: Update Streamline scripts and configs
Dam Sunwoo [Wed, 3 Sep 2014 11:43:02 +0000 (07:43 -0400)]
config: Update Streamline scripts and configs

Updated the stat_config.ini files to reflect new structure.

Moved to a more generic stat naming scheme that can easily handle
multiple CPUs and L2s by letting the script replace pre-defined #
symbols to CPU or L2 ids.

Removed the previous per_switch_cpus sections. Still can be used by
spelling out the stat names if necessary. (Resuming from checkpoints
no longer use switch_cpus. Only fast-forwarding does.)

10 years agoconfig: Refactor RealviewEMM to fit into new config system
Geoffrey Blake [Wed, 3 Sep 2014 11:43:01 +0000 (07:43 -0400)]
config: Refactor RealviewEMM to fit into new config system

This eliminates some default devices and adds in helper functions
to connect the devices defined here to associate with the proper
clock domains.

10 years agostats: Update stats for CPU and cache changes
Andreas Hansson [Wed, 3 Sep 2014 11:42:59 +0000 (07:42 -0400)]
stats: Update stats for CPU and cache changes

This patch updates the stats to reflect the fixes and changes to the
CPU (mainly the o3), and the caches.

10 years agotests: Use medium dataset for perlbmk regressions
Andreas Hansson [Wed, 3 Sep 2014 11:42:57 +0000 (07:42 -0400)]
tests: Use medium dataset for perlbmk regressions

This patch changes the perlbmk regression script from the large to the
medium dataset to reduce the regression run time. For all ISAs and CPU
models, the total perlbmk host CPU time with the large dataset is
roughly 12 hours (constituting >30% of the total regression host
time). There is, most likely, almost no added value in terms of code
coverage for this rather excessive run time.

10 years agoalpha: Stop using 'inorder' and rely entirely on 'minor'
Andreas Hansson [Wed, 3 Sep 2014 11:42:56 +0000 (07:42 -0400)]
alpha: Stop using 'inorder' and rely entirely on 'minor'

This patch avoids building the 'inorder' CPU model for any permutation
of ALPHA, and also removes the ALPHA regressions using the 'inorder'
CPU. The 'minor' CPU is already providing a broader test coverage.

10 years agobase: Use STL C++11 random number generation
Andreas Hansson [Wed, 3 Sep 2014 11:42:55 +0000 (07:42 -0400)]
base: Use STL C++11 random number generation

This patch changes the random number generator from the in-house
Mersenne twister to an implementation relying entirely on C++11 STL.

The format for the checkpointing of the twister is simplified. As the
functionality was never used this should not matter. Note that this
patch does not actually make use of the checkpointing
functionality. As the random number generator is not thread safe, it
may be sensible to create one generator per thread, system, or even
object. Until this is decided the status quo is maintained in that no
generator state is part of the checkpoint.

10 years agobase: Use the global Mersenne twister throughout
Andreas Hansson [Wed, 3 Sep 2014 11:42:54 +0000 (07:42 -0400)]
base: Use the global Mersenne twister throughout

This patch tidies up random number generation to ensure that it is
done consistently throughout the code base. In essence this involves a
clean-up of Ruby, and some code simplifications in the traffic
generator.

As part of this patch a bunch of skewed distributions (off-by-one etc)
have been fixed.

Note that a single global random number generator is used, and that
the object instantiation order will impact the behaviour (the sequence
of numbers will be unaffected, but if module A calles random before
module B then they would obviously see a different outcome). The
dependency on the instantiation order is true in any case due to the
execution-model of gem5, so we leave it as is. Also note that the
global ranom generator is not thread safe at this point.

Regressions using the memtest, TrafficGen or any Ruby tester are
affected and will be updated accordingly.

10 years agomem: Avoid unecessary retries when bus peer is not ready
Andreas Hansson [Wed, 3 Sep 2014 11:42:53 +0000 (07:42 -0400)]
mem: Avoid unecessary retries when bus peer is not ready

This patch removes unecessary retries that happened when the bus layer
itself was no longer busy, but the the peer was not yet ready. Instead
of sending a retry that will inevitably not succeed, the bus now
silenty waits until the peer sends a retry.

10 years agoarm: Make memory ops work on 64bit/128-bit quantities
Mitch Hayenga [Wed, 3 Sep 2014 11:42:52 +0000 (07:42 -0400)]
arm: Make memory ops work on 64bit/128-bit quantities

Multiple instructions assume only 32-bit load operations are available,
this patch increases load sizes to 64-bit or 128-bit for many load pair and
load multiple instructions.

10 years agomem: write streaming support via WriteInvalidate promotion
Curtis Dunham [Fri, 27 Jun 2014 17:29:00 +0000 (12:29 -0500)]
mem: write streaming support via WriteInvalidate promotion

Support full-block writes directly rather than requiring RMW:
 * a cache line is allocated in the cache upon receipt of a
   WriteInvalidateReq, not the WriteInvalidateResp.
 * only top-level caches allocate the line; the others just pass
   the request along and invalidate as necessary.
 * to close a timing window between the *Req and the *Resp, a new
   metadata bit tracks whether another cache has read a copy of
   the new line before the writeback to memory.

10 years agomem: Fix a bug in the cache port flow control
Andreas Hansson [Wed, 3 Sep 2014 11:42:50 +0000 (07:42 -0400)]
mem: Fix a bug in the cache port flow control

This patch fixes a bug in the cache port where the retry flag was
reset too early, allowing new requests to arrive before the retry was
actually sent, but with the event already scheduled. This caused a
deadlock in the interactions with the O3 LSQ.

The patche fixes the underlying issue by shifting the resetting of the
flag to be done by the event that also calls sendRetry(). The patch
also tidies up the flow control in recvTimingReq and ensures that we
also check if we already have a retry outstanding.

10 years agocpu, mem: Make software prefetches non-blocking
Curtis Dunham [Tue, 13 May 2014 17:20:49 +0000 (12:20 -0500)]
cpu, mem: Make software prefetches non-blocking

Previously, they were treated so much like loads that they could stall
at the head of the ROB.  Now they are always treated like L1 hits.
If they actually miss, a new request is created at the L1 and tracked
from the MSHRs there if necessary (i.e. if it didn't coalesce with
an existing outstanding load).

10 years agomem: Refactor assignment of Packet types
Curtis Dunham [Tue, 13 May 2014 17:20:48 +0000 (12:20 -0500)]
mem: Refactor assignment of Packet types

Put the packet type swizzling (that is currently done in a lot of places)
into a refineCommand() member function.

10 years agox86: Flag instructions that call suspend as IsQuiesce
Mitch Hayenga [Wed, 3 Sep 2014 11:42:46 +0000 (07:42 -0400)]
x86: Flag instructions that call suspend as IsQuiesce

The o3 cpu relies upon instructions that suspend a thread context being
flagged as "IsQuiesce".  If they are not, unpredictable behavior can occur.
This patch fixes that for the x86 ISA.

10 years agocpu: Fix o3 drain bug
Mitch Hayenga [Wed, 3 Sep 2014 11:42:45 +0000 (07:42 -0400)]
cpu: Fix o3 drain bug

For X86, the o3 CPU would get stuck with the commit stage not being
drained if an interrupt arrived while drain was pending. isDrained()
makes sure that pcState.microPC() == 0, thus ensuring that we are at
an instruction boundary. However, when we take an interrupt we
execute:

    pcState.upc(romMicroPC(entry));
    pcState.nupc(romMicroPC(entry) + 1);
    tc->pcState(pcState);

As a result, the MicroPC is no longer zero. This patch ensures the drain is
delayed until no interrupts are present.  Once draining, non-synchronous
interrupts are deffered until after the switch.

10 years agoarm: Fix v8 neon latency issue for loads/stores
Mitch Hayenga [Wed, 3 Sep 2014 11:42:44 +0000 (07:42 -0400)]
arm: Fix v8 neon latency issue for loads/stores

Neon memory ops that operate on multiple registers currently have very poor
performance because of interleave/deinterleave micro-ops.

This patch marks the deinterleave/interleave micro-ops as "No_OpClass" such
that they take minumum cycles to execute and are never resource constrained.

Additionaly the micro-ops over-read registers.  Although one form may need
to read up to 20 sources, not all do.  This adds in new forms so false
dependencies are not modeled.  Instructions read their minimum number of
sources.

10 years agoarm: use condition code registers for ARM ISA
Curtis Dunham [Tue, 29 Apr 2014 21:05:02 +0000 (16:05 -0500)]
arm: use condition code registers for ARM ISA

Analogous to ee049bf (for x86).  Requires a bump of the checkpoint version
and corresponding upgrader code to move the condition code register values
to the new register file.

10 years agoarm: ISA X31 destination register fix
Andrew Bardsley [Wed, 3 Sep 2014 11:42:43 +0000 (07:42 -0400)]
arm: ISA X31 destination register fix

This patch substituted the zero register for X31 used as a
destination register.  This prevents false dependencies based on
X31.

10 years agotests: Use O3_ARM_v7a config for full-system ARM regressions
Andreas Hansson [Wed, 3 Sep 2014 11:42:41 +0000 (07:42 -0400)]
tests: Use O3_ARM_v7a config for full-system ARM regressions

This patch changes the CPU configuration used for the full-system ARM
regressions to increase the test coverage. Note that it is only the
core configuration, and not the caches etc.

10 years agocpu: fix bimodal predictor to use correct global history reg
Dam Sunwoo [Wed, 3 Sep 2014 11:42:41 +0000 (07:42 -0400)]
cpu: fix bimodal predictor to use correct global history reg

A small bug in the bimodal predictor caused significant degradation in
performance on some benchmarks. This was caused by using the wrong
globalHistoryReg during the update phase. This patches fixes the bug
and brings the performance to normal level.

10 years agoarm: Mark v7 cbz instructions as direct branches
Mitch Hayenga [Wed, 3 Sep 2014 11:42:40 +0000 (07:42 -0400)]
arm: Mark v7 cbz instructions as direct branches

v7 cbz/cbnz instructions were improperly marked as indirect branches.

10 years agocpu: Fix cache blocked load behavior in o3 cpu
Mitch Hayenga [Wed, 3 Sep 2014 11:42:39 +0000 (07:42 -0400)]
cpu: Fix cache blocked load behavior in o3 cpu

This patch fixes the load blocked/replay mechanism in the o3 cpu.  Rather than
flushing the entire pipeline, this patch replays loads once the cache becomes
unblocked.

Additionally, deferred memory instructions (loads which had conflicting stores),
when replayed would not respect the number of functional units (only respected
issue width).  This patch also corrects that.

Improvements over 20% have been observed on a microbenchmark designed to
exercise this behavior.

10 years agocpu: Fix o3 quiesce fetch bug
Mitch Hayenga [Wed, 3 Sep 2014 11:42:38 +0000 (07:42 -0400)]
cpu: Fix o3 quiesce fetch bug

O3 is supposed to stop fetching instructions once a quiesce is encountered.
However due to a bug, it would continue fetching instructions from the current
fetch buffer.  This is because of a break statment that only broke out of the
first of 2 nested loops.  It should have broken out of both.

10 years agocpu: Fix SMT scheduling issue with the O3 cpu
Mitch Hayenga [Wed, 3 Sep 2014 11:42:37 +0000 (07:42 -0400)]
cpu: Fix SMT scheduling issue with the O3 cpu

The o3 cpu could attempt to schedule inactive threads under round-robin SMT
mode.

This is because it maintained an independent priority list of threads from the
active thread list.  This priority list could be come stale once threads were
inactive, leading to the cpu trying to fetch/commit from inactive threads.

Additionally the fetch queue is now forcibly flushed of instrctuctions
from the de-scheduled thread.

Relevant output:

24557000: system.cpu: [tid:1]: Calling deactivate thread.
24557000: system.cpu: [tid:1]: Removing from active threads list

24557500: system.cpu:
FullO3CPU: Ticking main, FullO3CPU.
24557500: system.cpu.fetch: Running stage.
24557500: system.cpu.fetch: Attempting to fetch from [tid:1]

10 years agocpu: Fix incorrect speculative branch predictor behavior
Mitch Hayenga [Wed, 3 Sep 2014 11:42:36 +0000 (07:42 -0400)]
cpu: Fix incorrect speculative branch predictor behavior

When a branch mispredicted gem5 would squash all history after and including
the mispredicted branch.  However, the mispredicted branch is still speculative
and its history is required to rollback state if another, older, branch
mispredicts.  This leads to things like RAS corruption.

10 years agocpu: Add a fetch queue to the o3 cpu
Mitch Hayenga [Wed, 3 Sep 2014 11:42:35 +0000 (07:42 -0400)]
cpu: Add a fetch queue to the o3 cpu

This patch adds a fetch queue that sits between fetch and decode to the
o3 cpu.  This effectively decouples fetch from decode stalls allowing it
to be more aggressive, running futher ahead in the instruction stream.

10 years agocpu: Fix o3 front-end pipeline interlock behavior
Mitch Hayenga [Wed, 3 Sep 2014 11:42:34 +0000 (07:42 -0400)]
cpu: Fix o3 front-end pipeline interlock behavior

The o3 pipeline interlock/stall logic is incorrect.  o3 unnecessicarily stalled
fetch and decode due to later stages in the pipeline.  In general, a stage
should usually only consider if it is stalled by the adjacent, downstream stage.
Forcing stalls due to later stages creates and results in bubbles in the
pipeline.  Additionally, o3 stalled the entire frontend (fetch, decode, rename)
on a branch mispredict while the ROB is being serially walked to update the
RAT (robSquashing). Only should have stalled at rename.

10 years agocpu: Change writeback modeling for outstanding instructions
Mitch Hayenga [Wed, 3 Sep 2014 11:42:33 +0000 (07:42 -0400)]
cpu: Change writeback modeling for outstanding instructions

As highlighed on the mailing list gem5's writeback modeling can impact
performance.  This patch removes the limitation on maximum outstanding issued
instructions, however the number that can writeback in a single cycle is still
respected in instToCommit().

10 years agoarch: Properly guess OpClass from optional StaticInst flags
Mitch Hayenga [Wed, 3 Sep 2014 11:42:32 +0000 (07:42 -0400)]
arch: Properly guess OpClass from optional StaticInst flags

isa_parser.py guesses the OpClass if none were given based upon the StaticInst
flags.  The existing code does not take into account optionally set flags.
This code hoists the setting of optional flags so OpClass is properly assigned.

10 years agocache: Fix handling of LL/SC requests under contention
Geoffrey Blake [Wed, 3 Sep 2014 11:42:31 +0000 (07:42 -0400)]
cache: Fix handling of LL/SC requests under contention

If a set of LL/SC requests contend on the same cache block we
can get into a situation where CPUs will deadlock if they expect
a failed SC to supply them data.  This case happens where 3 or
more cores are contending for a cache block using LL/SC and the system
is configured where 2 cores are connected to a local bus and the
third is connected to a remote bus.  If a core on the local bus
sends an SCUpgrade and the core on the remote bus sends and SCUpgrade
they will race to see who will win the SC access.  In the meantime
if the other core appends a read to one of the SCUpgrades it will expect
to be supplied data by that SCUpgrade transaction.  If it happens that
the SCUpgrade that was picked to supply the data is failed, it will
drop the appended request for data and never respond, leaving the requesting
core to deadlock.  This patch makes all SC's behave as normal stores to
prevent this case but still makes sure to check whether it can perform
the update.

10 years agoarm: support 16kb vm granules
Curtis Dunham [Tue, 27 May 2014 16:00:56 +0000 (11:00 -0500)]
arm: support 16kb vm granules

10 years agomem: Add utility script to plot DRAM efficiency sweep
Andreas Hansson [Wed, 3 Sep 2014 11:42:29 +0000 (07:42 -0400)]
mem: Add utility script to plot DRAM efficiency sweep

This patch adds basic functionality to quickly visualise the output
from the DRAM efficiency script. There are some unfortunate hacks
needed to communicate the needed information from one script to the
other, and we fall back on (ab)using the simout to do this.

As part of this patch we also trim the efficiency sweep to stop at 512
bytes as this should be sufficient for all forseeable DRAMs.

10 years agomem: Packet queue clean up
Andreas Hansson [Wed, 3 Sep 2014 11:42:28 +0000 (07:42 -0400)]
mem: Packet queue clean up

No change in functionality, just a bit of tidying up.

10 years agodev: Avoid invalid sized reads in PL390 with DPRINTF enabled
Mitch Hayenga [Wed, 3 Sep 2014 11:42:27 +0000 (07:42 -0400)]
dev: Avoid invalid sized reads in PL390 with DPRINTF enabled

The first DPRINTF() in PL390::writeDistributor always read a uint32_t, though a
packet may have only been 1 or 2 bytes.  This caused an assertion in
packet->get().

10 years agosim: Fix checkpoint restore for Ticked
Andrew Bardsley [Wed, 3 Sep 2014 11:42:25 +0000 (07:42 -0400)]
sim: Fix checkpoint restore for Ticked

This patch makes restoring the 'lastStopped' value for Ticked-containing
objects (including MinorCPU) optional so that Ticked-containing objects
can be restored from non-Ticked-containing objects (such as AtomicSimpleCPU).