[gem5-dev] Cron /z/m5/regression/do-regression quick

2019-03-14 Thread Cron Daemon
* 
build/ARM/tests/opt/quick/fs/10.linux-boot/arm/linux/realview-simple-timing-dual:
 FAILED!
* build/ARM/tests/opt/quick/se/00.hello/arm/linux/o3-timing: FAILED!
* 
build/RISCV/tests/opt/quick/se/02.insttest/riscv/linux-rv64c/simple-timing-ruby:
 FAILED!
* 
build/RISCV/tests/opt/quick/se/02.insttest/riscv/linux-rv64c/simple-atomic: 
FAILED!
* build/RISCV/tests/opt/quick/se/02.insttest/riscv/linux-rv64f/o3-timing: 
FAILED!
* 
build/RISCV/tests/opt/quick/se/02.insttest/riscv/linux-rv64c/simple-timing: 
FAILED!
* 
build/RISCV/tests/opt/quick/se/02.insttest/riscv/linux-rv64c/minor-timing: 
FAILED!
* build/RISCV/tests/opt/quick/se/02.insttest/riscv/linux-rv64c/o3-timing: 
FAILED!
* build/ALPHA/tests/opt/quick/se/00.hello/alpha/linux/simple-timing-ruby: 
CHANGED!
* build/ALPHA/tests/opt/quick/se/00.hello/alpha/linux/o3-timing: CHANGED!
* build/ALPHA/tests/opt/quick/se/00.hello/alpha/linux/minor-timing: CHANGED!
* build/ALPHA/tests/opt/quick/se/00.hello/alpha/linux/simple-timing: 
CHANGED!
* build/ALPHA/tests/opt/quick/se/00.hello/alpha/linux/simple-atomic: 
CHANGED!
* 
build/ALPHA/tests/opt/quick/se/03.learning-gem5/alpha/linux/learning-gem5-p1-two-level:
 CHANGED!
* build/ALPHA/tests/opt/quick/se/01.hello-2T-smt/alpha/linux/o3-timing-mt: 
CHANGED!
* 
build/ALPHA/tests/opt/quick/se/03.learning-gem5/alpha/linux/learning-gem5-p1-simple:
 CHANGED!
* 
build/ALPHA/tests/opt/quick/fs/10.linux-boot/alpha/linux/tsunami-simple-atomic: 
CHANGED!
* 
build/ALPHA/tests/opt/quick/fs/10.linux-boot/alpha/linux/tsunami-simple-atomic-dual:
 CHANGED!
* 
build/ALPHA/tests/opt/quick/fs/10.linux-boot/alpha/linux/tsunami-simple-timing: 
CHANGED!
* 
build/ALPHA/tests/opt/quick/fs/10.linux-boot/alpha/linux/tsunami-simple-timing-dual:
 CHANGED!
* build/MIPS/tests/opt/quick/se/00.hello/mips/linux/simple-timing: CHANGED!
* build/MIPS/tests/opt/quick/se/00.hello/mips/linux/simple-atomic: CHANGED!
* 
build/MIPS/tests/opt/quick/se/03.learning-gem5/mips/linux/learning-gem5-p1-simple:
 CHANGED!
* build/MIPS/tests/opt/quick/se/00.hello/mips/linux/o3-timing: CHANGED!
* 
build/MIPS/tests/opt/quick/se/03.learning-gem5/mips/linux/learning-gem5-p1-two-level:
 CHANGED!
* build/MIPS/tests/opt/quick/se/00.hello/mips/linux/simple-timing-ruby: 
CHANGED!
* 
build/ALPHA/tests/opt/quick/fs/80.netperf-stream/alpha/linux/twosys-tsunami-simple-atomic:
 CHANGED!
* build/NULL/tests/opt/quick/se/80.dram-openpage/null/none/dram-lowp: 
CHANGED!
* build/NULL/tests/opt/quick/se/70.tgen/null/none/tgen-simple-mem: CHANGED!
* build/NULL/tests/opt/quick/se/80.dram-closepage/null/none/dram-lowp: 
CHANGED!
* build/NULL/tests/opt/quick/se/60.rubytest/null/none/rubytest-ruby: 
CHANGED!
* build/NULL/tests/opt/quick/se/70.tgen/null/none/tgen-dram-ctrl: CHANGED!
* 
build/NULL_MOESI_hammer/tests/opt/quick/se/60.rubytest/null/none/rubytest-ruby-MOESI_hammer:
 CHANGED!
* 
build/NULL_MESI_Two_Level/tests/opt/quick/se/60.rubytest/null/none/rubytest-ruby-MESI_Two_Level:
 CHANGED!
* 
build/NULL_MOESI_CMP_directory/tests/opt/quick/se/60.rubytest/null/none/rubytest-ruby-MOESI_CMP_directory:
 CHANGED!
* 
build/NULL_MOESI_CMP_token/tests/opt/quick/se/60.rubytest/null/none/rubytest-ruby-MOESI_CMP_token:
 CHANGED!
* build/POWER/tests/opt/quick/se/00.hello/power/linux/simple-atomic: 
CHANGED!
* build/POWER/tests/opt/quick/se/00.hello/power/linux/o3-timing: CHANGED!
* build/SPARC/tests/opt/quick/se/00.hello/sparc/linux/simple-atomic: 
CHANGED!
* 
build/SPARC/tests/opt/quick/se/03.learning-gem5/sparc/linux/learning-gem5-p1-two-level:
 CHANGED!
* 
build/SPARC/tests/opt/quick/se/03.learning-gem5/sparc/linux/learning-gem5-p1-simple:
 CHANGED!
* 
build/SPARC/tests/opt/quick/se/40.m5threads-test-atomic/sparc/linux/simple-atomic-mp:
 CHANGED!
* build/SPARC/tests/opt/quick/se/00.hello/sparc/linux/simple-timing: 
CHANGED!
* 
build/SPARC/tests/opt/quick/se/40.m5threads-test-atomic/sparc/linux/simple-timing-mp:
 CHANGED!
* build/SPARC/tests/opt/quick/se/02.insttest/sparc/linux/simple-atomic: 
CHANGED!
* build/SPARC/tests/opt/quick/se/02.insttest/sparc/linux/o3-timing: CHANGED!
* build/SPARC/tests/opt/quick/se/02.insttest/sparc/linux/simple-timing: 
CHANGED!
* build/SPARC/tests/opt/quick/se/00.hello/sparc/linux/simple-timing-ruby: 
CHANGED!
* 
build/SPARC/tests/opt/quick/se/40.m5threads-test-atomic/sparc/linux/o3-timing-mp:
 CHANGED!
* build/SPARC/tests/opt/quick/se/50.vortex/sparc/linux/simple-atomic: 
CHANGED!
* build/SPARC/tests/opt/quick/se/70.twolf/sparc/linux/simple-atomic: 
CHANGED!
* build/SPARC/tests/opt/quick/se/10.mcf/sparc/linux/simple-atomic: CHANGED!
* build/SPARC/tests/opt/quick/se/50.vortex/sparc/linux/simple-timing: 
CHANGED!
* build/SPARC/tests/opt/quick/se/70.twolf/sparc/linux/simple-timing: 
CHANGED!
* build/X86/tests/opt/quick/se/00.hello/x86/linux/o3-timing: CHANGED!

[gem5-dev] Change in gem5/gem5[master]: dev: Turn EtherObject into an interface class.

2019-03-14 Thread Gabe Black (Gerrit)
Hello Jason Lowe-Power, Nikos Nikoleris, Gabor Dozsa, Weiping Liao, Giacomo  
Travaglini,


I'd like you to reexamine a change. Please visit

https://gem5-review.googlesource.com/c/public/gem5/+/17028

to look at the new patch set (#3).

Change subject: dev: Turn EtherObject into an interface class.
..

dev: Turn EtherObject into an interface class.

This class used to drive from SimObject so that it could be derived
from to get both the interface and SimObject while still using single
inheritance.

With this change, EtherObject is now just an interface class with only
one pure virtual function which can be inherited alongside SimObject.
This makes it more flexible so that it can be used in places where you
might want a different inheritance hierarchy, for instance to inherit
from MemObject.

Change-Id: I0f07664d104eed012cf4ce6e30c416ada19505a7
---
M src/dev/net/Ethernet.py
M src/dev/net/SConscript
M src/dev/net/dist_etherlink.cc
M src/dev/net/dist_etherlink.hh
M src/dev/net/etherbus.cc
M src/dev/net/etherbus.hh
M src/dev/net/etherlink.cc
M src/dev/net/etherlink.hh
M src/dev/net/etherobject.hh
M src/dev/net/etherswitch.cc
M src/dev/net/etherswitch.hh
M src/dev/net/ethertap.cc
M src/dev/net/ethertap.hh
A src/dev/net/python.cc
14 files changed, 79 insertions(+), 42 deletions(-)


--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/17028
To unsubscribe, or for help writing mail filters, visit  
https://gem5-review.googlesource.com/settings


Gerrit-Project: public/gem5
Gerrit-Branch: master
Gerrit-Change-Id: I0f07664d104eed012cf4ce6e30c416ada19505a7
Gerrit-Change-Number: 17028
Gerrit-PatchSet: 3
Gerrit-Owner: Gabe Black 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Gabor Dozsa 
Gerrit-Reviewer: Giacomo Travaglini 
Gerrit-Reviewer: Jason Lowe-Power 
Gerrit-Reviewer: Nikos Nikoleris 
Gerrit-Reviewer: Weiping Liao 
Gerrit-CC: Andreas Sandberg 
Gerrit-MessageType: newpatchset
___
gem5-dev mailing list
gem5-dev@gem5.org
http://m5sim.org/mailman/listinfo/gem5-dev

[gem5-dev] Change in gem5/gem5[master]: mem: Move the Port base class into sim.

2019-03-14 Thread Gabe Black (Gerrit)

Hello Jason Lowe-Power, Nikos Nikoleris, Weiping Liao, Andreas Sandberg,

I'd like you to reexamine a change. Please visit

https://gem5-review.googlesource.com/c/public/gem5/+/17036

to look at the new patch set (#3).

Change subject: mem: Move the Port base class into sim.
..

mem: Move the Port base class into sim.

The Port class is going to be officially used for more than just memory
system connections.

Change-Id: I493e721f99051865c5f0c06946a2303ff723c2af
---
M src/mem/port.cc
M src/mem/port.hh
M src/sim/SConscript
A src/sim/port.cc
A src/sim/port.hh
5 files changed, 154 insertions(+), 53 deletions(-)


--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/17036
To unsubscribe, or for help writing mail filters, visit  
https://gem5-review.googlesource.com/settings


Gerrit-Project: public/gem5
Gerrit-Branch: master
Gerrit-Change-Id: I493e721f99051865c5f0c06946a2303ff723c2af
Gerrit-Change-Number: 17036
Gerrit-PatchSet: 3
Gerrit-Owner: Gabe Black 
Gerrit-Reviewer: Andreas Sandberg 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Jason Lowe-Power 
Gerrit-Reviewer: Nikos Nikoleris 
Gerrit-Reviewer: Weiping Liao 
Gerrit-MessageType: newpatchset
___
gem5-dev mailing list
gem5-dev@gem5.org
http://m5sim.org/mailman/listinfo/gem5-dev

[gem5-dev] Change in gem5/gem5[master]: python: Change || to && for MessageBuffers in connectPorts.

2019-03-14 Thread Gabe Black (Gerrit)

Hello Jason Lowe-Power, Nikos Nikoleris, Weiping Liao,

I'd like you to reexamine a change. Please visit

https://gem5-review.googlesource.com/c/public/gem5/+/17031

to look at the new patch set (#3).

Change subject: python: Change || to && for MessageBuffers in connectPorts.
..

python: Change || to && for MessageBuffers in connectPorts.

The connectPorts function currently checks if *either* of the peers in
a port connection are a MessageBuffer, and if so will ignore the
connection. This CL changes that || into a && so that *both* of the
peers need to be a Ruby types (either a MessageBuffer or Network) for
the connection to be ignored. That makes it easier to contain that
abnormal behavior to those types instead of having it apply even when
other types of port owners are involved.

Unfortunately the number of interesting Ruby types is unbounded, but
these are the types with ports as of today. This mechanism will
hopefully be replacedall together so this should be a temporary issue.

Change-Id: I140498770e5d37eb2abd3d99261d47e111f1c8ab
---
M src/python/pybind11/pyobject.cc
1 file changed, 6 insertions(+), 1 deletion(-)


--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/17031
To unsubscribe, or for help writing mail filters, visit  
https://gem5-review.googlesource.com/settings


Gerrit-Project: public/gem5
Gerrit-Branch: master
Gerrit-Change-Id: I140498770e5d37eb2abd3d99261d47e111f1c8ab
Gerrit-Change-Number: 17031
Gerrit-PatchSet: 3
Gerrit-Owner: Gabe Black 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Jason Lowe-Power 
Gerrit-Reviewer: Nikos Nikoleris 
Gerrit-Reviewer: Weiping Liao 
Gerrit-CC: Andreas Sandberg 
Gerrit-MessageType: newpatchset
___
gem5-dev mailing list
gem5-dev@gem5.org
http://m5sim.org/mailman/listinfo/gem5-dev

[gem5-dev] Change in gem5/gem5[master]: mem: Track the MemObject owner in MasterPort and SlavePort.

2019-03-14 Thread Gabe Black (Gerrit)

Hello Anthony Gutierrez, Jason Lowe-Power, Nikos Nikoleris, Weiping Liao,

I'd like you to reexamine a change. Please visit

https://gem5-review.googlesource.com/c/public/gem5/+/17032

to look at the new patch set (#3).

Change subject: mem: Track the MemObject owner in MasterPort and SlavePort.
..

mem: Track the MemObject owner in MasterPort and SlavePort.

These types are much more tied to MemObjects and the gem5 memory
protocol than the Port or BaseMasterPort and BaseSlavePort classes.

Change-Id: I36bc8c75b9c74d28ee8b65dbcbf742cd41135742
---
M src/mem/port.cc
M src/mem/port.hh
2 files changed, 25 insertions(+), 25 deletions(-)


--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/17032
To unsubscribe, or for help writing mail filters, visit  
https://gem5-review.googlesource.com/settings


Gerrit-Project: public/gem5
Gerrit-Branch: master
Gerrit-Change-Id: I36bc8c75b9c74d28ee8b65dbcbf742cd41135742
Gerrit-Change-Number: 17032
Gerrit-PatchSet: 3
Gerrit-Owner: Gabe Black 
Gerrit-Assignee: Nikos Nikoleris 
Gerrit-Reviewer: Anthony Gutierrez 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Jason Lowe-Power 
Gerrit-Reviewer: Nikos Nikoleris 
Gerrit-Reviewer: Weiping Liao 
Gerrit-CC: Andreas Sandberg 
Gerrit-MessageType: newpatchset
___
gem5-dev mailing list
gem5-dev@gem5.org
http://m5sim.org/mailman/listinfo/gem5-dev

[gem5-dev] Change in gem5/gem5[master]: sim: Add a getPort function to SimObject.

2019-03-14 Thread Gabe Black (Gerrit)

Hello Jason Lowe-Power, Nikos Nikoleris, Weiping Liao,

I'd like you to reexamine a change. Please visit

https://gem5-review.googlesource.com/c/public/gem5/+/17037

to look at the new patch set (#3).

Change subject: sim: Add a getPort function to SimObject.
..

sim: Add a getPort function to SimObject.

This will retrieve a Port object from a given SimObject (which might
not be a MemObject) no matter what flavor of Port it is.

Change-Id: I636b85e9d4929a05a769e165849106bcb5f3e9c1
---
M src/python/m5/SimObject.py
M src/sim/sim_object.cc
M src/sim/sim_object.hh
3 files changed, 23 insertions(+), 0 deletions(-)


--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/17037
To unsubscribe, or for help writing mail filters, visit  
https://gem5-review.googlesource.com/settings


Gerrit-Project: public/gem5
Gerrit-Branch: master
Gerrit-Change-Id: I636b85e9d4929a05a769e165849106bcb5f3e9c1
Gerrit-Change-Number: 17037
Gerrit-PatchSet: 3
Gerrit-Owner: Gabe Black 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Jason Lowe-Power 
Gerrit-Reviewer: Nikos Nikoleris 
Gerrit-Reviewer: Weiping Liao 
Gerrit-MessageType: newpatchset
___
gem5-dev mailing list
gem5-dev@gem5.org
http://m5sim.org/mailman/listinfo/gem5-dev

[gem5-dev] Change in gem5/gem5[master]: mem: Move bind() and unbind() into the Port class.

2019-03-14 Thread Gabe Black (Gerrit)

Hello Jason Lowe-Power, Nikos Nikoleris, Weiping Liao,

I'd like you to reexamine a change. Please visit

https://gem5-review.googlesource.com/c/public/gem5/+/17038

to look at the new patch set (#3).

Change subject: mem: Move bind() and unbind() into the Port class.
..

mem: Move bind() and unbind() into the Port class.

These are now pure virtual methods which more specialized port
subclasses will need to implement. The SlavePort class implements them
by ignoring them and then providing parallel functions for the
MasterPort to call. The MasterPort's methods do basically what they
did before, except now bind() uses dynamic cast to check if its peer
is of the appropriate type and also to convert it into that type before
connecting to it.

Change-Id: I0948799bc954acaebf371e6b6612cee1d3023bc4
---
M src/dev/net/etherint.cc
M src/dev/net/etherint.hh
M src/mem/port.cc
M src/mem/port.hh
M src/sim/port.cc
M src/sim/port.hh
6 files changed, 61 insertions(+), 29 deletions(-)


--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/17038
To unsubscribe, or for help writing mail filters, visit  
https://gem5-review.googlesource.com/settings


Gerrit-Project: public/gem5
Gerrit-Branch: master
Gerrit-Change-Id: I0948799bc954acaebf371e6b6612cee1d3023bc4
Gerrit-Change-Number: 17038
Gerrit-PatchSet: 3
Gerrit-Owner: Gabe Black 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Jason Lowe-Power 
Gerrit-Reviewer: Nikos Nikoleris 
Gerrit-Reviewer: Weiping Liao 
Gerrit-CC: Andreas Sandberg 
Gerrit-MessageType: newpatchset
___
gem5-dev mailing list
gem5-dev@gem5.org
http://m5sim.org/mailman/listinfo/gem5-dev

[gem5-dev] Change in gem5/gem5[master]: arch, cpu, dev, gpu, mem, sim, python: start using getPort.

2019-03-14 Thread Gabe Black (Gerrit)

Hello Jason Lowe-Power, Nikos Nikoleris, Weiping Liao,

I'd like you to reexamine a change. Please visit

https://gem5-review.googlesource.com/c/public/gem5/+/17040

to look at the new patch set (#3).

Change subject: arch, cpu, dev, gpu, mem, sim, python: start using getPort.
..

arch, cpu, dev, gpu, mem, sim, python: start using getPort.

Replace the getMasterPort, getSlavePort, and getEthPort functions
with getPort, and remove extraneous mechanisms that are no longer
necessary.

Change-Id: Iab7e3c02d2f3a0cf33e7e824e18c28646b5bc318
---
M src/arch/arm/table_walker.cc
M src/arch/arm/table_walker.hh
M src/arch/arm/tlb.cc
M src/arch/arm/tlb.hh
M src/arch/generic/tlb.hh
M src/arch/x86/interrupts.hh
M src/arch/x86/pagetable_walker.cc
M src/arch/x86/pagetable_walker.hh
M src/arch/x86/tlb.cc
M src/arch/x86/tlb.hh
M src/cpu/base.cc
M src/cpu/base.hh
M src/cpu/testers/directedtest/RubyDirectedTester.cc
M src/cpu/testers/directedtest/RubyDirectedTester.hh
M src/cpu/testers/garnet_synthetic_traffic/GarnetSyntheticTraffic.cc
M src/cpu/testers/garnet_synthetic_traffic/GarnetSyntheticTraffic.hh
M src/cpu/testers/memtest/memtest.cc
M src/cpu/testers/memtest/memtest.hh
M src/cpu/testers/rubytest/RubyTester.cc
M src/cpu/testers/rubytest/RubyTester.hh
M src/cpu/testers/traffic_gen/base.cc
M src/cpu/testers/traffic_gen/base.hh
M src/cpu/trace/trace_cpu.cc
M src/dev/dma_device.cc
M src/dev/dma_device.hh
M src/dev/io_device.cc
M src/dev/io_device.hh
M src/dev/net/Ethernet.py
M src/dev/net/SConscript
M src/dev/net/dist_etherlink.cc
M src/dev/net/dist_etherlink.hh
M src/dev/net/etherbus.cc
M src/dev/net/etherbus.hh
M src/dev/net/etherdevice.hh
M src/dev/net/etherlink.cc
M src/dev/net/etherlink.hh
M src/dev/net/etherswitch.cc
M src/dev/net/etherswitch.hh
M src/dev/net/ethertap.cc
M src/dev/net/ethertap.hh
M src/dev/net/i8254xGBe.cc
M src/dev/net/i8254xGBe.hh
M src/dev/net/ns_gige.cc
M src/dev/net/ns_gige.hh
M src/dev/net/sinic.cc
M src/dev/net/sinic.hh
M src/dev/pci/copy_engine.cc
M src/dev/pci/copy_engine.hh
M src/dev/x86/i82094aa.cc
M src/dev/x86/i82094aa.hh
M src/gpu-compute/compute_unit.hh
M src/gpu-compute/dispatcher.cc
M src/gpu-compute/dispatcher.hh
M src/gpu-compute/gpu_tlb.cc
M src/gpu-compute/gpu_tlb.hh
M src/gpu-compute/lds_state.hh
M src/gpu-compute/tlb_coalescer.cc
M src/gpu-compute/tlb_coalescer.hh
M src/learning_gem5/part2/simple_cache.cc
M src/learning_gem5/part2/simple_cache.hh
M src/learning_gem5/part2/simple_memobj.cc
M src/learning_gem5/part2/simple_memobj.hh
M src/mem/addr_mapper.cc
M src/mem/addr_mapper.hh
M src/mem/bridge.cc
M src/mem/bridge.hh
M src/mem/cache/base.cc
M src/mem/cache/base.hh
M src/mem/comm_monitor.cc
M src/mem/comm_monitor.hh
M src/mem/dram_ctrl.cc
M src/mem/dram_ctrl.hh
M src/mem/dramsim2.cc
M src/mem/dramsim2.hh
M src/mem/external_master.cc
M src/mem/external_master.hh
M src/mem/external_slave.cc
M src/mem/external_slave.hh
M src/mem/mem_checker_monitor.cc
M src/mem/mem_checker_monitor.hh
M src/mem/mem_delay.cc
M src/mem/mem_delay.hh
M src/mem/mem_object.cc
M src/mem/mem_object.hh
M src/mem/qos/mem_sink.cc
M src/mem/qos/mem_sink.hh
M src/mem/ruby/network/MessageBuffer.hh
M src/mem/ruby/network/Network.hh
R src/mem/ruby/network/dummy_port.hh
M src/mem/ruby/slicc_interface/AbstractController.cc
M src/mem/ruby/slicc_interface/AbstractController.hh
M src/mem/ruby/system/RubyPort.cc
M src/mem/ruby/system/RubyPort.hh
M src/mem/serial_link.cc
M src/mem/serial_link.hh
M src/mem/simple_mem.cc
M src/mem/simple_mem.hh
M src/mem/xbar.cc
M src/mem/xbar.hh
M src/python/SConscript
M src/python/pybind11/pybind.hh
D src/python/pybind11/pyobject.cc
M src/sim/SConscript
M src/sim/cxx_manager.cc
M src/sim/init.cc
R src/sim/python.cc
M src/sim/system.cc
M src/sim/system.hh
108 files changed, 394 insertions(+), 750 deletions(-)


--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/17040
To unsubscribe, or for help writing mail filters, visit  
https://gem5-review.googlesource.com/settings


Gerrit-Project: public/gem5
Gerrit-Branch: master
Gerrit-Change-Id: Iab7e3c02d2f3a0cf33e7e824e18c28646b5bc318
Gerrit-Change-Number: 17040
Gerrit-PatchSet: 3
Gerrit-Owner: Gabe Black 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Jason Lowe-Power 
Gerrit-Reviewer: Nikos Nikoleris 
Gerrit-Reviewer: Weiping Liao 
Gerrit-CC: Andreas Sandberg 
Gerrit-MessageType: newpatchset
___
gem5-dev mailing list
gem5-dev@gem5.org
http://m5sim.org/mailman/listinfo/gem5-dev

[gem5-dev] Change in gem5/gem5[master]: python: Improve how templated SimObject classes are handled.

2019-03-14 Thread Gabe Black (Gerrit)

Hello Jason Lowe-Power, Andreas Sandberg,

I'd like you to reexamine a change. Please visit

https://gem5-review.googlesource.com/c/public/gem5/+/17228

to look at the new patch set (#2).

Change subject: python: Improve how templated SimObject classes are handled.
..

python: Improve how templated SimObject classes are handled.

When setting up a SimObject's Param structure, gem5 will autogenerate
a header file which attempts to declare the SimObject's C++ type. It
has had at least some level of sophistication there where it would
pull off the namespaces ahead of the class name and handle them
properly, but it didn't know how to handle templates.

This change improves that handling in two ways. First, it adds a new
magical SimObject attribute called 'cxx_template_params' which is used
to specify what the template parameters are as a list. For instance, if
your SimObject was a template which took an integer constant as its
first parameter and a type as its second, this attribute could look
like the following:

cxx_template_params = [ 'int FOO', 'class Bar' ]

Importantly, if there are any default values for these template
parameters, they should *not* be included here, they should be
specified where the class is later defined.

The second new mechanism is to add an internal CxxClass in the
SimObject.cxx_param_decl method. This class accepts the class signature
in the cxx_class attribute and the cxx_template_params and does two
things. First, it strips off namespaces like in the old implementation.
Second, it extracts and processes any template arguments attached to
the class. If these are constants (as determined by the contents of
cxx_template_params), then they are stored verbatim. If they're types,
then they're recursively expanded into a CxxClass and stored that way.
Note that these are the *values* of the template arguments, where as
cxx_template_params lists the *types* and *names* of those arguments.
In our earlier example, if cxx_class was:

cxx_class = 'CoolClasses::ClassName<12, Fruit::Apple>'

Then CxxClass would extract the namespace 'CoolClasses', the class
name 'ClassName', the argument '12', and the argument 'Fruit::Apple'.
That second argument would be expanded into a CxxClass with the
namespace 'Fruit' and the class name 'Apple'.

Importantly here, because there were no default arguments given in
cxx_template_params, all "hidden" arguments which would fall through
to their defaults need to be fully specified in cxx_class.

The CxxClass has a method called declare() which uses the information
extracted earlier to output all of the "stuff" necessary for declaring
the given class, including opening any containing namespaces and
putting template<...> ahead of the actual class declaration with the
template parameters specified.

If any of the template arguments are themselves CxxClass instances,
then they'll be recursively declared immediately before the current
class is.

An alternative solution to this problem might be to include the header
file which actually defines the cxx_class type to avoid having to
come up with a declaration. Unfortunately this doesn't work since it
can set up include loops where the SimObject C++ header file includes
the param header to get access to the Param type, but that includes
the C++ header to get access to the SimObject type.

This also makes it harder for SimObjects to refer to each other, since
they rely on the declaration in the params header files when declaring
a member pointer to that type in their own Param structures.

Change-Id: I68cfc36ddff6d789eb4cdef5178c4619ac2cc8b1
---
M src/python/m5/SimObject.py
1 file changed, 80 insertions(+), 7 deletions(-)


--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/17228
To unsubscribe, or for help writing mail filters, visit  
https://gem5-review.googlesource.com/settings


Gerrit-Project: public/gem5
Gerrit-Branch: master
Gerrit-Change-Id: I68cfc36ddff6d789eb4cdef5178c4619ac2cc8b1
Gerrit-Change-Number: 17228
Gerrit-PatchSet: 2
Gerrit-Owner: Gabe Black 
Gerrit-Reviewer: Andreas Sandberg 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Jason Lowe-Power 
Gerrit-MessageType: newpatchset
___
gem5-dev mailing list
gem5-dev@gem5.org
http://m5sim.org/mailman/listinfo/gem5-dev

Re: [gem5-dev] ToT build failures for ARM

2019-03-14 Thread Gabe Black
Great, thanks for the quick fix!

Gabe

On Thu, Mar 14, 2019 at 12:33 PM Giacomo Travaglini <
giacomo.travagl...@arm.com> wrote:

> Hi Gabe,
>
> thanks for pointing that out.
> We have addressed the issues with the following patches:
>
> https://gem5-review.googlesource.com/c/public/gem5/+/17288/1
> https://gem5-review.googlesource.com/c/public/gem5/+/17289/1
>
> Thanks
>
> Giacomo
> --
> *From:* gem5-dev  on behalf of Gabe Black <
> gabebl...@google.com>
> *Sent:* 14 March 2019 13:10
> *To:* gem5 Developer List
> *Subject:* [gem5-dev] ToT build failures for ARM
>
> These look like issues exposed by compiler version and that (if that's what
> they are) have known fixes. They should be easy to fix, but I'm going to
> bed. If they haven't been fixed in the near future I'll send some patches.
>
> Representative compiler errors below.
>
> Gabe
>
>
> In file included from
> build/ARM/arch/arm/generated/generic_cpu_exec_6.cc:10:0:
> build/ARM/arch/arm/generated/exec-ns.cc.inc: In member function 'Fault
> ArmISAInst::SvePredBic<_Element>::execute(ExecContext*, Trace::InstRecord*)
> const':
> build/ARM/arch/arm/generated/exec-ns.cc.inc:220568:40: error: '~' on an
> expression of type bool [-Werror=bool-operation]
> destElem = srcElem1 & ~srcElem2;
>^~~~
> build/ARM/arch/arm/generated/exec-ns.cc.inc:220568:40: note: did you mean
> to use logical not ('!')?
> build/ARM/arch/arm/generated/exec-ns.cc.inc: In member function 'Fault
> ArmISAInst::SvePredBics<_Element>::execute(ExecContext*,
> Trace::InstRecord*) const':
> build/ARM/arch/arm/generated/exec-ns.cc.inc:220634:40: error: '~' on an
> expression of type bool [-Werror=bool-operation]
> destElem = srcElem1 & ~srcElem2;
>^~~~
>
> In file included from build/ARM/arch/arm/generated/inst-constrs-3.cc:9:0:
> build/ARM/arch/arm/generated/decoder-ns.cc.inc: In function 'StaticInstPtr
> ArmISAInst::Aarch64::decodeSveInt(ArmISA::ExtMachInst)':
> build/ARM/arch/arm/generated/decoder-ns.cc.inc:73599:17: error: this
> statement may fall through [-Werror=implicit-fallthrough=]
> }
> ^
> build/ARM/arch/arm/generated/decoder-ns.cc.inc:73601:11: note: here
>   case 0x1:
>   ^~~~
> build/ARM/arch/arm/generated/decoder-ns.cc.inc:73637:17: error: this
> statement may fall through [-Werror=implicit-fallthrough=]
> }
> ^
> build/ARM/arch/arm/generated/decoder-ns.cc.inc:73639:11: note: here
>   case 0x2:
>   ^~~~
> ___
> gem5-dev mailing list
> gem5-dev@gem5.org
> http://m5sim.org/mailman/listinfo/gem5-dev
> IMPORTANT NOTICE: The contents of this email and any attachments are
> confidential and may also be privileged. If you are not the intended
> recipient, please notify the sender immediately and do not disclose the
> contents to any other person, use it for any purpose, or store or copy the
> information in any medium. Thank you.
>
___
gem5-dev mailing list
gem5-dev@gem5.org
http://m5sim.org/mailman/listinfo/gem5-dev

Re: [gem5-dev] Port configuration overhaul

2019-03-14 Thread Gabe Black
Definitely. This makes ports a lot more abstract, where they just represent
a potential association between two objects. The nature and function of
that association is up to either side of the connection, as implement in
their Port subclasses. That *could* be the traditional MemObject style of
connection, but it could also be for Ethernet connections, Ruby
connections, or TLM socket connections as implemented in these CLs, or
interrupt source/sink, etc.

That's not to say, of course, that it's always a preferrable substitute for
setting objects as parameters in other objects. I haven't thought about it
super deeply, but I think setting SimObjects as parameter values in other
SimObjects reflects an ownership relationship, where a Port connection is
more of a peer relationship and reflects an actual structural element of
the simulation.

Gabe

On Thu, Mar 14, 2019 at 6:48 AM Jason Lowe-Power 
wrote:

> Hey Gabe,
>
> I'll need to think about this a bit more myself, but do you think these
> changes will increase the places we can use ports? Like Andreas was saying,
> it would be nice to use it for things like interrupt routing, connecting
> TLBs, and connecting all of the wavefronts in the GPU to the coalescer,
> etc. These are a few places that I can think of trying to use ports where
> it wasn't a great semantic before.
>
> Cheers,
> Jason
>
> On Thu, Mar 14, 2019 at 6:12 AM Gabe Black  wrote:
>
> > Great, I'm glad you're in favor of this. I have a new, hopefully more
> final
> > batch of patches incoming soon which also include application of the new
> > mechanism to TLM sockets.
> >
> > Gabe
> >
> > On Thu, Mar 14, 2019 at 2:47 AM Andreas Sandberg <
> andreas.sandb...@arm.com
> > >
> > wrote:
> >
> > > Hi Everyone,
> > >
> > > I remember talking to Andreas H about this many years ago. If I
> remember
> > > correctly, the main reason the patch wasn't committed at the time was
> > > performance related. IIRC, the patch series had a ~10%-20% performance
> > > hit. I suspect it the patch Jason pointed to isn't the main reason for
> > > any performance issues though, it's more likely one of the subsequent
> > > patches that added TLM-like 4-phase handshakes.
> > >
> > > I'm very much in favour of sorting out the ports vs protocol issue once
> > > and for all. A generic port interface would be extremely useful for
> > > interrupt routing which is currently very ad-hoc.
> > >
> > > Cheers,
> > > Andreas
> > >
> > > On 07/03/2019 19:42, Steve Reinhardt wrote:
> > > > Thanks for digging this up, Jason.  I knew this issue had been
> > addressed
> > > > multiple times before (I think I even had a patch at one point that
> > was a
> > > > smaller change, but held it off in favor of Andreas's version).  I
> > don't
> > > > know why Andreas's change was never committed either.
> > > >
> > > > Anyway, it will be good to see this cleaned up, regardless of whether
> > we
> > > go
> > > > with Andreas's code or Gabe's proposal or some hybrid.  I've been out
> > of
> > > > the loop long enough that I don't have a specific preference.
> > > >
> > > > Steve
> > > >
> > > >
> > > > On Thu, Mar 7, 2019 at 10:19 AM Jason Lowe-Power <
> ja...@lowepower.com>
> > > > wrote:
> > > >
> > > >> Hey Gabe,
> > > >>
> > > >> I was digging through the old reviewboard and found this patch that
> > also
> > > >> re-did this interface: http://reviews.gem5.org/r/1301
> > > >>
> > > >> I'm not sure why this was never committed.
> > > >>
> > > >> I believe Andreas H's goal was to enable TLM-2 interfaces with the
> > gem5,
> > > >> IIRC.
> > > >>
> > > >> Just something to consider.
> > > >>
> > > >> Cheers,
> > > >> Jason
> > > >>
> > > >> On Thu, Mar 7, 2019 at 7:00 AM Gabe Black 
> > wrote:
> > > >>
> > > >>> Hey folks, specifically folks looking at this doc. I have a series
> of
> > > >>> patches which largely implement what I was going for, although it
> > > turned
> > > >>> out differently than what I have in my doc. I'll update the doc
> > > soon(ish)
> > > >>> to describe the current version. Go ahead and review the CLs if you
> > > want,
> > > >>> although I should probably run another test or two on them and the
> > > >>> discussion of the design is still open over on the doc.
> > > >>>
> > > >>>
> > > >>>
> > > >>
> > >
> >
> https://gem5-review.googlesource.com/q/topic:%22tlm%22+(status:open%20OR%20status:merged)
> > > >>> Gabe
> > > >>>
> > > >>> On Wed, Mar 6, 2019 at 12:20 AM Gabe Black 
> > > wrote:
> > > >>>
> > >  Hi folks. I've been looking at how to configure TLM sockets
> through
> > > >>> gem5's
> > >  port configuration mechanism and how gem5's port configuration
> > > >> mechanism
> > >  works in general, and I think I've mostly come up with a plan.
> I've
> > > >>> written
> > >  everything up in a doc over here:
> > > 
> > > 
> > > 
> > > >>
> > >
> >
> https://docs.google.com/document/d/17eXkE9YtzvYXEgkHFNR1my_xYKl3mYNNtXM9pIAX-t0/edit?usp=sharing
> > >  Please take a look if you have a ch

Re: [gem5-dev] Adding a systemc TLM DMI like mechanism to gem5

2019-03-14 Thread Gabe Black
I think gem5 would benefit from it for the same reason SystemC simulations
do, namely speeding up simulations when doing fast forwarding (perhaps with
a binary translating CPU... hypothetically...). It would also be very nice
to enable software development for not-yet-existing hardware that has gem5
models available. Then gem5 users could do both software development and
performance evaluation in parallel and only have to build models once. This
is very nice when large bodies of software need to be written to support a
bit of hardware, for instance if they have large complex drivers, need
application level support, etc. It would also be great not to have to wait
for hours for android to boot to get to the interesting part of a
simulation or when debugging at a guest software level.

Gabe

On Thu, Mar 14, 2019 at 6:41 AM Dr. Matthias Jung 
wrote:

> Hi Gabe,
>
> one of the main reasons for DMI is to speedup simulations, similar to the
> temporal decoupling in TLM LT or debug transport in order to make the
> boot-loading. AFAIK DMI is mainly used in virtual platforms that target
> software development and not hardware architecture design space
> explorations, because you skip interconnects, caches etc. In commercial
> tools you can just switch on or switch off DMI and therefore you can have a
> nice trade-off between speed and accuracy by using the same models.
>
> Since gem5 is mainly there for computer-system architecture research, I’m
> not sure if the DMI feature is really required. From a TLM2 perspective,
> even if a TLM target model included in gem5 offers DMI, the gem5 core model
> (initiator) does not have to use it, right? Do you have any concrete use
> case where you could exploit DMI?
>
> For KVM: maybe somebody with KVM experience should comment that.
>
> Best regards,
> Matthias
>
> > Am 28.02.2019 um 06:13 schrieb Gabe Black :
> >
> > Hi folks. TLM is a communication protocol/mechanism built on top of
> > systemc. It supports a mechanism called DMI which stands for direct
> memory
> > interface. The idea is that an entity sending a request into the system
> can
> > ask if the target can give it a pointer it can use to directly access
> that
> > memory in the future. The target, if it supports that sort of thing,
> > returns a descriptor which describes a region of memory that can be
> > accessed in that way. If that needs to be invalidated in the future, then
> > there's another mechanism the target can use to communicate back to the
> > sender telling it to throw away that descriptor.
> >
> > The way this mechanism is implemented in TLM is a bit less than ideal
> since
> > every request has a field that says whether the requester wants to know
> > about DMI, and so the target has to perform an extra check on all the
> > requests in case someone is asking when that's useful to communicate
> only a
> > very small fraction of the time, perhaps only once during an entire
> > simulation.
> >
> > Aside from that though, this mechanism has some nice properties. First,
> it
> > avoids having to globally identify what a memory is or where it is for a
> > particular simulation. A memory is just a thing on the other end of a
> > request that may let you get at it directly if you ask nicely. Also, if
> > there's something in the way that would get messed up if you skipped over
> > it, say a cache, it can block those requests from getting through to
> > targets. This could be useful for KVM for instance, when it's collecting
> > regions to act as RAM for the virtual machine.
> >
> > I haven't fully figured out what a good way to avoid the check-every-time
> > problem of the systemc mechanism, and ideally whatever I/we come up with
> > will be compatible enough to be bridged effectively, but I'm thinking
> some
> > sort of explicit additional call like getAddrRanges which would propogate
> > through the hierarchy at specific points, either to a specific address or
> > as a broadcast.
> >
> > I know some folks have looked at gem5's memory system protocol and
> > systemc's TLM before, for instance either to try making gem5 use TLM
> > natively, or for the systemc TLM bridges. What do you think about adding
> > this sort of mechainsm to gem5? Are there any pitfalls to avoid, known
> > issues to figure out, suggested avenues to explore, etc? Please let me
> > know. This is likely something I'm going to want to pursue in the next
> few
> > weeks.
> >
> > Gabe
> > ___
> > gem5-dev mailing list
> > gem5-dev@gem5.org
> > http://m5sim.org/mailman/listinfo/gem5-dev
>
> ___
> gem5-dev mailing list
> gem5-dev@gem5.org
> http://m5sim.org/mailman/listinfo/gem5-dev
___
gem5-dev mailing list
gem5-dev@gem5.org
http://m5sim.org/mailman/listinfo/gem5-dev

[gem5-dev] Change in gem5/gem5[master]: arch-arm: Correct cast of template parameter

2019-03-14 Thread Andrea Mondelli (Gerrit)
Andrea Mondelli has uploaded a new patch set (#2). (  
https://gem5-review.googlesource.com/c/public/gem5/+/17308 )


Change subject: arch-arm: Correct cast of template parameter
..

arch-arm: Correct cast of template parameter

Clang with -Wconstant-conversion is _very_ restrictive on casting.
The shift operator results in an incorrect promotion.

This patch add a compile-time static cast that remove the error
when clang is used.

Change-Id: I3aa1e77da2565799feadc32317d5faa111b2de86
---
M src/arch/arm/isa/insts/sve.isa
M src/base/bitfield.hh
2 files changed, 13 insertions(+), 5 deletions(-)


--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/17308
To unsubscribe, or for help writing mail filters, visit  
https://gem5-review.googlesource.com/settings


Gerrit-Project: public/gem5
Gerrit-Branch: master
Gerrit-Change-Id: I3aa1e77da2565799feadc32317d5faa111b2de86
Gerrit-Change-Number: 17308
Gerrit-PatchSet: 2
Gerrit-Owner: Andrea Mondelli 
Gerrit-MessageType: newpatchset
___
gem5-dev mailing list
gem5-dev@gem5.org
http://m5sim.org/mailman/listinfo/gem5-dev

[gem5-dev] Change in gem5/gem5[master]: arm: Correct cast of template parameter

2019-03-14 Thread Andrea Mondelli (Gerrit)
Andrea Mondelli has uploaded this change for review. (  
https://gem5-review.googlesource.com/c/public/gem5/+/17308



Change subject: arm: Correct cast of template parameter
..

arm: Correct cast of template parameter

Clang with -Wconstant-conversion is _very_ restrictive on casting.
The shift operator results in an incorrect promotion.

This patch add a compile-time static cast that remove the error
when clang is used.

Change-Id: I3aa1e77da2565799feadc32317d5faa111b2de86
---
M src/arch/arm/isa/insts/sve.isa
M src/base/bitfield.hh
2 files changed, 13 insertions(+), 5 deletions(-)



diff --git a/src/arch/arm/isa/insts/sve.isa b/src/arch/arm/isa/insts/sve.isa
index b1b946f..14395d8 100644
--- a/src/arch/arm/isa/insts/sve.isa
+++ b/src/arch/arm/isa/insts/sve.isa
@@ -4278,7 +4278,9 @@
 bool negSrc1 = (srcElem1 < 0);
 bool negSrc2 = (srcElem2 < 0);
 if ((negDest != negSrc1) && (negSrc1 == negSrc2)) {
-destElem = (Element)1 << (sizeof(Element) * 8 - 1);
+destElem = static_cast(
+static_cast(1) << (sizeof(Element) * 8 - 1)
+);
 if (negDest)
 destElem -= 1;
 }
@@ -4293,7 +4295,9 @@
 bool negSrc = (srcElem1 < 0);
 bool posCount = ((count * imm) >= 0);
 if ((negDest != negSrc) && (negSrc == posCount)) {
-destElem = (%(dstType)s)1 << (sizeof(%(dstType)s) * 8 - 1);
+destElem = static_cast<%(dstType)s>(
+(%(dstType)s)1 << (sizeof(%(dstType)s) * 8 - 1)
+);
 if (negDest)
 destElem -= 1;
 }
@@ -4350,7 +4354,9 @@
 bool negSrc = (srcElem1 < 0);
 bool negCount = ((count * imm) < 0);
 if ((negDest != negSrc) && (negSrc == negCount)) {
-destElem = (%(dstType)s)1 << (sizeof(%(dstType)s) * 8 - 1);
+destElem = static_cast<%(dstType)s>(
+(%(dstType)s)1 << (sizeof(%(dstType)s) * 8 - 1)
+);
 if (negDest)
 destElem -= 1;
 }
@@ -4407,7 +4413,9 @@
 bool negSrc1 = (srcElem1 < 0);
 bool posSrc2 = (srcElem2 >= 0);
 if ((negDest != negSrc1) && (negSrc1 == posSrc2)) {
-destElem = (Element)1 << (sizeof(Element) * 8 - 1);
+destElem = static_cast(
+static_cast(1) << (sizeof(Element) * 8 - 1)
+);
 if (negDest)
 destElem -= 1;
 }
diff --git a/src/base/bitfield.hh b/src/base/bitfield.hh
index d696715..ec1ffce 100644
--- a/src/base/bitfield.hh
+++ b/src/base/bitfield.hh
@@ -182,7 +182,7 @@
 assert(size <= sizeof(T));

 T output = 0;
-for (auto byte = 0; byte < size; byte++, val >>= 8) {
+for (auto byte = 0; byte < size; byte++, val = static_cast(val >>  
8)) {

 output = (output << 8) | reverseLookUpTable[val & 0xFF];
 }


--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/17308
To unsubscribe, or for help writing mail filters, visit  
https://gem5-review.googlesource.com/settings


Gerrit-Project: public/gem5
Gerrit-Branch: master
Gerrit-Change-Id: I3aa1e77da2565799feadc32317d5faa111b2de86
Gerrit-Change-Number: 17308
Gerrit-PatchSet: 1
Gerrit-Owner: Andrea Mondelli 
Gerrit-MessageType: newchange
___
gem5-dev mailing list
gem5-dev@gem5.org
http://m5sim.org/mailman/listinfo/gem5-dev

[gem5-dev] Change in gem5/gem5[master]: python: Teach cxxMethod how to set return_value_policy.

2019-03-14 Thread Gabe Black (Gerrit)
Gabe Black has submitted this change and it was merged. (  
https://gem5-review.googlesource.com/c/public/gem5/+/17034 )


Change subject: python: Teach cxxMethod how to set return_value_policy.
..

python: Teach cxxMethod how to set return_value_policy.

This is passed through to the underlying call to PyBindMethod.

Change-Id: Ib46c55664ba0707464bb84e137a0fad817aea1bb
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/17034
Reviewed-by: Andreas Sandberg 
Maintainer: Andreas Sandberg 
---
M src/python/m5/SimObject.py
1 file changed, 3 insertions(+), 1 deletion(-)

Approvals:
  Andreas Sandberg: Looks good to me, approved; Looks good to me, approved



diff --git a/src/python/m5/SimObject.py b/src/python/m5/SimObject.py
index 7f19c07..97f6847 100644
--- a/src/python/m5/SimObject.py
+++ b/src/python/m5/SimObject.py
@@ -882,6 +882,7 @@
 name = func.__name__
 override = kwargs.get("override", False)
 cxx_name = kwargs.get("cxx_name", name)
+return_value_policy = kwargs.get("return_value_policy", None)

 args, varargs, keywords, defaults = inspect.getargspec(func)
 if varargs or keywords:
@@ -906,7 +907,8 @@
 return func(self, *args, **kwargs)

 f = py_call if override else cxx_call
-f.__pybind = PyBindMethod(name, cxx_name=cxx_name, args=args)
+f.__pybind = PyBindMethod(name, cxx_name=cxx_name, args=args,
+  return_value_policy=return_value_policy)

 return f


--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/17034
To unsubscribe, or for help writing mail filters, visit  
https://gem5-review.googlesource.com/settings


Gerrit-Project: public/gem5
Gerrit-Branch: master
Gerrit-Change-Id: Ib46c55664ba0707464bb84e137a0fad817aea1bb
Gerrit-Change-Number: 17034
Gerrit-PatchSet: 4
Gerrit-Owner: Gabe Black 
Gerrit-Reviewer: Andreas Sandberg 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Jason Lowe-Power 
Gerrit-Reviewer: Nikos Nikoleris 
Gerrit-Reviewer: Weiping Liao 
Gerrit-MessageType: merged
___
gem5-dev mailing list
gem5-dev@gem5.org
http://m5sim.org/mailman/listinfo/gem5-dev

[gem5-dev] Change in gem5/gem5[master]: python: Teach PyBindMethod how to set return_value_policy.

2019-03-14 Thread Gabe Black (Gerrit)
Gabe Black has submitted this change and it was merged. (  
https://gem5-review.googlesource.com/c/public/gem5/+/17033 )


Change subject: python: Teach PyBindMethod how to set return_value_policy.
..

python: Teach PyBindMethod how to set return_value_policy.

Change-Id: Ia208e43672672556b36f905e8f71dce44b978d22
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/17033
Reviewed-by: Andreas Sandberg 
Maintainer: Andreas Sandberg 
---
M src/python/m5/util/pybind.py
1 file changed, 9 insertions(+), 6 deletions(-)

Approvals:
  Andreas Sandberg: Looks good to me, approved; Looks good to me, approved



diff --git a/src/python/m5/util/pybind.py b/src/python/m5/util/pybind.py
index 4b5e03d..4664c16 100644
--- a/src/python/m5/util/pybind.py
+++ b/src/python/m5/util/pybind.py
@@ -58,10 +58,12 @@
 code('.${export}("${{self.name}}", &${cname}::${{self.cxx_name}})')

 class PyBindMethod(PyBindExport):
-def __init__(self, name, cxx_name=None, args=None):
+def __init__(self, name, cxx_name=None, args=None,
+ return_value_policy=None):
 self.name = name
 self.cxx_name = cxx_name if cxx_name else name
 self.args = args
+self.return_value_policy = return_value_policy

 def _conv_arg(self, value):
 if isinstance(value, bool):
@@ -72,6 +74,10 @@
 raise TypeError("Unsupported PyBind default value type")

 def export(self, code, cname):
+arguments = [ '"${{self.name}}"', '&${cname}::${{self.cxx_name}}' ]
+if self.return_value_policy:
+arguments.append('pybind11::return_value_policy::'
+ '${{self.return_value_policy}}')
 if self.args:
 def get_arg_decl(arg):
 if isinstance(arg, tuple):
@@ -81,8 +87,5 @@
 else:
 return 'py::arg("%s")' % arg

-code('.def("${{self.name}}", &${cname}::${{self.name}}, ')
-code('' + \
- ', '.join([ get_arg_decl(a) for a in self.args ]) + ')')
-else:
-code('.def("${{self.name}}", &${cname}::${{self.cxx_name}})')
+arguments.extend(list([ get_arg_decl(a) for a in self.args ]))
+code('.def(' + ', '.join(arguments) + ')')

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/17033
To unsubscribe, or for help writing mail filters, visit  
https://gem5-review.googlesource.com/settings


Gerrit-Project: public/gem5
Gerrit-Branch: master
Gerrit-Change-Id: Ia208e43672672556b36f905e8f71dce44b978d22
Gerrit-Change-Number: 17033
Gerrit-PatchSet: 4
Gerrit-Owner: Gabe Black 
Gerrit-Reviewer: Andreas Sandberg 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Jason Lowe-Power 
Gerrit-Reviewer: Nikos Nikoleris 
Gerrit-Reviewer: Weiping Liao 
Gerrit-MessageType: merged
___
gem5-dev mailing list
gem5-dev@gem5.org
http://m5sim.org/mailman/listinfo/gem5-dev

Re: [gem5-dev] ToT build failures for ARM

2019-03-14 Thread Giacomo Travaglini
Hi Gabe,

thanks for pointing that out.
We have addressed the issues with the following patches:

https://gem5-review.googlesource.com/c/public/gem5/+/17288/1
https://gem5-review.googlesource.com/c/public/gem5/+/17289/1

Thanks

Giacomo

From: gem5-dev  on behalf of Gabe Black 

Sent: 14 March 2019 13:10
To: gem5 Developer List
Subject: [gem5-dev] ToT build failures for ARM

These look like issues exposed by compiler version and that (if that's what
they are) have known fixes. They should be easy to fix, but I'm going to
bed. If they haven't been fixed in the near future I'll send some patches.

Representative compiler errors below.

Gabe


In file included from
build/ARM/arch/arm/generated/generic_cpu_exec_6.cc:10:0:
build/ARM/arch/arm/generated/exec-ns.cc.inc: In member function 'Fault
ArmISAInst::SvePredBic<_Element>::execute(ExecContext*, Trace::InstRecord*)
const':
build/ARM/arch/arm/generated/exec-ns.cc.inc:220568:40: error: '~' on an
expression of type bool [-Werror=bool-operation]
destElem = srcElem1 & ~srcElem2;
   ^~~~
build/ARM/arch/arm/generated/exec-ns.cc.inc:220568:40: note: did you mean
to use logical not ('!')?
build/ARM/arch/arm/generated/exec-ns.cc.inc: In member function 'Fault
ArmISAInst::SvePredBics<_Element>::execute(ExecContext*,
Trace::InstRecord*) const':
build/ARM/arch/arm/generated/exec-ns.cc.inc:220634:40: error: '~' on an
expression of type bool [-Werror=bool-operation]
destElem = srcElem1 & ~srcElem2;
   ^~~~

In file included from build/ARM/arch/arm/generated/inst-constrs-3.cc:9:0:
build/ARM/arch/arm/generated/decoder-ns.cc.inc: In function 'StaticInstPtr
ArmISAInst::Aarch64::decodeSveInt(ArmISA::ExtMachInst)':
build/ARM/arch/arm/generated/decoder-ns.cc.inc:73599:17: error: this
statement may fall through [-Werror=implicit-fallthrough=]
}
^
build/ARM/arch/arm/generated/decoder-ns.cc.inc:73601:11: note: here
  case 0x1:
  ^~~~
build/ARM/arch/arm/generated/decoder-ns.cc.inc:73637:17: error: this
statement may fall through [-Werror=implicit-fallthrough=]
}
^
build/ARM/arch/arm/generated/decoder-ns.cc.inc:73639:11: note: here
  case 0x2:
  ^~~~
___
gem5-dev mailing list
gem5-dev@gem5.org
http://m5sim.org/mailman/listinfo/gem5-dev
IMPORTANT NOTICE: The contents of this email and any attachments are 
confidential and may also be privileged. If you are not the intended recipient, 
please notify the sender immediately and do not disclose the contents to any 
other person, use it for any purpose, or store or copy the information in any 
medium. Thank you.
___
gem5-dev mailing list
gem5-dev@gem5.org
http://m5sim.org/mailman/listinfo/gem5-dev

[gem5-dev] Change in gem5/gem5[master]: arch-arm: Fix use of bitwise operators on booleans

2019-03-14 Thread Giacomo Travaglini (Gerrit)

Hello Javier,

I'd like you to do a code review. Please visit

https://gem5-review.googlesource.com/c/public/gem5/+/17288

to review the following change.


Change subject: arch-arm: Fix use of bitwise operators on booleans
..

arch-arm: Fix use of bitwise operators on booleans

Change-Id: I3762b2921f1d00a9104d8dc11a19dc0a219581e5
Reviewed-by: Giacomo Travaglini 
---
M src/arch/arm/isa/insts/sve.isa
1 file changed, 2 insertions(+), 2 deletions(-)



diff --git a/src/arch/arm/isa/insts/sve.isa b/src/arch/arm/isa/insts/sve.isa
index b1b946f..b1c351f 100644
--- a/src/arch/arm/isa/insts/sve.isa
+++ b/src/arch/arm/isa/insts/sve.isa
@@ -3178,11 +3178,11 @@
 sveBinInst('asrr', 'Asrr', 'SimdAluOp', unsignedTypes, asrrCode,
PredType.MERGE, True)
 # BIC (vectors, predicated)
-bicCode = 'destElem = srcElem1 & ~srcElem2;'
+bicCode = 'destElem = srcElem1 && !srcElem2;'
 sveBinInst('bic', 'BicPred', 'SimdAluOp', unsignedTypes, bicCode,
PredType.MERGE, True)
 # BIC (vectors, unpredicated)
-bicCode = 'destElem = srcElem1 & ~srcElem2;'
+bicCode = 'destElem = srcElem1 && !srcElem2;'
 sveBinInst('bic', 'BicUnpred', 'SimdAluOp', unsignedTypes, bicCode)
 # BIC, BICS (predicates)
 svePredLogicalInst('bic', 'PredBic', 'SimdPredAluOp', ('uint8_t',),

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/17288
To unsubscribe, or for help writing mail filters, visit  
https://gem5-review.googlesource.com/settings


Gerrit-Project: public/gem5
Gerrit-Branch: master
Gerrit-Change-Id: I3762b2921f1d00a9104d8dc11a19dc0a219581e5
Gerrit-Change-Number: 17288
Gerrit-PatchSet: 1
Gerrit-Owner: Giacomo Travaglini 
Gerrit-Reviewer: Javier 
Gerrit-MessageType: newchange
___
gem5-dev mailing list
gem5-dev@gem5.org
http://m5sim.org/mailman/listinfo/gem5-dev

[gem5-dev] Change in gem5/gem5[master]: arch-arm: Add missing fall-through defaults

2019-03-14 Thread Giacomo Travaglini (Gerrit)

Hello Javier,

I'd like you to do a code review. Please visit

https://gem5-review.googlesource.com/c/public/gem5/+/17289

to review the following change.


Change subject: arch-arm: Add missing fall-through defaults
..

arch-arm: Add missing fall-through defaults

Change-Id: Ie64b83d754c4719a77c7788879be71304a9b786e
Reviewed-by: Giacomo Travaglini 
---
M src/arch/arm/isa/formats/sve_2nd_level.isa
M src/arch/arm/isa/formats/sve_top_level.isa
2 files changed, 9 insertions(+), 0 deletions(-)



diff --git a/src/arch/arm/isa/formats/sve_2nd_level.isa  
b/src/arch/arm/isa/formats/sve_2nd_level.isa

index 3c5e01c..ff7e50e 100644
--- a/src/arch/arm/isa/formats/sve_2nd_level.isa
+++ b/src/arch/arm/isa/formats/sve_2nd_level.isa
@@ -118,6 +118,7 @@
 return new Unknown64(machInst);
 }
 }
+break;
 }
   case 0x3:
 {
@@ -532,6 +533,7 @@
 return new SveIndexII(machInst,
 zd, imm5, imm5b);
 }
+break;
 }
 case 1:
 { // INDEX (scalar, immediate)
@@ -552,6 +554,7 @@
 return new SveIndexRI(machInst,
 zd, zn, imm5);
 }
+break;
 }
 case 2:
 { // INDEX (immediate, scalar)
@@ -572,6 +575,7 @@
 return new SveIndexIR(machInst,
 zd, imm5, zm);
 }
+break;
 }
 case 3:
 { // INDEX (scalars)
diff --git a/src/arch/arm/isa/formats/sve_top_level.isa  
b/src/arch/arm/isa/formats/sve_top_level.isa

index f4f1ab5..b8e1d46 100644
--- a/src/arch/arm/isa/formats/sve_top_level.isa
+++ b/src/arch/arm/isa/formats/sve_top_level.isa
@@ -128,6 +128,7 @@
 return decodeSveIntArithUnaryPred(machInst);
 }
 }
+break;
 }
   case 0x1:
 {
@@ -166,6 +167,7 @@
   case 0x3:
 return decodeSveElemCount(machInst);
 }
+break;
 }
   case 0x2:
 if (bits(machInst, 20)) {
@@ -195,6 +197,7 @@
   case 0x3:
 return decodeSveSelVec(machInst);
 }
+break;
 }
   case 0x4:
 return decodeSveIntCmpVec(machInst);
@@ -279,6 +282,7 @@
   case 0x3:
   return decodeSveFpAccumReduc(machInst);
 }
+break;
 }
   case 0x2:
 return decodeSveFpArithPred(machInst);
@@ -286,6 +290,7 @@
 return decodeSveFpUnaryPred(machInst);
 }
 }
+break;
 }
   case 0x3:
 return decodeSveFpFusedMulAdd(machInst);

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/17289
To unsubscribe, or for help writing mail filters, visit  
https://gem5-review.googlesource.com/settings


Gerrit-Project: public/gem5
Gerrit-Branch: master
Gerrit-Change-Id: Ie64b83d754c4719a77c7788879be71304a9b786e
Gerrit-Change-Number: 17289
Gerrit-PatchSet: 1
Gerrit-Owner: Giacomo Travaglini 
Gerrit-Reviewer: Javier 
Gerrit-MessageType: newchange
___
gem5-dev mailing list
gem5-dev@gem5.org
http://m5sim.org/mailman/listinfo/gem5-dev

[gem5-dev] Change in gem5/gem5[master]: mem: Removed circular include ref

2019-03-14 Thread Ryan Gambord (Gerrit)
Ryan Gambord has uploaded this change for review. (  
https://gem5-review.googlesource.com/c/public/gem5/+/17270



Change subject: mem: Removed circular include ref
..

mem: Removed circular include ref

If BasicLink.hh is modified, the style checker forces a reordering of
the includes, which results in build errors because it ends up including
Topology.hh before including its xxxParams.hh files, which include
forward declarations of the BasicLink family of classes, and so
Topology.hh throws errors that BasicLink etc. are not declared.

Change-Id: I664a0652e53f0cc61763c2190a980c655b85d397
Signed-off-by: Ryan Gambord 
---
M src/mem/ruby/network/BasicLink.hh
1 file changed, 4 insertions(+), 3 deletions(-)



diff --git a/src/mem/ruby/network/BasicLink.hh  
b/src/mem/ruby/network/BasicLink.hh

index 39c2096..755e5c7 100644
--- a/src/mem/ruby/network/BasicLink.hh
+++ b/src/mem/ruby/network/BasicLink.hh
@@ -33,14 +33,15 @@
 #include 
 #include 

+#include "mem/ruby/network/BasicRouter.hh"
+#include "mem/ruby/slicc_interface/AbstractController.hh"
 #include "params/BasicExtLink.hh"
 #include "params/BasicIntLink.hh"
 #include "params/BasicLink.hh"
-#include "mem/ruby/network/BasicRouter.hh"
-#include "mem/ruby/network/Topology.hh"
-#include "mem/ruby/slicc_interface/AbstractController.hh"
 #include "sim/sim_object.hh"

+class Topology;
+
 class BasicLink : public SimObject
 {
   public:

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/17270
To unsubscribe, or for help writing mail filters, visit  
https://gem5-review.googlesource.com/settings


Gerrit-Project: public/gem5
Gerrit-Branch: master
Gerrit-Change-Id: I664a0652e53f0cc61763c2190a980c655b85d397
Gerrit-Change-Number: 17270
Gerrit-PatchSet: 1
Gerrit-Owner: Ryan Gambord 
Gerrit-MessageType: newchange
___
gem5-dev mailing list
gem5-dev@gem5.org
http://m5sim.org/mailman/listinfo/gem5-dev

[gem5-dev] Change in gem5/gem5[master]: misc: Removed inconsistency in BPRED* debug msgs

2019-03-14 Thread Andrea Mondelli (Gerrit)

Hello Jason Lowe-Power,

I'd like you to reexamine a change. Please visit

https://gem5-review.googlesource.com/c/public/gem5/+/17248

to look at the new patch set (#2).

Change subject: misc: Removed inconsistency in BPRED* debug msgs
..

misc: Removed inconsistency in BPRED* debug msgs

Added consistency in the DEBUG message form, to allow a better parsing.
Fixed sn/tid type parameter.

Change-Id: I4761c49fc12b874a7d8b46779475b606865cad4b
---
M src/arch/mips/isa.cc
M src/cpu/o3/commit_impl.hh
M src/cpu/o3/cpu.cc
M src/cpu/o3/decode_impl.hh
M src/cpu/o3/fetch_impl.hh
M src/cpu/o3/iew_impl.hh
M src/cpu/o3/inst_queue_impl.hh
M src/cpu/o3/lsq_unit.hh
M src/cpu/o3/lsq_unit_impl.hh
M src/cpu/o3/mem_dep_unit_impl.hh
M src/cpu/o3/rename_impl.hh
M src/cpu/o3/rob_impl.hh
M src/cpu/pred/bpred_unit.cc
13 files changed, 343 insertions(+), 279 deletions(-)


--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/17248
To unsubscribe, or for help writing mail filters, visit  
https://gem5-review.googlesource.com/settings


Gerrit-Project: public/gem5
Gerrit-Branch: master
Gerrit-Change-Id: I4761c49fc12b874a7d8b46779475b606865cad4b
Gerrit-Change-Number: 17248
Gerrit-PatchSet: 2
Gerrit-Owner: Andrea Mondelli 
Gerrit-Reviewer: Andrea Mondelli 
Gerrit-Reviewer: Jason Lowe-Power 
Gerrit-MessageType: newpatchset
___
gem5-dev mailing list
gem5-dev@gem5.org
http://m5sim.org/mailman/listinfo/gem5-dev

[gem5-dev] Change in gem5/gem5[master]: misc: Removed inconsistency in BPRED* debug msgs

2019-03-14 Thread Andrea Mondelli (Gerrit)
Andrea Mondelli has uploaded this change for review. (  
https://gem5-review.googlesource.com/c/public/gem5/+/17248



Change subject: misc: Removed inconsistency in BPRED* debug msgs
..

misc: Removed inconsistency in BPRED* debug msgs

- Added consistency in the DEBUG message form, to allow a better parsing
- Added SN number information to some DEBUG msg for tracing purpose

Change-Id: I4761c49fc12b874a7d8b46779475b606865cad4b
---
M src/arch/mips/isa.cc
M src/cpu/o3/commit_impl.hh
M src/cpu/o3/cpu.cc
M src/cpu/o3/decode_impl.hh
M src/cpu/o3/fetch_impl.hh
M src/cpu/o3/iew_impl.hh
M src/cpu/o3/inst_queue_impl.hh
M src/cpu/o3/rename_impl.hh
M src/cpu/o3/rob_impl.hh
M src/cpu/pred/bpred_unit.cc
M src/cpu/pred/indirect.cc
M src/cpu/pred/indirect.hh
12 files changed, 211 insertions(+), 175 deletions(-)



diff --git a/src/arch/mips/isa.cc b/src/arch/mips/isa.cc
index 2711712..eaee294 100644
--- a/src/arch/mips/isa.cc
+++ b/src/arch/mips/isa.cc
@@ -450,7 +450,7 @@
 unsigned reg_sel = (bankType[misc_reg] == perThreadContext)
 ? tid : getVPENum(tid);
 DPRINTF(MipsPRA,
-"[tid:%i]: Setting (direct set) CP0 Register:%u "
+"[tid:%i] Setting (direct set) CP0 Register:%u "
 "Select:%u (%s) to %#x.\n",
 tid, misc_reg / 8, misc_reg % 8, miscRegNames[misc_reg], val);

@@ -463,7 +463,7 @@
 unsigned reg_sel = (bankType[misc_reg] == perThreadContext)
 ? tid : getVPENum(tid);
 DPRINTF(MipsPRA,
-"[tid:%i]: Setting CP0 Register: %u Select: %u (%s) to %#x\n",
+"[tid:%i] Setting CP0 Register: %u Select: %u (%s) to %#x\n",
 tid, misc_reg / 8, misc_reg % 8, miscRegNames[misc_reg], val);
 miscRegFile_WriteMask[misc_reg][reg_sel] = val;
 }
@@ -479,7 +479,7 @@
 ? tid : getVPENum(tid);

 DPRINTF(MipsPRA,
-"[tid:%i]: Setting CP0 Register:%u "
+"[tid:%i] Setting CP0 Register:%u "
 "Select:%u (%s) to %#x, with effect.\n",
 tid, misc_reg / 8, misc_reg % 8, miscRegNames[misc_reg], val);

diff --git a/src/cpu/o3/commit_impl.hh b/src/cpu/o3/commit_impl.hh
index ec3d610..434f148 100644
--- a/src/cpu/o3/commit_impl.hh
+++ b/src/cpu/o3/commit_impl.hh
@@ -704,7 +704,7 @@

 const DynInstPtr &inst M5_VAR_USED = rob->readHeadInst(tid);

-DPRINTF(Commit,"[tid:%i]: Instruction [sn:%lli] PC %s is head  
of"
+DPRINTF(Commit,"[tid:%i] Instruction [sn:%lli] PC %s is head  
of"

 " ROB and ready to commit\n",
 tid, inst->seqNum, inst->pcState());

@@ -713,12 +713,12 @@

 ppCommitStall->notify(inst);

-DPRINTF(Commit,"[tid:%i]: Can't commit, Instruction [sn:%lli]  
PC "
+DPRINTF(Commit,"[tid:%i] Can't commit, Instruction [sn:%lli]  
PC "

 "%s is head of ROB and not ready\n",
 tid, inst->seqNum, inst->pcState());
 }

-DPRINTF(Commit, "[tid:%i]: ROB has %d insts & %d free entries.\n",
+DPRINTF(Commit, "[tid:%i] ROB has %d insts & %d free entries.\n",
 tid, rob->countInsts(tid), rob->numFreeEntries(tid));
 }

@@ -862,17 +862,18 @@

 if (fromIEW->mispredictInst[tid]) {
 DPRINTF(Commit,
-"[tid:%i]: Squashing due to branch mispred PC:%#x  
[sn:%i]\n",

+"[tid:%i] Squashing due to branch mispred "
+"PC:%#x [sn:%i]\n",
 tid,
 fromIEW->mispredictInst[tid]->instAddr(),
 fromIEW->squashedSeqNum[tid]);
 } else {
 DPRINTF(Commit,
-"[tid:%i]: Squashing due to order violation [sn:%i]\n",
+"[tid:%i] Squashing due to order violation [sn:%i]\n",
 tid, fromIEW->squashedSeqNum[tid]);
 }

-DPRINTF(Commit, "[tid:%i]: Redirecting to PC %#x\n",
+DPRINTF(Commit, "[tid:%i] Redirecting to PC %#x\n",
 tid,
 fromIEW->pc[tid].nextInstAddr());

@@ -1364,7 +1365,7 @@
 for (int inst_num = 0; inst_num < fromIEW->size; ++inst_num) {
 assert(fromIEW->insts[inst_num]);
 if (!fromIEW->insts[inst_num]->isSquashed()) {
-DPRINTF(Commit, "[tid:%i]: Marking PC %s, [sn:%lli] ready "
+DPRINTF(Commit, "[tid:%i] Marking PC %s, [sn:%lli] ready "
 "within ROB.\n",
 fromIEW->insts[inst_num]->threadNumber,
 fromIEW->insts[inst_num]->pcState(),
diff --git a/src/cpu/o3/cpu.cc b/src/cpu/o3/cpu.cc
index 965ab04..5c88c50 100644
--- a/src/cpu/o3/cpu.cc
+++ b/src/cpu/o3/cpu.cc
@@ -689,11 +689,11 @@
 list::iterator isActive =
 std::find(activeThreads.begin(), activeThreads.end(), tid);

-DPRINTF(O3CPU, "[tid:%i]: Calling activate thread.\n", tid);
+DP

[gem5-dev] Change in gem5/gem5[master]: cpu: Added namespace to O3 Cpu Model

2019-03-14 Thread Andrea Mondelli (Gerrit)

Hello Anthony Gutierrez, Jason Lowe-Power, Giacomo Travaglini,

I'd like you to reexamine a change. Please visit

https://gem5-review.googlesource.com/c/public/gem5/+/16950

to look at the new patch set (#4).

Change subject: cpu: Added namespace to O3 Cpu Model
..

cpu: Added namespace to O3 Cpu Model

The O3 cpu folder doesn't offer a namespace implementation like others
model (i.e. Simple).
This lack of a proper namespace creates a conflict if a new O3-like cpu
model is added, preventing the reuse of typical O3-related keyword names
for classes and structures.

FUPool is renamed to O3FUPool according to the other o3 objects.
Classes used as a parameter (params/*.hh) are defined out of the O3
namespace due to their global scope when created at compile time.

Change-Id: I4a9ce60b94937fb8d8fe8d0b35d92819feb7037f
---
M src/cpu/o3/O3CPU.py
R src/cpu/o3/O3FUPool.py
M src/cpu/o3/SConscript
M src/cpu/o3/base_dyn_inst.cc
M src/cpu/o3/checker.cc
M src/cpu/o3/checker.hh
M src/cpu/o3/comm.hh
M src/cpu/o3/commit.cc
M src/cpu/o3/commit.hh
M src/cpu/o3/commit_impl.hh
M src/cpu/o3/cpu.cc
M src/cpu/o3/cpu.hh
M src/cpu/o3/cpu_policy.hh
M src/cpu/o3/decode.cc
M src/cpu/o3/decode.hh
M src/cpu/o3/decode_impl.hh
M src/cpu/o3/dep_graph.hh
M src/cpu/o3/deriv.hh
M src/cpu/o3/dyn_inst.cc
M src/cpu/o3/dyn_inst.hh
M src/cpu/o3/dyn_inst_impl.hh
M src/cpu/o3/fetch.cc
M src/cpu/o3/fetch.hh
M src/cpu/o3/fetch_impl.hh
M src/cpu/o3/free_list.cc
M src/cpu/o3/free_list.hh
M src/cpu/o3/fu_pool.cc
M src/cpu/o3/fu_pool.hh
M src/cpu/o3/iew.cc
M src/cpu/o3/iew.hh
M src/cpu/o3/iew_impl.hh
M src/cpu/o3/impl.hh
M src/cpu/o3/inst_queue.cc
M src/cpu/o3/inst_queue.hh
M src/cpu/o3/inst_queue_impl.hh
M src/cpu/o3/lsq.cc
M src/cpu/o3/lsq.hh
M src/cpu/o3/lsq_impl.hh
M src/cpu/o3/lsq_unit.cc
M src/cpu/o3/lsq_unit.hh
M src/cpu/o3/lsq_unit_impl.hh
M src/cpu/o3/mem_dep_unit.cc
M src/cpu/o3/mem_dep_unit.hh
M src/cpu/o3/mem_dep_unit_impl.hh
M src/cpu/o3/probe/elastic_trace.cc
M src/cpu/o3/probe/elastic_trace.hh
M src/cpu/o3/probe/simple_trace.cc
M src/cpu/o3/probe/simple_trace.hh
M src/cpu/o3/regfile.cc
M src/cpu/o3/regfile.hh
M src/cpu/o3/rename.cc
M src/cpu/o3/rename.hh
M src/cpu/o3/rename_impl.hh
M src/cpu/o3/rename_map.cc
M src/cpu/o3/rename_map.hh
M src/cpu/o3/rob.cc
M src/cpu/o3/rob.hh
M src/cpu/o3/rob_impl.hh
M src/cpu/o3/scoreboard.cc
M src/cpu/o3/scoreboard.hh
M src/cpu/o3/store_set.cc
M src/cpu/o3/store_set.hh
M src/cpu/o3/thread_context.cc
M src/cpu/o3/thread_context.hh
M src/cpu/o3/thread_context_impl.hh
M src/cpu/o3/thread_state.hh
66 files changed, 330 insertions(+), 56 deletions(-)


--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/16950
To unsubscribe, or for help writing mail filters, visit  
https://gem5-review.googlesource.com/settings


Gerrit-Project: public/gem5
Gerrit-Branch: master
Gerrit-Change-Id: I4a9ce60b94937fb8d8fe8d0b35d92819feb7037f
Gerrit-Change-Number: 16950
Gerrit-PatchSet: 4
Gerrit-Owner: Andrea Mondelli 
Gerrit-Reviewer: Andrea Mondelli 
Gerrit-Reviewer: Anthony Gutierrez 
Gerrit-Reviewer: Giacomo Travaglini 
Gerrit-Reviewer: Jason Lowe-Power 
Gerrit-CC: Andreas Sandberg 
Gerrit-CC: Gabe Black 
Gerrit-MessageType: newpatchset
___
gem5-dev mailing list
gem5-dev@gem5.org
http://m5sim.org/mailman/listinfo/gem5-dev

[gem5-dev] Change in gem5/gem5[master]: cpu: Refactor of Physical Register implementation

2019-03-14 Thread Andrea Mondelli (Gerrit)
Andrea Mondelli has submitted this change and it was merged. (  
https://gem5-review.googlesource.com/c/public/gem5/+/16908 )


Change subject: cpu: Refactor of Physical Register implementation
..

cpu: Refactor of Physical Register implementation

The implementation of the PhyRegId class is shared between multiple
cpu models. The o3/misc.hh should only be included in o3 models.

This patch removes the dependencies between different model
implementations, allowing to add new O3-like CPU model.

Change-Id: Ibb812517043befe75c48fab3ce9605a0d272870b
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/16908
Reviewed-by: Anthony Gutierrez 
Reviewed-by: Bradley Wang 
Reviewed-by: Andreas Sandberg 
Reviewed-by: Jason Lowe-Power 
Maintainer: Andreas Sandberg 
---
M src/cpu/base_dyn_inst.hh
M src/cpu/o3/comm.hh
M src/cpu/reg_class.hh
3 files changed, 99 insertions(+), 100 deletions(-)

Approvals:
  Jason Lowe-Power: Looks good to me, approved
  Andreas Sandberg: Looks good to me, approved; Looks good to me, approved
  Anthony Gutierrez: Looks good to me, approved
  Bradley Wang: Looks good to me, approved



diff --git a/src/cpu/base_dyn_inst.hh b/src/cpu/base_dyn_inst.hh
index 9a1ab06..f1c7829 100644
--- a/src/cpu/base_dyn_inst.hh
+++ b/src/cpu/base_dyn_inst.hh
@@ -61,7 +61,6 @@
 #include "cpu/exetrace.hh"
 #include "cpu/inst_res.hh"
 #include "cpu/inst_seq.hh"
-#include "cpu/o3/comm.hh"
 #include "cpu/op_class.hh"
 #include "cpu/static_inst.hh"
 #include "cpu/translation.hh"
diff --git a/src/cpu/o3/comm.hh b/src/cpu/o3/comm.hh
index df518b1..e2fda99 100644
--- a/src/cpu/o3/comm.hh
+++ b/src/cpu/o3/comm.hh
@@ -52,105 +52,6 @@
 #include "cpu/inst_seq.hh"
 #include "sim/faults.hh"

-/** Physical register index type.
- * Although the Impl might be a better for this, but there are a few  
classes

- * that need this typedef yet are not templated on the Impl.
- */
-using PhysRegIndex = short int;
-
-/** Physical register ID.
- * Like a register ID but physical. The inheritance is private because the
- * only relationship between this types is functional, and it is done to
- * prevent code replication. */
-class PhysRegId : private RegId {
-  private:
-PhysRegIndex flatIdx;
-
-  public:
-explicit PhysRegId() : RegId(IntRegClass, -1), flatIdx(-1) {}
-
-/** Scalar PhysRegId constructor. */
-explicit PhysRegId(RegClass _regClass, PhysRegIndex _regIdx,
-  PhysRegIndex _flatIdx)
-: RegId(_regClass, _regIdx), flatIdx(_flatIdx)
-{}
-
-/** Vector PhysRegId constructor (w/ elemIndex). */
-explicit PhysRegId(RegClass _regClass, PhysRegIndex _regIdx,
-  ElemIndex elem_idx, PhysRegIndex flat_idx)
-: RegId(_regClass, _regIdx, elem_idx), flatIdx(flat_idx) { }
-
-/** Visible RegId methods */
-/** @{ */
-using RegId::index;
-using RegId::classValue;
-using RegId::isZeroReg;
-using RegId::className;
-using RegId::elemIndex;
- /** @} */
-/**
- * Explicit forward methods, to prevent comparisons of PhysRegId with
- * RegIds.
- */
-/** @{ */
-bool operator<(const PhysRegId& that) const {
-return RegId::operator<(that);
-}
-
-bool operator==(const PhysRegId& that) const {
-return RegId::operator==(that);
-}
-
-bool operator!=(const PhysRegId& that) const {
-return RegId::operator!=(that);
-}
-/** @} */
-
-/** @return true if it is an integer physical register. */
-bool isIntPhysReg() const { return isIntReg(); }
-
-/** @return true if it is a floating-point physical register. */
-bool isFloatPhysReg() const { return isFloatReg(); }
-
-/** @Return true if it is a  condition-code physical register. */
-bool isCCPhysReg() const { return isCCReg(); }
-
-/** @Return true if it is a vector physical register. */
-bool isVectorPhysReg() const { return isVecReg(); }
-
-/** @Return true if it is a vector element physical register. */
-bool isVectorPhysElem() const { return isVecElem(); }
-
-/** @return true if it is a vector predicate physical register. */
-bool isVecPredPhysReg() const { return isVecPredReg(); }
-
-/** @Return true if it is a  condition-code physical register. */
-bool isMiscPhysReg() const { return isMiscReg(); }
-
-/**
- * Returns true if this register is always associated to the same
- * architectural register.
- */
-bool isFixedMapping() const
-{
-return !isRenameable();
-}
-
-/** Flat index accessor */
-const PhysRegIndex& flatIndex() const { return flatIdx; }
-
-static PhysRegId elemId(const PhysRegId* vid, ElemIndex elem)
-{
-assert(vid->isVectorPhysReg());
-return PhysRegId(VecElemClass, vid->index(), elem);
-}
-};
-
-/** Constant pointer definition.
- * PhysRegIds only need to be created once and then we can just share
- * pointers */
-using PhysRegI

[gem5-dev] Change in gem5/gem5[master]: sim-se: remove mem proxy in ThreadContext

2019-03-14 Thread Brandon Potter (Gerrit)
Brandon Potter has uploaded a new patch set (#14). (  
https://gem5-review.googlesource.com/c/public/gem5/+/12305 )


Change subject: sim-se: remove mem proxy in ThreadContext
..

sim-se: remove mem proxy in ThreadContext

Many parts of the source code use a memory proxy reference to
access the simulated memory space in Syscall Emulation Mode.
However, it would be nice if all memory responsibilities were
delegated to a single object rather than spread across many
objects.

This patch helps to consolidate the memory responsibilities
inside the MemState class by removing the ThreadContext's memory
proxy.

Change-Id: Ic1a6c3017c412a24db91770396d0a9bde790421d
---
M src/arch/alpha/faults.cc
M src/arch/alpha/linux/process.cc
M src/arch/alpha/process.cc
M src/arch/alpha/process.hh
M src/arch/arm/freebsd/process.cc
M src/arch/arm/linux/process.cc
M src/arch/arm/process.cc
M src/arch/arm/remote_gdb.cc
M src/arch/arm/tlb.cc
M src/arch/generic/tlb.cc
M src/arch/mips/linux/process.cc
M src/arch/mips/process.cc
M src/arch/mips/remote_gdb.cc
M src/arch/mips/tlb.cc
M src/arch/power/linux/process.cc
M src/arch/power/process.cc
M src/arch/power/remote_gdb.cc
M src/arch/power/tlb.cc
M src/arch/riscv/linux/process.cc
M src/arch/riscv/process.cc
M src/arch/riscv/process.hh
M src/arch/riscv/remote_gdb.cc
M src/arch/riscv/tlb.cc
M src/arch/sparc/faults.cc
M src/arch/sparc/linux/syscalls.cc
M src/arch/sparc/process.cc
M src/arch/sparc/process.hh
M src/arch/sparc/remote_gdb.cc
M src/arch/sparc/solaris/process.cc
M src/arch/x86/linux/process.cc
M src/arch/x86/process.cc
M src/arch/x86/process.hh
M src/arch/x86/pseudo_inst.cc
M src/arch/x86/remote_gdb.cc
M src/arch/x86/tlb.cc
M src/base/remote_gdb.cc
M src/cpu/checker/thread_context.hh
M src/cpu/o3/thread_context.hh
M src/cpu/thread_context.hh
M src/cpu/thread_state.cc
M src/cpu/thread_state.hh
M src/gpu-compute/cl_driver.cc
M src/gpu-compute/compute_unit.cc
M src/gpu-compute/gpu_tlb.cc
M src/gpu-compute/shader.cc
M src/mem/se_translating_port_proxy.cc
M src/mem/se_translating_port_proxy.hh
M src/sim/SConscript
M src/sim/faults.cc
A src/sim/mem_state.cc
M src/sim/mem_state.hh
R src/sim/mem_state_impl.hh
M src/sim/process.cc
M src/sim/process.hh
M src/sim/syscall_emul.cc
M src/sim/syscall_emul.hh
56 files changed, 1,292 insertions(+), 644 deletions(-)


--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/12305
To unsubscribe, or for help writing mail filters, visit  
https://gem5-review.googlesource.com/settings


Gerrit-Project: public/gem5
Gerrit-Branch: master
Gerrit-Change-Id: Ic1a6c3017c412a24db91770396d0a9bde790421d
Gerrit-Change-Number: 12305
Gerrit-PatchSet: 14
Gerrit-Owner: Brandon Potter 
Gerrit-MessageType: newpatchset
___
gem5-dev mailing list
gem5-dev@gem5.org
http://m5sim.org/mailman/listinfo/gem5-dev

[gem5-dev] Change in gem5/gem5[master]: sim-se: change syscall function signature

2019-03-14 Thread Brandon Potter (Gerrit)

Hello Jason Lowe-Power, Andreas Sandberg,

I'd like you to reexamine a change. Please visit

https://gem5-review.googlesource.com/c/public/gem5/+/12299

to look at the new patch set (#14).

Change subject: sim-se: change syscall function signature
..

sim-se: change syscall function signature

The system calls had four parameters. One of the parameters
is ThreadContext and another is Process. The ThreadContext
holds the value of the current process so the Process parameter
is redundant since the system call functions already have
indirect access.

With the old API, it is possible to call into the functions with
the wrong supplied Process which could end up being a confusing
error.

This patch removes the redundancy by forcing access through the
ThreadContext field within each system call.

Change-Id: Ib43d3f65824f6d425260dfd9f67de1892b6e8b7c
---
M src/arch/alpha/linux/process.cc
M src/arch/arm/freebsd/process.cc
M src/arch/arm/linux/process.cc
M src/arch/mips/linux/process.cc
M src/arch/power/linux/process.cc
M src/arch/riscv/linux/process.cc
M src/arch/sparc/linux/syscalls.cc
M src/arch/sparc/solaris/process.cc
M src/arch/x86/linux/process.cc
M src/gpu-compute/cl_driver.cc
M src/gpu-compute/cl_driver.hh
M src/sim/emul_driver.hh
M src/sim/process.cc
M src/sim/syscall_desc.cc
M src/sim/syscall_desc.hh
M src/sim/syscall_emul.cc
M src/sim/syscall_emul.hh
17 files changed, 372 insertions(+), 383 deletions(-)


--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/12299
To unsubscribe, or for help writing mail filters, visit  
https://gem5-review.googlesource.com/settings


Gerrit-Project: public/gem5
Gerrit-Branch: master
Gerrit-Change-Id: Ib43d3f65824f6d425260dfd9f67de1892b6e8b7c
Gerrit-Change-Number: 12299
Gerrit-PatchSet: 14
Gerrit-Owner: Brandon Potter 
Gerrit-Reviewer: Andreas Sandberg 
Gerrit-Reviewer: Jason Lowe-Power 
Gerrit-MessageType: newpatchset
___
gem5-dev mailing list
gem5-dev@gem5.org
http://m5sim.org/mailman/listinfo/gem5-dev

[gem5-dev] Change in gem5/gem5[master]: sim-se: add a faux-filesystem

2019-03-14 Thread Brandon Potter (Gerrit)

Hello Anthony Gutierrez, Jason Lowe-Power, Ciro Santilli,

I'd like you to reexamine a change. Please visit

https://gem5-review.googlesource.com/c/public/gem5/+/12119

to look at the new patch set (#15).

Change subject: sim-se: add a faux-filesystem
..

sim-se: add a faux-filesystem

This change introduces the concept of a faux-filesystem.
The faux-filesystem creates a directory structure in m5out
(or whatever output dir the user specifies) where system calls
may be redirected.

This is useful to avoid non-determinism when reading files
with varying path names (e.g., variations from run-to-run if
the simulation is scheduled on a cluster where paths may change).

Also, this changeset allows circumventing host pseudofiles which
have information specific to the host processor (such as cache
hierarchy or processor information). Bypassing host pseudofiles
can be useful when executing runtimes in the absence of an
operating system kernel since runtimes may try to query standard
files (i.e. /proc or /sys) which are not relevant to an
application executing in syscall emulation mode.

Change-Id: I90821b3b403168b904a662fa98b85def1628621c
---
A configs/common/FileSystemConfig.py
M configs/common/Options.py
M configs/example/se.py
M src/kern/linux/linux.cc
M src/sim/Process.py
A src/sim/RedirectPath.py
M src/sim/SConscript
M src/sim/System.py
M src/sim/process.cc
M src/sim/process.hh
A src/sim/redirect_path.cc
A src/sim/redirect_path.hh
M src/sim/syscall_emul.cc
M src/sim/syscall_emul.hh
M src/sim/system.cc
M src/sim/system.hh
16 files changed, 585 insertions(+), 87 deletions(-)


--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/12119
To unsubscribe, or for help writing mail filters, visit  
https://gem5-review.googlesource.com/settings


Gerrit-Project: public/gem5
Gerrit-Branch: master
Gerrit-Change-Id: I90821b3b403168b904a662fa98b85def1628621c
Gerrit-Change-Number: 12119
Gerrit-PatchSet: 15
Gerrit-Owner: Brandon Potter 
Gerrit-Reviewer: Anthony Gutierrez 
Gerrit-Reviewer: Brandon Potter 
Gerrit-Reviewer: Ciro Santilli 
Gerrit-Reviewer: Jason Lowe-Power 
Gerrit-CC: Andreas Sandberg 
Gerrit-CC: Giacomo Travaglini 
Gerrit-MessageType: newpatchset
___
gem5-dev mailing list
gem5-dev@gem5.org
http://m5sim.org/mailman/listinfo/gem5-dev

Re: [gem5-dev] Port configuration overhaul

2019-03-14 Thread Jason Lowe-Power
Hey Gabe,

I'll need to think about this a bit more myself, but do you think these
changes will increase the places we can use ports? Like Andreas was saying,
it would be nice to use it for things like interrupt routing, connecting
TLBs, and connecting all of the wavefronts in the GPU to the coalescer,
etc. These are a few places that I can think of trying to use ports where
it wasn't a great semantic before.

Cheers,
Jason

On Thu, Mar 14, 2019 at 6:12 AM Gabe Black  wrote:

> Great, I'm glad you're in favor of this. I have a new, hopefully more final
> batch of patches incoming soon which also include application of the new
> mechanism to TLM sockets.
>
> Gabe
>
> On Thu, Mar 14, 2019 at 2:47 AM Andreas Sandberg  >
> wrote:
>
> > Hi Everyone,
> >
> > I remember talking to Andreas H about this many years ago. If I remember
> > correctly, the main reason the patch wasn't committed at the time was
> > performance related. IIRC, the patch series had a ~10%-20% performance
> > hit. I suspect it the patch Jason pointed to isn't the main reason for
> > any performance issues though, it's more likely one of the subsequent
> > patches that added TLM-like 4-phase handshakes.
> >
> > I'm very much in favour of sorting out the ports vs protocol issue once
> > and for all. A generic port interface would be extremely useful for
> > interrupt routing which is currently very ad-hoc.
> >
> > Cheers,
> > Andreas
> >
> > On 07/03/2019 19:42, Steve Reinhardt wrote:
> > > Thanks for digging this up, Jason.  I knew this issue had been
> addressed
> > > multiple times before (I think I even had a patch at one point that
> was a
> > > smaller change, but held it off in favor of Andreas's version).  I
> don't
> > > know why Andreas's change was never committed either.
> > >
> > > Anyway, it will be good to see this cleaned up, regardless of whether
> we
> > go
> > > with Andreas's code or Gabe's proposal or some hybrid.  I've been out
> of
> > > the loop long enough that I don't have a specific preference.
> > >
> > > Steve
> > >
> > >
> > > On Thu, Mar 7, 2019 at 10:19 AM Jason Lowe-Power 
> > > wrote:
> > >
> > >> Hey Gabe,
> > >>
> > >> I was digging through the old reviewboard and found this patch that
> also
> > >> re-did this interface: http://reviews.gem5.org/r/1301
> > >>
> > >> I'm not sure why this was never committed.
> > >>
> > >> I believe Andreas H's goal was to enable TLM-2 interfaces with the
> gem5,
> > >> IIRC.
> > >>
> > >> Just something to consider.
> > >>
> > >> Cheers,
> > >> Jason
> > >>
> > >> On Thu, Mar 7, 2019 at 7:00 AM Gabe Black 
> wrote:
> > >>
> > >>> Hey folks, specifically folks looking at this doc. I have a series of
> > >>> patches which largely implement what I was going for, although it
> > turned
> > >>> out differently than what I have in my doc. I'll update the doc
> > soon(ish)
> > >>> to describe the current version. Go ahead and review the CLs if you
> > want,
> > >>> although I should probably run another test or two on them and the
> > >>> discussion of the design is still open over on the doc.
> > >>>
> > >>>
> > >>>
> > >>
> >
> https://gem5-review.googlesource.com/q/topic:%22tlm%22+(status:open%20OR%20status:merged)
> > >>> Gabe
> > >>>
> > >>> On Wed, Mar 6, 2019 at 12:20 AM Gabe Black 
> > wrote:
> > >>>
> >  Hi folks. I've been looking at how to configure TLM sockets through
> > >>> gem5's
> >  port configuration mechanism and how gem5's port configuration
> > >> mechanism
> >  works in general, and I think I've mostly come up with a plan. I've
> > >>> written
> >  everything up in a doc over here:
> > 
> > 
> > 
> > >>
> >
> https://docs.google.com/document/d/17eXkE9YtzvYXEgkHFNR1my_xYKl3mYNNtXM9pIAX-t0/edit?usp=sharing
> >  Please take a look if you have a chance, and please comment on the
> doc
> > >> if
> >  you have any questions, concerns, etc.
> > 
> >  I created the doc on my personal account but wrote it from my work
> > >>> account
> >  so it *should* be accessible and commentable by anyone with the
> link.
> >  Please let me know if that's not the case.
> > 
> >  Gabe
> > 
> > >>> ___
> > >>> gem5-dev mailing list
> > >>> gem5-dev@gem5.org
> > >>> http://m5sim.org/mailman/listinfo/gem5-dev
> > >> ___
> > >> gem5-dev mailing list
> > >> gem5-dev@gem5.org
> > >> http://m5sim.org/mailman/listinfo/gem5-dev
> > > ___
> > > gem5-dev mailing list
> > > gem5-dev@gem5.org
> > > http://m5sim.org/mailman/listinfo/gem5-dev
> > IMPORTANT NOTICE: The contents of this email and any attachments are
> > confidential and may also be privileged. If you are not the intended
> > recipient, please notify the sender immediately and do not disclose the
> > contents to any other person, use it for any purpose, or store or copy
> the
> > information in any medium. Thank you.
> > 

Re: [gem5-dev] Adding a systemc TLM DMI like mechanism to gem5

2019-03-14 Thread Dr. Matthias Jung
Hi Gabe,

one of the main reasons for DMI is to speedup simulations, similar to the 
temporal decoupling in TLM LT or debug transport in order to make the 
boot-loading. AFAIK DMI is mainly used in virtual platforms that target 
software development and not hardware architecture design space explorations, 
because you skip interconnects, caches etc. In commercial tools you can just 
switch on or switch off DMI and therefore you can have a nice trade-off between 
speed and accuracy by using the same models. 

Since gem5 is mainly there for computer-system architecture research, I’m not 
sure if the DMI feature is really required. From a TLM2 perspective, even if a 
TLM target model included in gem5 offers DMI, the gem5 core model (initiator) 
does not have to use it, right? Do you have any concrete use case where you 
could exploit DMI? 

For KVM: maybe somebody with KVM experience should comment that.

Best regards,
Matthias

> Am 28.02.2019 um 06:13 schrieb Gabe Black :
> 
> Hi folks. TLM is a communication protocol/mechanism built on top of
> systemc. It supports a mechanism called DMI which stands for direct memory
> interface. The idea is that an entity sending a request into the system can
> ask if the target can give it a pointer it can use to directly access that
> memory in the future. The target, if it supports that sort of thing,
> returns a descriptor which describes a region of memory that can be
> accessed in that way. If that needs to be invalidated in the future, then
> there's another mechanism the target can use to communicate back to the
> sender telling it to throw away that descriptor.
> 
> The way this mechanism is implemented in TLM is a bit less than ideal since
> every request has a field that says whether the requester wants to know
> about DMI, and so the target has to perform an extra check on all the
> requests in case someone is asking when that's useful to communicate only a
> very small fraction of the time, perhaps only once during an entire
> simulation.
> 
> Aside from that though, this mechanism has some nice properties. First, it
> avoids having to globally identify what a memory is or where it is for a
> particular simulation. A memory is just a thing on the other end of a
> request that may let you get at it directly if you ask nicely. Also, if
> there's something in the way that would get messed up if you skipped over
> it, say a cache, it can block those requests from getting through to
> targets. This could be useful for KVM for instance, when it's collecting
> regions to act as RAM for the virtual machine.
> 
> I haven't fully figured out what a good way to avoid the check-every-time
> problem of the systemc mechanism, and ideally whatever I/we come up with
> will be compatible enough to be bridged effectively, but I'm thinking some
> sort of explicit additional call like getAddrRanges which would propogate
> through the hierarchy at specific points, either to a specific address or
> as a broadcast.
> 
> I know some folks have looked at gem5's memory system protocol and
> systemc's TLM before, for instance either to try making gem5 use TLM
> natively, or for the systemc TLM bridges. What do you think about adding
> this sort of mechainsm to gem5? Are there any pitfalls to avoid, known
> issues to figure out, suggested avenues to explore, etc? Please let me
> know. This is likely something I'm going to want to pursue in the next few
> weeks.
> 
> Gabe
> ___
> gem5-dev mailing list
> gem5-dev@gem5.org
> http://m5sim.org/mailman/listinfo/gem5-dev

___
gem5-dev mailing list
gem5-dev@gem5.org
http://m5sim.org/mailman/listinfo/gem5-dev

Re: [gem5-dev] Adding a systemc TLM DMI like mechanism to gem5

2019-03-14 Thread Gabe Black
Bump again.

On Fri, Mar 1, 2019 at 2:31 PM Gabe Black  wrote:

> Bump...
>
> On Wed, Feb 27, 2019 at 9:13 PM Gabe Black  wrote:
>
>> Hi folks. TLM is a communication protocol/mechanism built on top of
>> systemc. It supports a mechanism called DMI which stands for direct memory
>> interface. The idea is that an entity sending a request into the system can
>> ask if the target can give it a pointer it can use to directly access that
>> memory in the future. The target, if it supports that sort of thing,
>> returns a descriptor which describes a region of memory that can be
>> accessed in that way. If that needs to be invalidated in the future, then
>> there's another mechanism the target can use to communicate back to the
>> sender telling it to throw away that descriptor.
>>
>> The way this mechanism is implemented in TLM is a bit less than ideal
>> since every request has a field that says whether the requester wants to
>> know about DMI, and so the target has to perform an extra check on all the
>> requests in case someone is asking when that's useful to communicate only a
>> very small fraction of the time, perhaps only once during an entire
>> simulation.
>>
>> Aside from that though, this mechanism has some nice properties. First,
>> it avoids having to globally identify what a memory is or where it is for a
>> particular simulation. A memory is just a thing on the other end of a
>> request that may let you get at it directly if you ask nicely. Also, if
>> there's something in the way that would get messed up if you skipped over
>> it, say a cache, it can block those requests from getting through to
>> targets. This could be useful for KVM for instance, when it's collecting
>> regions to act as RAM for the virtual machine.
>>
>> I haven't fully figured out what a good way to avoid the check-every-time
>> problem of the systemc mechanism, and ideally whatever I/we come up with
>> will be compatible enough to be bridged effectively, but I'm thinking some
>> sort of explicit additional call like getAddrRanges which would propogate
>> through the hierarchy at specific points, either to a specific address or
>> as a broadcast.
>>
>> I know some folks have looked at gem5's memory system protocol and
>> systemc's TLM before, for instance either to try making gem5 use TLM
>> natively, or for the systemc TLM bridges. What do you think about adding
>> this sort of mechainsm to gem5? Are there any pitfalls to avoid, known
>> issues to figure out, suggested avenues to explore, etc? Please let me
>> know. This is likely something I'm going to want to pursue in the next few
>> weeks.
>>
>> Gabe
>>
>
___
gem5-dev mailing list
gem5-dev@gem5.org
http://m5sim.org/mailman/listinfo/gem5-dev

[gem5-dev] Cron /z/m5/regression/do-regression quick

2019-03-14 Thread Cron Daemon
* 
build/ARM/tests/opt/quick/fs/10.linux-boot/arm/linux/realview-simple-timing-dual:
 FAILED!
* build/ARM/tests/opt/quick/se/00.hello/arm/linux/o3-timing: FAILED!
* 
build/RISCV/tests/opt/quick/se/02.insttest/riscv/linux-rv64c/simple-atomic: 
FAILED!
* 
build/RISCV/tests/opt/quick/se/02.insttest/riscv/linux-rv64c/minor-timing: 
FAILED!
* 
build/RISCV/tests/opt/quick/se/02.insttest/riscv/linux-rv64c/simple-timing-ruby:
 FAILED!
* 
build/RISCV/tests/opt/quick/se/02.insttest/riscv/linux-rv64c/simple-timing: 
FAILED!
* build/RISCV/tests/opt/quick/se/02.insttest/riscv/linux-rv64f/o3-timing: 
FAILED!
* build/RISCV/tests/opt/quick/se/02.insttest/riscv/linux-rv64c/o3-timing: 
FAILED!
* 
build/ALPHA/tests/opt/quick/se/03.learning-gem5/alpha/linux/learning-gem5-p1-simple:
 CHANGED!
* 
build/ALPHA/tests/opt/quick/se/03.learning-gem5/alpha/linux/learning-gem5-p1-two-level:
 CHANGED!
* build/ALPHA/tests/opt/quick/se/01.hello-2T-smt/alpha/linux/o3-timing-mt: 
CHANGED!
* build/ALPHA/tests/opt/quick/se/00.hello/alpha/linux/o3-timing: CHANGED!
* build/ALPHA/tests/opt/quick/se/00.hello/alpha/linux/simple-timing-ruby: 
CHANGED!
* build/ALPHA/tests/opt/quick/se/00.hello/alpha/linux/simple-atomic: 
CHANGED!
* build/ALPHA/tests/opt/quick/se/00.hello/alpha/linux/minor-timing: CHANGED!
* build/ALPHA/tests/opt/quick/se/00.hello/alpha/linux/simple-timing: 
CHANGED!
* 
build/ALPHA/tests/opt/quick/fs/10.linux-boot/alpha/linux/tsunami-simple-atomic: 
CHANGED!
* 
build/ALPHA/tests/opt/quick/fs/10.linux-boot/alpha/linux/tsunami-simple-atomic-dual:
 CHANGED!
* 
build/ALPHA/tests/opt/quick/fs/10.linux-boot/alpha/linux/tsunami-simple-timing: 
CHANGED!
* 
build/ALPHA/tests/opt/quick/fs/10.linux-boot/alpha/linux/tsunami-simple-timing-dual:
 CHANGED!
* 
build/MIPS/tests/opt/quick/se/03.learning-gem5/mips/linux/learning-gem5-p1-simple:
 CHANGED!
* build/MIPS/tests/opt/quick/se/00.hello/mips/linux/simple-atomic: CHANGED!
* build/MIPS/tests/opt/quick/se/00.hello/mips/linux/simple-timing: CHANGED!
* 
build/MIPS/tests/opt/quick/se/03.learning-gem5/mips/linux/learning-gem5-p1-two-level:
 CHANGED!
* build/MIPS/tests/opt/quick/se/00.hello/mips/linux/o3-timing: CHANGED!
* build/MIPS/tests/opt/quick/se/00.hello/mips/linux/simple-timing-ruby: 
CHANGED!
* 
build/ALPHA/tests/opt/quick/fs/80.netperf-stream/alpha/linux/twosys-tsunami-simple-atomic:
 CHANGED!
* build/NULL/tests/opt/quick/se/80.dram-closepage/null/none/dram-lowp: 
CHANGED!
* build/NULL/tests/opt/quick/se/80.dram-openpage/null/none/dram-lowp: 
CHANGED!
* build/NULL/tests/opt/quick/se/70.tgen/null/none/tgen-simple-mem: CHANGED!
* build/NULL/tests/opt/quick/se/60.rubytest/null/none/rubytest-ruby: 
CHANGED!
* build/NULL/tests/opt/quick/se/70.tgen/null/none/tgen-dram-ctrl: CHANGED!
* 
build/NULL_MOESI_hammer/tests/opt/quick/se/60.rubytest/null/none/rubytest-ruby-MOESI_hammer:
 CHANGED!
* 
build/NULL_MESI_Two_Level/tests/opt/quick/se/60.rubytest/null/none/rubytest-ruby-MESI_Two_Level:
 CHANGED!
* 
build/NULL_MOESI_CMP_directory/tests/opt/quick/se/60.rubytest/null/none/rubytest-ruby-MOESI_CMP_directory:
 CHANGED!
* 
build/NULL_MOESI_CMP_token/tests/opt/quick/se/60.rubytest/null/none/rubytest-ruby-MOESI_CMP_token:
 CHANGED!
* build/POWER/tests/opt/quick/se/00.hello/power/linux/simple-atomic: 
CHANGED!
* build/POWER/tests/opt/quick/se/00.hello/power/linux/o3-timing: CHANGED!
* 
build/SPARC/tests/opt/quick/se/03.learning-gem5/sparc/linux/learning-gem5-p1-simple:
 CHANGED!
* build/SPARC/tests/opt/quick/se/00.hello/sparc/linux/simple-atomic: 
CHANGED!
* 
build/SPARC/tests/opt/quick/se/40.m5threads-test-atomic/sparc/linux/simple-atomic-mp:
 CHANGED!
* build/SPARC/tests/opt/quick/se/00.hello/sparc/linux/simple-timing-ruby: 
CHANGED!
* build/SPARC/tests/opt/quick/se/00.hello/sparc/linux/simple-timing: 
CHANGED!
* build/SPARC/tests/opt/quick/se/02.insttest/sparc/linux/simple-timing: 
CHANGED!
* 
build/SPARC/tests/opt/quick/se/40.m5threads-test-atomic/sparc/linux/simple-timing-mp:
 CHANGED!
* build/SPARC/tests/opt/quick/se/02.insttest/sparc/linux/simple-atomic: 
CHANGED!
* build/SPARC/tests/opt/quick/se/02.insttest/sparc/linux/o3-timing: CHANGED!
* 
build/SPARC/tests/opt/quick/se/03.learning-gem5/sparc/linux/learning-gem5-p1-two-level:
 CHANGED!
* 
build/SPARC/tests/opt/quick/se/40.m5threads-test-atomic/sparc/linux/o3-timing-mp:
 CHANGED!
* build/SPARC/tests/opt/quick/se/50.vortex/sparc/linux/simple-atomic: 
CHANGED!
* build/SPARC/tests/opt/quick/se/70.twolf/sparc/linux/simple-atomic: 
CHANGED!
* build/SPARC/tests/opt/quick/se/10.mcf/sparc/linux/simple-atomic: CHANGED!
* build/SPARC/tests/opt/quick/se/50.vortex/sparc/linux/simple-timing: 
CHANGED!
* build/SPARC/tests/opt/quick/se/70.twolf/sparc/linux/simple-timing: 
CHANGED!
* build/X86/tests/opt/quick/se/00.hello/x86/linux/simple-atomic: CHAN

[gem5-dev] Change in gem5/gem5[master]: systemc: Delete extra code from src/systemc/tlm_bridge.

2019-03-14 Thread Gabe Black (Gerrit)
Gabe Black has uploaded this change for review. (  
https://gem5-review.googlesource.com/c/public/gem5/+/17233



Change subject: systemc: Delete extra code from src/systemc/tlm_bridge.
..

systemc: Delete extra code from src/systemc/tlm_bridge.

Much of the code in src/systemc/tlm_bridge has been absorbed into the
TLM/gem5 bridge SimObjects and is no longer needed and redundant with
the original version in util/.

Change-Id: I0fa7af67649987cf9f6fc5cd4783002dde2242ac
---
M src/systemc/tlm_bridge/SConscript
D src/systemc/tlm_bridge/master_transactor.cc
D src/systemc/tlm_bridge/master_transactor.hh
D src/systemc/tlm_bridge/sc_master_port.cc
D src/systemc/tlm_bridge/sc_master_port.hh
D src/systemc/tlm_bridge/sc_slave_port.cc
D src/systemc/tlm_bridge/sc_slave_port.hh
D src/systemc/tlm_bridge/sim_control_if.hh
D src/systemc/tlm_bridge/slave_transactor.cc
D src/systemc/tlm_bridge/slave_transactor.hh
10 files changed, 1 insertion(+), 1,451 deletions(-)



diff --git a/src/systemc/tlm_bridge/SConscript  
b/src/systemc/tlm_bridge/SConscript

index df56fdf..4ec7b72 100644
--- a/src/systemc/tlm_bridge/SConscript
+++ b/src/systemc/tlm_bridge/SConscript
@@ -33,11 +33,6 @@
 SimObject('TlmBridge.py')

 Source('gem5_to_tlm.cc')
-Source('tlm_to_gem5.cc')
-
-Source('master_transactor.cc')
 Source('sc_ext.cc')
-Source('sc_master_port.cc')
 Source('sc_mm.cc')
-Source('sc_slave_port.cc')
-Source('slave_transactor.cc')
+Source('tlm_to_gem5.cc')
diff --git a/src/systemc/tlm_bridge/master_transactor.cc  
b/src/systemc/tlm_bridge/master_transactor.cc

deleted file mode 100644
index 58651b0..000
--- a/src/systemc/tlm_bridge/master_transactor.cc
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (c) 2016, Dresden University of Technology (TU Dresden)
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright  
notice,

- *this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *notice, this list of conditions and the following disclaimer in the
- *documentation and/or other materials provided with the distribution.
- *
- * 3. Neither the name of the copyright holder nor the names of its
- *contributors may be used to endorse or promote products derived from
- *this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  
LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A  
PARTICULAR

- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * Authors: Christian Menard
- */
-
-#include "systemc/tlm_bridge/master_transactor.hh"
-
-#include "systemc/ext/utils/sc_report_handler.hh"
-#include "systemc/tlm_bridge/sc_master_port.hh"
-#include "systemc/tlm_bridge/sim_control_if.hh"
-
-namespace Gem5SystemC
-{
-
-Gem5MasterTransactor::Gem5MasterTransactor(sc_core::sc_module_name name,
-   const std::string& portName)
-: sc_core::sc_module(name),
-  socket(portName.c_str()),
-  sim_control("sim_control"),
-  portName(portName)
-{
-if (portName.empty()) {
-SC_REPORT_ERROR(name, "No port name specified!\n");
-}
-}
-
-void
-Gem5MasterTransactor::before_end_of_elaboration()
-{
-auto *port = sim_control->getMasterPort(portName);
-
-port->bindToTransactor(this);
-}
-
-} // namespace Gem5SystemC
diff --git a/src/systemc/tlm_bridge/master_transactor.hh  
b/src/systemc/tlm_bridge/master_transactor.hh

deleted file mode 100644
index 5033684..000
--- a/src/systemc/tlm_bridge/master_transactor.hh
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright (c) 2016, Dresden University of Technology (TU Dresden)
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright  
notice,

- *this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *notice, this list of conditions a

[gem5-dev] Change in gem5/gem5[master]: systemc: Hook up gem5_getPort to the gem5 getPort mechanism.

2019-03-14 Thread Gabe Black (Gerrit)
Gabe Black has uploaded this change for review. (  
https://gem5-review.googlesource.com/c/public/gem5/+/17229



Change subject: systemc: Hook up gem5_getPort to the gem5 getPort mechanism.
..

systemc: Hook up gem5_getPort to the gem5 getPort mechanism.

Change-Id: I771607c4436f4c1ca9d355d1da52924308cfc3b3
---
M src/systemc/core/SystemC.py
M src/systemc/core/sc_module.cc
M src/systemc/ext/core/sc_module.hh
3 files changed, 20 insertions(+), 1 deletion(-)



diff --git a/src/systemc/core/SystemC.py b/src/systemc/core/SystemC.py
index 649d6d3..74b7cec 100644
--- a/src/systemc/core/SystemC.py
+++ b/src/systemc/core/SystemC.py
@@ -25,7 +25,7 @@
 #
 # Authors: Gabe Black

-from m5.SimObject import SimObject
+from m5.SimObject import SimObject, cxxMethod

 # This class represents the systemc kernel. There should be exactly one in  
the
 # simulation. It receives gem5 SimObject lifecycle callbacks (init,  
regStats,

@@ -62,6 +62,10 @@
 cxx_class = 'sc_core::sc_module'
 cxx_header = 'systemc/ext/core/sc_module.hh'

+@cxxMethod(return_value_policy="reference", cxx_name="gem5_getPort")
+def getPort(self, if_name, iex):
+return None
+
 try:
 import _m5
 except:
diff --git a/src/systemc/core/sc_module.cc b/src/systemc/core/sc_module.cc
index fc98aa3..ba9c76a 100644
--- a/src/systemc/core/sc_module.cc
+++ b/src/systemc/core/sc_module.cc
@@ -31,6 +31,7 @@
 #include 
 #include 

+#include "base/logging.hh"
 #include "systemc/core/event.hh"
 #include "systemc/core/kernel.hh"
 #include "systemc/core/module.hh"
@@ -114,6 +115,12 @@

 const sc_bind_proxy SC_BIND_PROXY_NIL;

+::Port &
+sc_module::gem5_getPort(const std::string &if_name, int idx)
+{
+fatal("%s does not have any port named %s\n", name(), if_name);
+}
+
 sc_module::~sc_module() { delete _gem5_module; }

 void
diff --git a/src/systemc/ext/core/sc_module.hh  
b/src/systemc/ext/core/sc_module.hh

index 0c8bd9f..24a1aea 100644
--- a/src/systemc/ext/core/sc_module.hh
+++ b/src/systemc/ext/core/sc_module.hh
@@ -30,6 +30,7 @@
 #ifndef __SYSTEMC_CORE_EXT_SC_MODULE_HH__
 #define __SYSTEMC_CORE_EXT_SC_MODULE_HH__

+#include 
 #include 

 #include "sc_object.hh"
@@ -58,6 +59,9 @@

 } // namespace sc_gem5

+// Gem5 prototype
+class Port;
+
 namespace sc_core
 {

@@ -95,6 +99,10 @@
 class sc_module : public sc_object
 {
   public:
+// Gem5 specific extensions
+virtual ::Port &gem5_getPort(const std::string &if_name, int idx=-1);
+
+  public:
 friend class ::sc_gem5::Kernel;
 friend class ::sc_gem5::Module;


--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/17229
To unsubscribe, or for help writing mail filters, visit  
https://gem5-review.googlesource.com/settings


Gerrit-Project: public/gem5
Gerrit-Branch: master
Gerrit-Change-Id: I771607c4436f4c1ca9d355d1da52924308cfc3b3
Gerrit-Change-Number: 17229
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black 
Gerrit-MessageType: newchange
___
gem5-dev mailing list
gem5-dev@gem5.org
http://m5sim.org/mailman/listinfo/gem5-dev

[gem5-dev] Change in gem5/gem5[master]: systemc: Templatize the gem5/TLM bridge SimObjects.

2019-03-14 Thread Gabe Black (Gerrit)
Gabe Black has uploaded this change for review. (  
https://gem5-review.googlesource.com/c/public/gem5/+/17234



Change subject: systemc: Templatize the gem5/TLM bridge SimObjects.
..

systemc: Templatize the gem5/TLM bridge SimObjects.

The C++ side is templated, and there are python versions for each
(currently two) width of bridge supported.

Change-Id: I4baa9f22d4c87629d45e9e1292eb66c65d25a655
---
M src/systemc/tlm_bridge/TlmBridge.py
M src/systemc/tlm_bridge/gem5_to_tlm.cc
M src/systemc/tlm_bridge/gem5_to_tlm.hh
M src/systemc/tlm_bridge/tlm_to_gem5.cc
M src/systemc/tlm_bridge/tlm_to_gem5.hh
5 files changed, 165 insertions(+), 69 deletions(-)



diff --git a/src/systemc/tlm_bridge/TlmBridge.py  
b/src/systemc/tlm_bridge/TlmBridge.py

index d2dff86..dcc5452 100644
--- a/src/systemc/tlm_bridge/TlmBridge.py
+++ b/src/systemc/tlm_bridge/TlmBridge.py
@@ -29,9 +29,10 @@
 from m5.params import *
 from m5.proxy import *

-class Gem5ToTlmBridge(SystemC_ScModule):
-type = 'Gem5ToTlmBridge'
-cxx_class = 'sc_gem5::Gem5ToTlmBridge'
+class Gem5ToTlmBridgeBase(SystemC_ScModule):
+type = 'Gem5ToTlmBridgeBase'
+abstract = True
+cxx_class = 'sc_gem5::Gem5ToTlmBridgeBase'
 cxx_header = 'systemc/tlm_bridge/gem5_to_tlm.hh'

 system = Param.System(Parent.any, "system")
@@ -41,12 +42,39 @@
 addr_ranges = VectorParam.AddrRange([],
 'Addresses served by this port\'s TLM side')

-class TlmToGem5Bridge(SystemC_ScModule):
-type = 'TlmToGem5Bridge'
-cxx_class = 'sc_gem5::TlmToGem5Bridge'
+class TlmToGem5BridgeBase(SystemC_ScModule):
+type = 'TlmToGem5BridgeBase'
+abstract = True
+cxx_class = 'sc_gem5::TlmToGem5BridgeBase'
 cxx_header = 'systemc/tlm_bridge/tlm_to_gem5.hh'

 system = Param.System(Parent.any, "system")

 gem5 = MasterPort('gem5 master port')
 tlm = SlavePort('TLM target socket')
+
+
+class Gem5ToTlmBridge32(Gem5ToTlmBridgeBase):
+type = 'Gem5ToTlmBridge32'
+cxx_template_params = [ 'unsigned int BITWIDTH' ]
+cxx_class = 'sc_gem5::Gem5ToTlmBridge<32>'
+cxx_header = 'systemc/tlm_bridge/gem5_to_tlm.hh'
+
+class Gem5ToTlmBridge64(Gem5ToTlmBridgeBase):
+type = 'Gem5ToTlmBridge64'
+cxx_template_params = [ 'unsigned int BITWIDTH' ]
+cxx_class = 'sc_gem5::Gem5ToTlmBridge<64>'
+cxx_header = 'systemc/tlm_bridge/gem5_to_tlm.hh'
+
+
+class TlmToGem5Bridge32(TlmToGem5BridgeBase):
+type = 'TlmToGem5Bridge32'
+cxx_template_params = [ 'unsigned int BITWIDTH' ]
+cxx_class = 'sc_gem5::TlmToGem5Bridge<32>'
+cxx_header = 'systemc/tlm_bridge/tlm_to_gem5.hh'
+
+class TlmToGem5Bridge64(TlmToGem5BridgeBase):
+type = 'TlmToGem5Bridge64'
+cxx_template_params = [ 'unsigned int BITWIDTH' ]
+cxx_class = 'sc_gem5::TlmToGem5Bridge<64>'
+cxx_header = 'systemc/tlm_bridge/tlm_to_gem5.hh'
diff --git a/src/systemc/tlm_bridge/gem5_to_tlm.cc  
b/src/systemc/tlm_bridge/gem5_to_tlm.cc

index 4f1f6e4..54cf1a3 100644
--- a/src/systemc/tlm_bridge/gem5_to_tlm.cc
+++ b/src/systemc/tlm_bridge/gem5_to_tlm.cc
@@ -63,6 +63,8 @@

 #include "systemc/tlm_bridge/gem5_to_tlm.hh"

+#include "params/Gem5ToTlmBridge32.hh"
+#include "params/Gem5ToTlmBridge64.hh"
 #include "sim/system.hh"
 #include "systemc/tlm_bridge/sc_ext.hh"
 #include "systemc/tlm_bridge/sc_mm.hh"
@@ -106,8 +108,10 @@
 }
 }

+template 
 void
-Gem5ToTlmBridge::pec(Gem5SystemC::PayloadEvent *pe,
+Gem5ToTlmBridge::pec(
+Gem5SystemC::PayloadEvent> *pe,
 tlm::tlm_generic_payload &trans, const tlm::tlm_phase &phase)
 {
 sc_core::sc_time delay;
@@ -163,8 +167,9 @@
 }

 // Similar to TLM's blocking transport (LT)
+template 
 Tick
-Gem5ToTlmBridge::recvAtomic(PacketPtr packet)
+Gem5ToTlmBridge::recvAtomic(PacketPtr packet)
 {
 panic_if(packet->cacheResponding(),
  "Should not see packets where cache is responding");
@@ -205,8 +210,9 @@
 return delay.value();
 }

+template 
 void
-Gem5ToTlmBridge::recvFunctionalSnoop(PacketPtr packet)
+Gem5ToTlmBridge::recvFunctionalSnoop(PacketPtr packet)
 {
 // Snooping should be implemented with tlm_dbg_transport.
 SC_REPORT_FATAL("Gem5ToTlmBridge",
@@ -214,8 +220,9 @@
 }

 // Similar to TLM's non-blocking transport (AT).
+template 
 bool
-Gem5ToTlmBridge::recvTimingReq(PacketPtr packet)
+Gem5ToTlmBridge::recvTimingReq(PacketPtr packet)
 {
 panic_if(packet->cacheResponding(),
  "Should not see packets where cache is responding");
@@ -309,8 +316,9 @@
 return true;
 }

+template 
 bool
-Gem5ToTlmBridge::recvTimingSnoopResp(PacketPtr packet)
+Gem5ToTlmBridge::recvTimingSnoopResp(PacketPtr packet)
 {
 // Snooping should be implemented with tlm_dbg_transport.
 SC_REPORT_FATAL("Gem5ToTlmBridge",
@@ -318,14 +326,16 @@
 return false;
 }

+template 
 bool
-Gem5ToTlmBridge::tryTiming(PacketPtr packet)
+Gem5ToTlmBridge::tryTiming(PacketPtr packet)
 {
 panic("tryTiming(PacketPtr) isn't implement

[gem5-dev] Change in gem5/gem5[master]: systemc: Provide a utility Port TLM socket wrapper class.

2019-03-14 Thread Gabe Black (Gerrit)
Gabe Black has uploaded this change for review. (  
https://gem5-review.googlesource.com/c/public/gem5/+/17230



Change subject: systemc: Provide a utility Port TLM socket wrapper class.
..

systemc: Provide a utility Port TLM socket wrapper class.

This class should make it easy to attach TLM sockets into the gem5
python Port config mechanism.

Change-Id: I3548c654d56bfc852f3fc98fe6433163b14f7fe3
---
A src/systemc/tlm_port_wrapper.hh
1 file changed, 124 insertions(+), 0 deletions(-)



diff --git a/src/systemc/tlm_port_wrapper.hh  
b/src/systemc/tlm_port_wrapper.hh

new file mode 100644
index 000..0553a18
--- /dev/null
+++ b/src/systemc/tlm_port_wrapper.hh
@@ -0,0 +1,124 @@
+/*
+ * Copyright 2018 Google, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Authors: Gabe Black
+ */
+
+#ifndef __SYSTEMC_TLM_PORT_WRAPPER_HH__
+#define __SYSTEMC_TLM_PORT_WRAPPER_HH__
+
+#include "base/logging.hh"
+#include "sim/port.hh"
+#include "systemc/ext/tlm_core/2/sockets/sockets.hh"
+
+namespace sc_gem5
+{
+
+template 
+class TlmInitiatorWrapper;
+
+template 
+class TlmTargetWrapper;
+
+template 
+class TlmInitiatorWrapper : public ::Port
+{
+  public:
+typedef tlm::tlm_base_initiator_socket,
+tlm::tlm_bw_transport_if, N, POL>
+InitiatorSocket;
+typedef typename InitiatorSocket::base_target_socket_type TargetSocket;
+typedef TlmTargetWrapper TargetWrapper;
+
+InitiatorSocket &initiator() { return _initiator; }
+
+TlmInitiatorWrapper(
+InitiatorSocket &i, const std::string &_name, PortID _id) :
+Port(_name, _id), _initiator(i)
+{}
+
+void
+bind(::Port &peer) override
+{
+auto *target = dynamic_cast(&peer);
+fatal_if(!target, "Attempt to bind TLM initiator socket %s to "
+"incompatible port %s.", name(), peer.name());
+
+initiator().bind(target->target());
+}
+
+void
+unbind() override
+{
+panic("TLM sockets can't be unbound.");
+}
+
+  private:
+InitiatorSocket &_initiator;
+};
+
+template 
+class TlmTargetWrapper : public ::Port
+{
+  public:
+typedef tlm::tlm_base_target_socket,
+tlm::tlm_bw_transport_if, N, POL>
+TargetSocket;
+
+TargetSocket &target() { return _target; }
+
+TlmTargetWrapper(TargetSocket &t, const std::string &_name, PortID  
_id) :

+Port(_name, _id), _target(t)
+{}
+
+void
+bind(::Port &peer) override
+{
+// Ignore attempts to bind a target socket. The initiator will
+// handle it.
+}
+
+void
+unbind() override
+{
+panic("TLM sockets can't be unbound.");
+}
+
+  private:
+TargetSocket &_target;
+};
+
+} // namespace sc_gem5
+
+#endif  //__SYSTEMC_TLM_PORT_WRAPPER_HH__

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/17230
To unsubscribe, or for help writing mail filters, visit  
https://gem5-review.googlesource.com/settings


Gerrit-Project: public/gem5
Gerrit-Branch: master
Gerrit-Change-Id: I3548c654d56bfc852f3fc98fe6433163b14f7fe3
Gerrit-Change-Number: 17230
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black 
Gerrit-MessageType: newchange
___
gem5-dev mailing list
gem5-dev@gem5.org
http://m5sim.org/mailman/listinfo/gem5-dev

[gem5-dev] Change in gem5/gem5[master]: systemc: Create unified gem5/TLM bridge SimObjects.

2019-03-14 Thread Gabe Black (Gerrit)
Gabe Black has uploaded this change for review. (  
https://gem5-review.googlesource.com/c/public/gem5/+/17232



Change subject: systemc: Create unified gem5/TLM bridge SimObjects.
..

systemc: Create unified gem5/TLM bridge SimObjects.

These objects expose a standard TLM initiator or target socket with
width 64, and a gem5 slave or master port. What goes in one type of
port comes out the other with the appropriate conversion applied.

Change-Id: I65e07f746d46d3db0197968b78fffc5ddaede9bf
---
M src/systemc/tlm_bridge/SConscript
A src/systemc/tlm_bridge/TlmBridge.py
A src/systemc/tlm_bridge/gem5_to_tlm.cc
A src/systemc/tlm_bridge/gem5_to_tlm.hh
A src/systemc/tlm_bridge/tlm_to_gem5.cc
A src/systemc/tlm_bridge/tlm_to_gem5.hh
6 files changed, 1,277 insertions(+), 0 deletions(-)



diff --git a/src/systemc/tlm_bridge/SConscript  
b/src/systemc/tlm_bridge/SConscript

index 6d91436..df56fdf 100644
--- a/src/systemc/tlm_bridge/SConscript
+++ b/src/systemc/tlm_bridge/SConscript
@@ -30,6 +30,11 @@
 if not env['USE_SYSTEMC']:
 Return()

+SimObject('TlmBridge.py')
+
+Source('gem5_to_tlm.cc')
+Source('tlm_to_gem5.cc')
+
 Source('master_transactor.cc')
 Source('sc_ext.cc')
 Source('sc_master_port.cc')
diff --git a/src/systemc/tlm_bridge/TlmBridge.py  
b/src/systemc/tlm_bridge/TlmBridge.py

new file mode 100644
index 000..d2dff86
--- /dev/null
+++ b/src/systemc/tlm_bridge/TlmBridge.py
@@ -0,0 +1,52 @@
+# Copyright 2019 Google, Inc.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met: redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer;
+# redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution;
+# neither the name of the copyright holders nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# Authors: Gabe Black
+
+from m5.objects.SystemC import SystemC_ScModule
+from m5.params import *
+from m5.proxy import *
+
+class Gem5ToTlmBridge(SystemC_ScModule):
+type = 'Gem5ToTlmBridge'
+cxx_class = 'sc_gem5::Gem5ToTlmBridge'
+cxx_header = 'systemc/tlm_bridge/gem5_to_tlm.hh'
+
+system = Param.System(Parent.any, "system")
+
+gem5 = SlavePort('gem5 slave port')
+tlm = MasterPort('TLM initiator socket')
+addr_ranges = VectorParam.AddrRange([],
+'Addresses served by this port\'s TLM side')
+
+class TlmToGem5Bridge(SystemC_ScModule):
+type = 'TlmToGem5Bridge'
+cxx_class = 'sc_gem5::TlmToGem5Bridge'
+cxx_header = 'systemc/tlm_bridge/tlm_to_gem5.hh'
+
+system = Param.System(Parent.any, "system")
+
+gem5 = MasterPort('gem5 master port')
+tlm = SlavePort('TLM target socket')
diff --git a/src/systemc/tlm_bridge/gem5_to_tlm.cc  
b/src/systemc/tlm_bridge/gem5_to_tlm.cc

new file mode 100644
index 000..4f1f6e4
--- /dev/null
+++ b/src/systemc/tlm_bridge/gem5_to_tlm.cc
@@ -0,0 +1,419 @@
+/*
+ * Copyright 2019 Google, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERC

[gem5-dev] Change in gem5/gem5[master]: python: Improve how templated SimObject classes are handled.

2019-03-14 Thread Gabe Black (Gerrit)
Gabe Black has uploaded this change for review. (  
https://gem5-review.googlesource.com/c/public/gem5/+/17228



Change subject: python: Improve how templated SimObject classes are handled.
..

python: Improve how templated SimObject classes are handled.

When setting up a SimObject's Param structure, gem5 will autogenerate
a header file which attempts to declare the SimObject's C++ type. It
has had at least some level of sophistication there where it would
pull off the namespaces ahead of the class name and handle them
properly, but it didn't know how to handle templates.

This change improves that handling in two ways. First, it adds a new
magical SimObject attribute called 'cxx_template_params' which is used
to specify what the template parameters are as a list. For instance, if
your SimObject was a template which took an integer constant as its
first parameter and a type as its second, this attribute could look
like the following:

cxx_template_params = [ 'int FOO', 'class Bar' ]

Importantly, if there are any default values for these template
parameters, they should *not* be included here, they should be
specified where the class is later defined.

The second new mechanism is to add an internal CxxClass in the
SimObject.cxx_param_decl method. This class accepts the class signature
in the cxx_class attribute and the cxx_template_params and does two
things. First, it strips off namespaces like in the old implementation.
Second, it extracts and processes any template arguments attached to
the class. If these are constants (as determined by the contents of
cxx_template_params), then they are stored verbatim. If they're types,
then they're recursively expanded into a CxxClass and stored that way.
Note that these are the *values* of the template arguments, where as
cxx_template_params lists the *types* and *names* of those arguments.
In our earlier example, if cxx_class was:

cxx_class = 'CoolClasses::ClassName<12, Fruit::Apple>'

Then CxxClass would extract the namespace 'CoolClasses', the class
name 'ClassName', the argument '12', and the argument 'Fruit::Apple'.
That second argument would be expanded into a CxxClass with the
namespace 'Fruit' and the class name 'Apple'.

Importantly here, because there were no default arguments given in
cxx_template_params, all "hidden" arguments which would fall through
to their defaults need to be fully specified in cxx_class.

The CxxClass has a method called declare() which uses the information
extracted earlier to output all of the "stuff" necessary for declaring
the given class, including opening any containing namespaces and
putting template<...> ahead of the actual class declaration with the
template parameters specified.

If any of the template arguments are themselves CxxClass instances,
then they'll be recursively declared immediately before the current
class is.

An alternative solution to this problem might be to include the header
file which actually defines the cxx_class type to avoid having to
come up with a declaration. Unfortunately this doesn't work since it
can set up include loops where the SimObject C++ header file includes
the param header to get access to the Param type, but that includes
the C++ header to get access to the SimObject type.

This also makes it harder for SimObjects to refer to each other, since
they rely on the declaration in the params header files when declaring
a member pointer to that type in their own Param structures.

Change-Id: I68cfc36ddff6d789eb4cdef5178c4619ac2cc8b1
---
M src/python/m5/SimObject.py
1 file changed, 71 insertions(+), 7 deletions(-)



diff --git a/src/python/m5/SimObject.py b/src/python/m5/SimObject.py
index 7f19c07..9489a40 100644
--- a/src/python/m5/SimObject.py
+++ b/src/python/m5/SimObject.py
@@ -415,6 +415,7 @@
 'cxx_extra_bases' : list,
 'cxx_exports' : list,
 'cxx_param_exports' : list,
+'cxx_template_params' : list,
 }
 # Attributes that can be set any time
 keywords = { 'check' : FunctionType }
@@ -454,6 +455,8 @@
 value_dict['cxx_exports'] += cxx_exports
 if 'cxx_param_exports' not in value_dict:
 value_dict['cxx_param_exports'] = []
+if 'cxx_template_params' not in value_dict:
+value_dict['cxx_template_params'] = []
 cls_dict['_value_dict'] = value_dict
 cls = super(MetaSimObject, mcls).__new__(mcls, name, bases,  
cls_dict)

 if 'type' in value_dict:
@@ -790,7 +793,70 @@
 print(params)
 raise

-class_path = cls._value_dict['cxx_class'].split('::')
+class CxxClass(object):
+def __init__(self, sig, template_params=[]):
+# Split the signature into its constituent parts. This  
could

+# potentially be done with regular expressions, but
+# it's simple enough to pick appart a class signature
+# manua

[gem5-dev] Change in gem5/gem5[master]: python: Switch to the new getPort mechanism to connect ports.

2019-03-14 Thread Gabe Black (Gerrit)

Hello Jason Lowe-Power, Nikos Nikoleris, Weiping Liao,

I'd like you to reexamine a change. Please visit

https://gem5-review.googlesource.com/c/public/gem5/+/17039

to look at the new patch set (#2).

Change subject: python: Switch to the new getPort mechanism to connect  
ports.

..

python: Switch to the new getPort mechanism to connect ports.

This retrieves ports using the getPort method, and connects them using
the bind method on the ports themselves. Any smarts as far as what type
of peers are allowed to connect or how they connect is left up to the
individual bind methods.

Change-Id: Ic640d1fce8af1bed46e5830edc4a8a0f9d66
---
M src/python/m5/params.py
1 file changed, 3 insertions(+), 21 deletions(-)


--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/17039
To unsubscribe, or for help writing mail filters, visit  
https://gem5-review.googlesource.com/settings


Gerrit-Project: public/gem5
Gerrit-Branch: master
Gerrit-Change-Id: Ic640d1fce8af1bed46e5830edc4a8a0f9d66
Gerrit-Change-Number: 17039
Gerrit-PatchSet: 2
Gerrit-Owner: Gabe Black 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Jason Lowe-Power 
Gerrit-Reviewer: Nikos Nikoleris 
Gerrit-Reviewer: Weiping Liao 
Gerrit-MessageType: newpatchset
___
gem5-dev mailing list
gem5-dev@gem5.org
http://m5sim.org/mailman/listinfo/gem5-dev

[gem5-dev] Change in gem5/gem5[master]: tlm: Initial import of tlm/gem5 bridge code.

2019-03-14 Thread Gabe Black (Gerrit)
Gabe Black has uploaded this change for review. (  
https://gem5-review.googlesource.com/c/public/gem5/+/17231



Change subject: tlm: Initial import of tlm/gem5 bridge code.
..

tlm: Initial import of tlm/gem5 bridge code.

This is a slightly mangled version of the existing bridge code in
util/tlm/src/. The changes fix some small style issues, change to gem5
specific include paths, and removes the Gem5SimControl code. That code
coordinates gem5 with the external systemc kernel, and in this usage
there's no external kernel.

The code imported here compiles, but it isn't yet expected to work.

Change-Id: I9c593a52e2554534720d21cd31a03e543ad897ad
---
A src/systemc/tlm_bridge/SConscript
A src/systemc/tlm_bridge/master_transactor.cc
A src/systemc/tlm_bridge/master_transactor.hh
A src/systemc/tlm_bridge/sc_ext.cc
A src/systemc/tlm_bridge/sc_ext.hh
A src/systemc/tlm_bridge/sc_master_port.cc
A src/systemc/tlm_bridge/sc_master_port.hh
A src/systemc/tlm_bridge/sc_mm.cc
A src/systemc/tlm_bridge/sc_mm.hh
A src/systemc/tlm_bridge/sc_peq.hh
A src/systemc/tlm_bridge/sc_slave_port.cc
A src/systemc/tlm_bridge/sc_slave_port.hh
A src/systemc/tlm_bridge/sim_control_if.hh
A src/systemc/tlm_bridge/slave_transactor.cc
A src/systemc/tlm_bridge/slave_transactor.hh
15 files changed, 1,878 insertions(+), 0 deletions(-)



diff --git a/src/systemc/tlm_bridge/SConscript  
b/src/systemc/tlm_bridge/SConscript

new file mode 100644
index 000..6d91436
--- /dev/null
+++ b/src/systemc/tlm_bridge/SConscript
@@ -0,0 +1,38 @@
+# Copyright 2018 Google, Inc.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met: redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer;
+# redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution;
+# neither the name of the copyright holders nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# Authors: Gabe Black
+
+Import('*')
+
+if not env['USE_SYSTEMC']:
+Return()
+
+Source('master_transactor.cc')
+Source('sc_ext.cc')
+Source('sc_master_port.cc')
+Source('sc_mm.cc')
+Source('sc_slave_port.cc')
+Source('slave_transactor.cc')
diff --git a/src/systemc/tlm_bridge/master_transactor.cc  
b/src/systemc/tlm_bridge/master_transactor.cc

new file mode 100644
index 000..58651b0
--- /dev/null
+++ b/src/systemc/tlm_bridge/master_transactor.cc
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2016, Dresden University of Technology (TU Dresden)
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright  
notice,

+ *this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *notice, this list of conditions and the following disclaimer in the
+ *documentation and/or other materials provided with the distribution.
+ *
+ * 3. Neither the name of the copyright holder nor the names of its
+ *contributors may be used to endorse or promote products derived from
+ *this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  
LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A  
PARTICULAR

+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER C

Re: [gem5-dev] Port configuration overhaul

2019-03-14 Thread Gabe Black
Great, I'm glad you're in favor of this. I have a new, hopefully more final
batch of patches incoming soon which also include application of the new
mechanism to TLM sockets.

Gabe

On Thu, Mar 14, 2019 at 2:47 AM Andreas Sandberg 
wrote:

> Hi Everyone,
>
> I remember talking to Andreas H about this many years ago. If I remember
> correctly, the main reason the patch wasn't committed at the time was
> performance related. IIRC, the patch series had a ~10%-20% performance
> hit. I suspect it the patch Jason pointed to isn't the main reason for
> any performance issues though, it's more likely one of the subsequent
> patches that added TLM-like 4-phase handshakes.
>
> I'm very much in favour of sorting out the ports vs protocol issue once
> and for all. A generic port interface would be extremely useful for
> interrupt routing which is currently very ad-hoc.
>
> Cheers,
> Andreas
>
> On 07/03/2019 19:42, Steve Reinhardt wrote:
> > Thanks for digging this up, Jason.  I knew this issue had been addressed
> > multiple times before (I think I even had a patch at one point that was a
> > smaller change, but held it off in favor of Andreas's version).  I don't
> > know why Andreas's change was never committed either.
> >
> > Anyway, it will be good to see this cleaned up, regardless of whether we
> go
> > with Andreas's code or Gabe's proposal or some hybrid.  I've been out of
> > the loop long enough that I don't have a specific preference.
> >
> > Steve
> >
> >
> > On Thu, Mar 7, 2019 at 10:19 AM Jason Lowe-Power 
> > wrote:
> >
> >> Hey Gabe,
> >>
> >> I was digging through the old reviewboard and found this patch that also
> >> re-did this interface: http://reviews.gem5.org/r/1301
> >>
> >> I'm not sure why this was never committed.
> >>
> >> I believe Andreas H's goal was to enable TLM-2 interfaces with the gem5,
> >> IIRC.
> >>
> >> Just something to consider.
> >>
> >> Cheers,
> >> Jason
> >>
> >> On Thu, Mar 7, 2019 at 7:00 AM Gabe Black  wrote:
> >>
> >>> Hey folks, specifically folks looking at this doc. I have a series of
> >>> patches which largely implement what I was going for, although it
> turned
> >>> out differently than what I have in my doc. I'll update the doc
> soon(ish)
> >>> to describe the current version. Go ahead and review the CLs if you
> want,
> >>> although I should probably run another test or two on them and the
> >>> discussion of the design is still open over on the doc.
> >>>
> >>>
> >>>
> >>
> https://gem5-review.googlesource.com/q/topic:%22tlm%22+(status:open%20OR%20status:merged)
> >>> Gabe
> >>>
> >>> On Wed, Mar 6, 2019 at 12:20 AM Gabe Black 
> wrote:
> >>>
>  Hi folks. I've been looking at how to configure TLM sockets through
> >>> gem5's
>  port configuration mechanism and how gem5's port configuration
> >> mechanism
>  works in general, and I think I've mostly come up with a plan. I've
> >>> written
>  everything up in a doc over here:
> 
> 
> 
> >>
> https://docs.google.com/document/d/17eXkE9YtzvYXEgkHFNR1my_xYKl3mYNNtXM9pIAX-t0/edit?usp=sharing
>  Please take a look if you have a chance, and please comment on the doc
> >> if
>  you have any questions, concerns, etc.
> 
>  I created the doc on my personal account but wrote it from my work
> >>> account
>  so it *should* be accessible and commentable by anyone with the link.
>  Please let me know if that's not the case.
> 
>  Gabe
> 
> >>> ___
> >>> gem5-dev mailing list
> >>> gem5-dev@gem5.org
> >>> http://m5sim.org/mailman/listinfo/gem5-dev
> >> ___
> >> gem5-dev mailing list
> >> gem5-dev@gem5.org
> >> http://m5sim.org/mailman/listinfo/gem5-dev
> > ___
> > gem5-dev mailing list
> > gem5-dev@gem5.org
> > http://m5sim.org/mailman/listinfo/gem5-dev
> IMPORTANT NOTICE: The contents of this email and any attachments are
> confidential and may also be privileged. If you are not the intended
> recipient, please notify the sender immediately and do not disclose the
> contents to any other person, use it for any purpose, or store or copy the
> information in any medium. Thank you.
> ___
> gem5-dev mailing list
> gem5-dev@gem5.org
> http://m5sim.org/mailman/listinfo/gem5-dev
___
gem5-dev mailing list
gem5-dev@gem5.org
http://m5sim.org/mailman/listinfo/gem5-dev

[gem5-dev] ToT build failures for ARM

2019-03-14 Thread Gabe Black
These look like issues exposed by compiler version and that (if that's what
they are) have known fixes. They should be easy to fix, but I'm going to
bed. If they haven't been fixed in the near future I'll send some patches.

Representative compiler errors below.

Gabe


In file included from
build/ARM/arch/arm/generated/generic_cpu_exec_6.cc:10:0:
build/ARM/arch/arm/generated/exec-ns.cc.inc: In member function 'Fault
ArmISAInst::SvePredBic<_Element>::execute(ExecContext*, Trace::InstRecord*)
const':
build/ARM/arch/arm/generated/exec-ns.cc.inc:220568:40: error: '~' on an
expression of type bool [-Werror=bool-operation]
destElem = srcElem1 & ~srcElem2;
   ^~~~
build/ARM/arch/arm/generated/exec-ns.cc.inc:220568:40: note: did you mean
to use logical not ('!')?
build/ARM/arch/arm/generated/exec-ns.cc.inc: In member function 'Fault
ArmISAInst::SvePredBics<_Element>::execute(ExecContext*,
Trace::InstRecord*) const':
build/ARM/arch/arm/generated/exec-ns.cc.inc:220634:40: error: '~' on an
expression of type bool [-Werror=bool-operation]
destElem = srcElem1 & ~srcElem2;
   ^~~~

In file included from build/ARM/arch/arm/generated/inst-constrs-3.cc:9:0:
build/ARM/arch/arm/generated/decoder-ns.cc.inc: In function 'StaticInstPtr
ArmISAInst::Aarch64::decodeSveInt(ArmISA::ExtMachInst)':
build/ARM/arch/arm/generated/decoder-ns.cc.inc:73599:17: error: this
statement may fall through [-Werror=implicit-fallthrough=]
}
^
build/ARM/arch/arm/generated/decoder-ns.cc.inc:73601:11: note: here
  case 0x1:
  ^~~~
build/ARM/arch/arm/generated/decoder-ns.cc.inc:73637:17: error: this
statement may fall through [-Werror=implicit-fallthrough=]
}
^
build/ARM/arch/arm/generated/decoder-ns.cc.inc:73639:11: note: here
  case 0x2:
  ^~~~
___
gem5-dev mailing list
gem5-dev@gem5.org
http://m5sim.org/mailman/listinfo/gem5-dev

[gem5-dev] Change in gem5/gem5[master]: python: Fix unknown params and proxy multiplication

2019-03-14 Thread Daniel Carvalho (Gerrit)
Daniel Carvalho has submitted this change and it was merged. (  
https://gem5-review.googlesource.com/c/public/gem5/+/17048 )


Change subject: python: Fix unknown params and proxy multiplication
..

python: Fix unknown params and proxy multiplication

One of the recent changes made params not visible anymore:
NameError: global name 'params' is not defined
This is fixed by adding the proper import statement.

However, the second error makes the multiplication values be assigned
to other proxies (that are not even used on the multiplication). A
workaround is added to prevent this from happening by extending "*=".

Change-Id: I3ad276a456efff62058672d16caac2b3ad1b326b
Signed-off-by: Daniel R. Carvalho 
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/17048
Reviewed-by: Andreas Sandberg 
Reviewed-by: Jason Lowe-Power 
Reviewed-by: Nikos Nikoleris 
Maintainer: Andreas Sandberg 
---
M src/python/m5/proxy.py
1 file changed, 2 insertions(+), 1 deletion(-)

Approvals:
  Jason Lowe-Power: Looks good to me, approved
  Andreas Sandberg: Looks good to me, approved; Looks good to me, approved
  Nikos Nikoleris: Looks good to me, approved



diff --git a/src/python/m5/proxy.py b/src/python/m5/proxy.py
index d289545..8632196 100644
--- a/src/python/m5/proxy.py
+++ b/src/python/m5/proxy.py
@@ -87,6 +87,7 @@
 __rmul__ = __mul__

 def _mulcheck(self, result, base):
+from . import params
 for multiplier in self._multipliers:
 if isproxy(multiplier):
 multiplier = multiplier.unproxy(base)
@@ -96,7 +97,7 @@
 raise TypeError(
 "Proxy multiplier must be a numerical param")
 multiplier = multiplier.getValue()
-result *= multiplier
+result = result * multiplier
 return result

 def unproxy(self, base):

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/17048
To unsubscribe, or for help writing mail filters, visit  
https://gem5-review.googlesource.com/settings


Gerrit-Project: public/gem5
Gerrit-Branch: master
Gerrit-Change-Id: I3ad276a456efff62058672d16caac2b3ad1b326b
Gerrit-Change-Number: 17048
Gerrit-PatchSet: 3
Gerrit-Owner: Daniel Carvalho 
Gerrit-Reviewer: Andreas Sandberg 
Gerrit-Reviewer: Daniel Carvalho 
Gerrit-Reviewer: Jason Lowe-Power 
Gerrit-Reviewer: Nikos Nikoleris 
Gerrit-MessageType: merged
___
gem5-dev mailing list
gem5-dev@gem5.org
http://m5sim.org/mailman/listinfo/gem5-dev

[gem5-dev] Change in gem5/gem5[master]: arch-arm, cpu: Add initial support for Arm SVE

2019-03-14 Thread Giacomo Gabrielli (Gerrit)
Giacomo Gabrielli has submitted this change and it was merged. (  
https://gem5-review.googlesource.com/c/public/gem5/+/13515 )


Change subject: arch-arm,cpu: Add initial support for Arm SVE
..

arch-arm,cpu: Add initial support for Arm SVE

This changeset adds initial support for the Arm Scalable Vector Extension
(SVE) by implementing:
- support for most data-processing instructions (no loads/stores yet);
- basic system-level support.

Additional authors:
- Javier Setoain 
- Gabor Dozsa 
- Giacomo Travaglini 

Thanks to Pau Cabre for his contribution of bugfixes.

Change-Id: I1808b5ff55b401777eeb9b99c9a1129e0d527709
Signed-off-by: Giacomo Gabrielli 
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/13515
Reviewed-by: Andreas Sandberg 
Maintainer: Andreas Sandberg 
---
M src/arch/arm/ArmISA.py
M src/arch/arm/ArmSystem.py
M src/arch/arm/SConscript
M src/arch/arm/decoder.cc
M src/arch/arm/decoder.hh
M src/arch/arm/insts/static_inst.cc
M src/arch/arm/insts/static_inst.hh
A src/arch/arm/insts/sve.cc
A src/arch/arm/insts/sve.hh
M src/arch/arm/isa.cc
M src/arch/arm/isa.hh
M src/arch/arm/isa/formats/aarch64.isa
M src/arch/arm/isa/formats/formats.isa
A src/arch/arm/isa/formats/sve_2nd_level.isa
A src/arch/arm/isa/formats/sve_top_level.isa
M src/arch/arm/isa/includes.isa
M src/arch/arm/isa/insts/fp64.isa
M src/arch/arm/isa/insts/insts.isa
M src/arch/arm/isa/insts/ldr64.isa
M src/arch/arm/isa/insts/mem.isa
M src/arch/arm/isa/insts/neon64.isa
M src/arch/arm/isa/insts/neon64_mem.isa
A src/arch/arm/isa/insts/sve.isa
M src/arch/arm/isa/operands.isa
A src/arch/arm/isa/templates/sve.isa
M src/arch/arm/isa/templates/templates.isa
M src/arch/arm/miscregs.cc
M src/arch/arm/miscregs.hh
M src/arch/arm/miscregs_types.hh
M src/arch/arm/nativetrace.cc
M src/arch/arm/process.cc
M src/arch/arm/registers.hh
M src/arch/arm/system.cc
M src/arch/arm/system.hh
M src/arch/arm/types.hh
M src/arch/arm/utility.cc
M src/arch/arm/utility.hh
M src/arch/generic/vec_reg.hh
M src/cpu/FuncUnit.py
M src/cpu/exetrace.cc
M src/cpu/minor/MinorCPU.py
M src/cpu/o3/FUPool.py
M src/cpu/o3/FuncUnitConfig.py
M src/cpu/op_class.hh
M src/cpu/simple_thread.cc
A util/cpt_upgraders/arm-sve.py
46 files changed, 11,605 insertions(+), 61 deletions(-)

Approvals:
  Andreas Sandberg: Looks good to me, approved; Looks good to me, approved




--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/13515
To unsubscribe, or for help writing mail filters, visit  
https://gem5-review.googlesource.com/settings


Gerrit-Project: public/gem5
Gerrit-Branch: master
Gerrit-Change-Id: I1808b5ff55b401777eeb9b99c9a1129e0d527709
Gerrit-Change-Number: 13515
Gerrit-PatchSet: 18
Gerrit-Owner: Giacomo Gabrielli 
Gerrit-Reviewer: Andreas Sandberg 
Gerrit-Reviewer: Anthony Gutierrez 
Gerrit-Reviewer: Giacomo Gabrielli 
Gerrit-Reviewer: Giacomo Travaglini 
Gerrit-Reviewer: Jason Lowe-Power 
Gerrit-CC: Daniel Carvalho 
Gerrit-MessageType: merged
___
gem5-dev mailing list
gem5-dev@gem5.org
http://m5sim.org/mailman/listinfo/gem5-dev

Re: [gem5-dev] Port configuration overhaul

2019-03-14 Thread Andreas Sandberg
Hi Everyone,

I remember talking to Andreas H about this many years ago. If I remember
correctly, the main reason the patch wasn't committed at the time was
performance related. IIRC, the patch series had a ~10%-20% performance
hit. I suspect it the patch Jason pointed to isn't the main reason for
any performance issues though, it's more likely one of the subsequent
patches that added TLM-like 4-phase handshakes.

I'm very much in favour of sorting out the ports vs protocol issue once
and for all. A generic port interface would be extremely useful for
interrupt routing which is currently very ad-hoc.

Cheers,
Andreas

On 07/03/2019 19:42, Steve Reinhardt wrote:
> Thanks for digging this up, Jason.  I knew this issue had been addressed
> multiple times before (I think I even had a patch at one point that was a
> smaller change, but held it off in favor of Andreas's version).  I don't
> know why Andreas's change was never committed either.
>
> Anyway, it will be good to see this cleaned up, regardless of whether we go
> with Andreas's code or Gabe's proposal or some hybrid.  I've been out of
> the loop long enough that I don't have a specific preference.
>
> Steve
>
>
> On Thu, Mar 7, 2019 at 10:19 AM Jason Lowe-Power 
> wrote:
>
>> Hey Gabe,
>>
>> I was digging through the old reviewboard and found this patch that also
>> re-did this interface: http://reviews.gem5.org/r/1301
>>
>> I'm not sure why this was never committed.
>>
>> I believe Andreas H's goal was to enable TLM-2 interfaces with the gem5,
>> IIRC.
>>
>> Just something to consider.
>>
>> Cheers,
>> Jason
>>
>> On Thu, Mar 7, 2019 at 7:00 AM Gabe Black  wrote:
>>
>>> Hey folks, specifically folks looking at this doc. I have a series of
>>> patches which largely implement what I was going for, although it turned
>>> out differently than what I have in my doc. I'll update the doc soon(ish)
>>> to describe the current version. Go ahead and review the CLs if you want,
>>> although I should probably run another test or two on them and the
>>> discussion of the design is still open over on the doc.
>>>
>>>
>>>
>> https://gem5-review.googlesource.com/q/topic:%22tlm%22+(status:open%20OR%20status:merged)
>>> Gabe
>>>
>>> On Wed, Mar 6, 2019 at 12:20 AM Gabe Black  wrote:
>>>
 Hi folks. I've been looking at how to configure TLM sockets through
>>> gem5's
 port configuration mechanism and how gem5's port configuration
>> mechanism
 works in general, and I think I've mostly come up with a plan. I've
>>> written
 everything up in a doc over here:



>> https://docs.google.com/document/d/17eXkE9YtzvYXEgkHFNR1my_xYKl3mYNNtXM9pIAX-t0/edit?usp=sharing
 Please take a look if you have a chance, and please comment on the doc
>> if
 you have any questions, concerns, etc.

 I created the doc on my personal account but wrote it from my work
>>> account
 so it *should* be accessible and commentable by anyone with the link.
 Please let me know if that's not the case.

 Gabe

>>> ___
>>> gem5-dev mailing list
>>> gem5-dev@gem5.org
>>> http://m5sim.org/mailman/listinfo/gem5-dev
>> ___
>> gem5-dev mailing list
>> gem5-dev@gem5.org
>> http://m5sim.org/mailman/listinfo/gem5-dev
> ___
> gem5-dev mailing list
> gem5-dev@gem5.org
> http://m5sim.org/mailman/listinfo/gem5-dev
IMPORTANT NOTICE: The contents of this email and any attachments are 
confidential and may also be privileged. If you are not the intended recipient, 
please notify the sender immediately and do not disclose the contents to any 
other person, use it for any purpose, or store or copy the information in any 
medium. Thank you.
___
gem5-dev mailing list
gem5-dev@gem5.org
http://m5sim.org/mailman/listinfo/gem5-dev