[gem5-dev] Re: SimObject params() method

2020-10-23 Thread Gabe Black via gem5-dev
As I look at this more, I do see a few places where the params struct is
set aside for later legitimately. There aren't tons of them, but I think
it's muddy enough where I don't want to go in with a hack saw quite yet.

Gabe

On Thu, Oct 22, 2020 at 5:10 PM Gabe Black  wrote:

> Ok, I'll make Params typedefs and params() usage targets of opportunity.
>
> Gabe
>
> On Thu, Oct 22, 2020 at 8:26 AM Jason Lowe-Power via gem5-dev <
> gem5-dev@gem5.org> wrote:
>
>> Hey Gabe,
>>
>> Thanks for bringing this up. I have also been bothered by the lack of
>> consistency with how params are used. I can't think of an example of when
>> you need to store the params object. I would be all for getting rid of the
>> params() function and updating the documentation to say that it's best
>> practice to *not* save the params struct after the constructor. If some
>> object had a good reason to go against this best practice, that would be
>> OK, and we wouldn't need to enforce any specific design or pattern on these
>> exceptions. I would prefer to remove the params() function than add more
>> template magic.
>>
>> On Thu, Oct 22, 2020 at 1:18 AM Gabe Black via gem5-dev <
>> gem5-dev@gem5.org> wrote:
>>
>>> Hi folks. I'm looking at the SimObject header, and I see a few things in
>>> there which are marked as part of the API and maybe shouldn't be.
>>> Specifically I'm talking about the Params typedef, and the params() method.
>>> There is also the _params member variable which I can see being a part of
>>> the API since it can be used by other classes to make their own params()
>>> function (more on that below), but the Params typedef is more or less an
>>> implementation detail, and the params() method is essentially worthless
>>> because it returns a SimObjectParams which doesn't have anything except the
>>> object's name in it, and you can already get that with the name() method.
>>>
>>
>> I agree. I think the typedef is useless and shouldn't be in the API. It's
>> unfortunate that the API proposals didn't get more reviews. I think it's
>> probably OK to just drop that from the API, but the params() function
>> itself is going to need to be deprecated.
>>
>>
>>>
>>> *Params pattern*
>>>
>>> This gets to the whole Params params() pattern which is sporadically
>>> implemented in some SimObjects in gem5. This pattern is that a given
>>> SimObject subclass will define a Params typedef which corresponds to its
>>> Params struct type, and then also define a params() method which returns
>>> the _params from SimObject cast up to that type.
>>>
>>> The Params typedef itself primarily makes the definition of the
>>> constructor a little more legible, since the FullFooTypeForTheArmISAParams
>>> can be really verbose.
>>>
>>
>> I think verbose is fine. I would vote to abolish all params typedefs.
>>
>>
>>>
>>> Storing the params struct itself could theoretically serve the purpose
>>> of having a bunch of parameters and not having to create a member variable
>>> for each one, spend a bunch of text copying values over in the constructor,
>>> etc. I think most of the time this is unnecessary, but if an object has
>>> tons of values in it for some reason this could make sense.
>>>
>>
>> I don't think there are any examples of this in the codebase. I think in
>> all cases the params data is copied into member variables. If there are
>> cases where data isn't copied, I doubt it was with a strong reason in mind.
>> The one exception to this might be Ruby, but it's an exception for all the
>> wrong reasons ;).
>>
>>
>>>
>>> The params() method then makes the _params member available with the
>>> appropriate type, so that all the FooParams members are accessible. It also
>>> makes the params struct accessible outside the object which is used in a
>>> place or two to read parameters without there needing to be a member in the
>>> object, and probably some sort of accessor to read it.
>>>
>>> There are two main problems with this system. First, when used, it adds
>>> a small but not trivial amount of boilerplate to any given class. Second,
>>> it's very sporadically implemented. I think in a lot of places it's there
>>> just because people aren't sure what it's for or if they need it, so they
>>> just put one there regardless. I think I've done that in the past.
>>>
>>> *Alternative*
>>>
>>> The existence of the Params type and the params() method could be
>>> partially eliminated by defining a templated params() method which took a
>>> SimObject reference and/or pointer as its first parameter. It could then
>>> figure out what Params struct went with that SimObject type using
>>> typedef/template magic set up by the Params building code, and then perform
>>> the appropriate cast.
>>>
>>> This has three downsides, two minor and one more serious. The minor one
>>> is that when a class uses this method internally, it would have to do
>>> something like params(this) instead of just params(). That's a fairly minor
>>> difference and not that big a deal

[gem5-dev] Change in gem5/gem5[develop]: util: Fix an incorrect print statement in git pre-commit hook

2020-10-23 Thread Hoa Nguyen (Gerrit) via gem5-dev
Hoa Nguyen has uploaded this change for review. (  
https://gem5-review.googlesource.com/c/public/gem5/+/36516 )



Change subject: util: Fix an incorrect print statement in git pre-commit  
hook

..

util: Fix an incorrect print statement in git pre-commit hook

Change-Id: I13d0a705b6cfab654635380e2adbf36243344a62
Signed-off-by: Hoa Nguyen 
---
M util/git-pre-commit.py
1 file changed, 1 insertion(+), 1 deletion(-)



diff --git a/util/git-pre-commit.py b/util/git-pre-commit.py
index 7681b87..ece2467 100755
--- a/util/git-pre-commit.py
+++ b/util/git-pre-commit.py
@@ -114,6 +114,6 @@
 "fixes for commit in\n"
 "the following files: ", file=sys.stderr)
 for f in staged_mismatch:
-print("\t%s".format(f), file=sys.stderr)
+print("\t{}".format(f), file=sys.stderr)
 print("Please `git --add' them", file=sys.stderr)
 sys.exit(1)

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


Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: I13d0a705b6cfab654635380e2adbf36243344a62
Gerrit-Change-Number: 36516
Gerrit-PatchSet: 1
Gerrit-Owner: Hoa Nguyen 
Gerrit-MessageType: newchange
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s

[gem5-dev] Change in gem5/gem5[develop]: scons: Don't check for Python 2

2020-10-23 Thread Andreas Sandberg (Gerrit) via gem5-dev
Andreas Sandberg has uploaded this change for review. (  
https://gem5-review.googlesource.com/c/public/gem5/+/36535 )



Change subject: scons: Don't check for Python 2
..

scons: Don't check for Python 2

The build system will now refuse to build gem5 if Python 2.x is
detected. Remove Python 2 specific python-config variants from the
list of candidates we try.

Change-Id: Id59be4a2969ce180848e5df02afdfb4a5b8125c1
Signed-off-by: Andreas Sandberg 
---
M SConstruct
1 file changed, 1 insertion(+), 1 deletion(-)



diff --git a/SConstruct b/SConstruct
index 3b157f0..8005a98 100755
--- a/SConstruct
+++ b/SConstruct
@@ -238,7 +238,7 @@
 ('MARSHAL_CCFLAGS_EXTRA', 'Extra C and C++ marshal compiler  
flags', ''),

 ('MARSHAL_LDFLAGS_EXTRA', 'Extra marshal linker flags', ''),
 ('PYTHON_CONFIG', 'Python config binary to use',
-  
[ 'python3-config', 'python-config', 'python2.7-config', 'python2-config']

+ [ 'python3-config', 'python-config']
 ),
 ('PROTOC', 'protoc tool', environ.get('PROTOC', 'protoc')),
 ('BATCH', 'Use batch pool for build and tests', False),

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


Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: Id59be4a2969ce180848e5df02afdfb4a5b8125c1
Gerrit-Change-Number: 36535
Gerrit-PatchSet: 1
Gerrit-Owner: Andreas Sandberg 
Gerrit-MessageType: newchange
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s

[gem5-dev] Change in gem5/gem5[develop]: misc: Replace enable_if<>::type with enable_if_t<>.

2020-10-23 Thread Gabe Black (Gerrit) via gem5-dev
Gabe Black has submitted this change. (  
https://gem5-review.googlesource.com/c/public/gem5/+/36477 )


Change subject: misc: Replace enable_if<>::type with enable_if_t<>.
..

misc: Replace enable_if<>::type with enable_if_t<>.

This new abreviated form was added for C++14. Now that we're using that
version of the standard, we can move over to it.

Change-Id: Ia291d2b1e73e503c37593b1e1c4c1b3011abc63b
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/36477
Reviewed-by: Daniel Carvalho 
Maintainer: Gabe Black 
Tested-by: kokoro 
---
M src/arch/arm/aapcs32.hh
M src/arch/arm/aapcs64.hh
M src/arch/arm/freebsd/process.hh
M src/arch/arm/linux/process.hh
M src/arch/arm/process.hh
M src/arch/arm/semihosting.hh
M src/arch/gcn3/operand.hh
M src/arch/generic/vec_pred_reg.hh
M src/arch/generic/vec_reg.hh
M src/arch/sparc/process.hh
M src/arch/x86/linux/linux.hh
M src/arch/x86/linux/se_workload.hh
M src/base/circular_queue.hh
M src/base/coroutine.hh
M src/base/intmath.hh
M src/base/random.hh
M src/base/refcnt.hh
M src/base/statistics.hh
M src/base/str.hh
M src/sim/guest_abi.test.cc
M src/sim/guest_abi/dispatch.hh
M src/sim/guest_abi/layout.hh
M src/sim/proxy_ptr.hh
M src/sim/syscall_abi.hh
24 files changed, 161 insertions(+), 172 deletions(-)

Approvals:
  Daniel Carvalho: Looks good to me, approved
  Gabe Black: Looks good to me, approved
  kokoro: Regressions pass



diff --git a/src/arch/arm/aapcs32.hh b/src/arch/arm/aapcs32.hh
index 3cd2c50..a0f09b8 100644
--- a/src/arch/arm/aapcs32.hh
+++ b/src/arch/arm/aapcs32.hh
@@ -74,13 +74,13 @@
 struct IsAapcs32Composite : public std::false_type {};

 template 
-struct IsAapcs32Composite::value ||
  std::is_class::value ||
  std::is_union::value) &&
 // VarArgs is technically a composite type, but it's not a normal  
argument.

 !IsVarArgs::value
->::type> : public std::true_type
+>> : public std::true_type
 {};

 // Homogeneous Aggregates
@@ -130,9 +130,8 @@
  */

 template 
-struct Result-std::is_integral::value && (sizeof(Integer) <  
sizeof(uint32_t))

->::type>
+struct Result+std::is_integral::value && (sizeof(Integer) <  
sizeof(uint32_t))>>

 {
 static void
 store(ThreadContext *tc, const Integer &i)
@@ -144,9 +143,8 @@
 };

 template 
-struct Result-std::is_integral::value && (sizeof(Integer) ==  
sizeof(uint32_t))

->::type>
+struct Result+std::is_integral::value && (sizeof(Integer) ==  
sizeof(uint32_t))>>

 {
 static void
 store(ThreadContext *tc, const Integer &i)
@@ -156,9 +154,8 @@
 };

 template 
-struct Result-std::is_integral::value && (sizeof(Integer) ==  
sizeof(uint64_t))

->::type>
+struct Result+std::is_integral::value && (sizeof(Integer) ==  
sizeof(uint64_t))>>

 {
 static void
 store(ThreadContext *tc, const Integer &i)
@@ -176,9 +173,9 @@
 };

 template 
-struct Argument std::is_integral::value && (sizeof(Integer) <=  
sizeof(uint32_t))

->::type> : public Aapcs32ArgumentBase
+>> : public Aapcs32ArgumentBase
 {
 static Integer
 get(ThreadContext *tc, Aapcs32::State &state)
@@ -195,9 +192,9 @@
 };

 template 
-struct Argument std::is_integral::value && (sizeof(Integer) >  
sizeof(uint32_t))

->::type> : public Aapcs32ArgumentBase
+>> : public Aapcs32ArgumentBase
 {
 static Integer
 get(ThreadContext *tc, Aapcs32::State &state)
@@ -236,8 +233,8 @@
  */

 template 
-struct Result::value>::type>
+struct Result::value>>
 {
 static void
 store(ThreadContext *tc, const Float &f, Aapcs32::State &state)
@@ -248,8 +245,8 @@
 };

 template 
-struct Argument-std::is_floating_point::value>::type> : public  
Aapcs32ArgumentBase

+struct Argument::value>> : public Aapcs32ArgumentBase
 {
 static Float
 get(ThreadContext *tc, Aapcs32::State &state)
@@ -270,8 +267,8 @@
  */

 template 
-struct Result::value>::type>
+struct Result::value>>
 {
 static void
 store(ThreadContext *tc, const Composite &composite,
@@ -298,8 +295,8 @@
 };

 template 
-struct Argument::value>::type> :
+struct Argument::value>> :
 public Aapcs32ArgumentBase
 {
 static Composite
@@ -444,13 +441,13 @@
  */

 template 
-struct Result-std::is_integral::value>::type> : public ResultInteger>

+struct Result::value>> : public Result
 {};

 template 
-struct Argument::value>::type> :
+struct Argument::value>> :
 public Argument
 {};

@@ -460,8 +457,8 @@
  */

 template 
-struct Result::value>::type>
+struct Result::value>>
 {
 static void
 store(ThreadContext *tc, const Float &f, Aapcs32Vfp::State &state)
@@ -479,8 +476,8 @@
 };

 template 
-struct Argument-std::is_floating_point::value>::type> : public  
Aapcs32ArgumentBase

+struct Argument::value>> : public Aapcs32ArgumentBase
 {
 static Float
 get(ThreadContext *tc, Aapcs32Vfp::State &state)
@@ -510,16 +507,16 @@
  */

 template 
-struct Result::value &&
-!IsAapcs32Homogeneous

[gem5-dev] Change in gem5/gem5[develop]: scons: Don't check for Python 2

2020-10-23 Thread Andreas Sandberg (Gerrit) via gem5-dev
Andreas Sandberg has submitted this change. (  
https://gem5-review.googlesource.com/c/public/gem5/+/36535 )


Change subject: scons: Don't check for Python 2
..

scons: Don't check for Python 2

The build system will now refuse to build gem5 if Python 2.x is
detected. Remove Python 2 specific python-config variants from the
list of candidates we try.

Change-Id: Id59be4a2969ce180848e5df02afdfb4a5b8125c1
Signed-off-by: Andreas Sandberg 
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/36535
Reviewed-by: Gabe Black 
Reviewed-by: Daniel Carvalho 
Reviewed-by: Jason Lowe-Power 
Maintainer: Gabe Black 
Tested-by: kokoro 
---
M SConstruct
1 file changed, 1 insertion(+), 1 deletion(-)

Approvals:
  Jason Lowe-Power: Looks good to me, approved
  Daniel Carvalho: Looks good to me, but someone else must approve
  Gabe Black: Looks good to me, approved; Looks good to me, approved
  kokoro: Regressions pass



diff --git a/SConstruct b/SConstruct
index a057da3..5033344 100755
--- a/SConstruct
+++ b/SConstruct
@@ -238,7 +238,7 @@
 ('MARSHAL_CCFLAGS_EXTRA', 'Extra C and C++ marshal compiler  
flags', ''),

 ('MARSHAL_LDFLAGS_EXTRA', 'Extra marshal linker flags', ''),
 ('PYTHON_CONFIG', 'Python config binary to use',
-  
[ 'python3-config', 'python-config', 'python2.7-config', 'python2-config']

+ [ 'python3-config', 'python-config']
 ),
 ('PROTOC', 'protoc tool', environ.get('PROTOC', 'protoc')),
 ('BATCH', 'Use batch pool for build and tests', False),

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


Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: Id59be4a2969ce180848e5df02afdfb4a5b8125c1
Gerrit-Change-Number: 36535
Gerrit-PatchSet: 3
Gerrit-Owner: Andreas Sandberg 
Gerrit-Assignee: Jason Lowe-Power 
Gerrit-Reviewer: Andreas Sandberg 
Gerrit-Reviewer: Bobby R. Bruce 
Gerrit-Reviewer: Daniel Carvalho 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Jason Lowe-Power 
Gerrit-Reviewer: kokoro 
Gerrit-CC: Jason Lowe-Power 
Gerrit-MessageType: merged
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s

[gem5-dev] Change in gem5/gem5[develop]: scons: Test if binaries can embed the Python interpreter

2020-10-23 Thread Andreas Sandberg (Gerrit) via gem5-dev
Andreas Sandberg has submitted this change. (  
https://gem5-review.googlesource.com/c/public/gem5/+/36383 )


Change subject: scons: Test if binaries can embed the Python interpreter
..

scons: Test if binaries can embed the Python interpreter

Add some more stringent Python tests that ensure that we can link with
and run applications that embed Python. This is implemented by running
building a small c++ program that embeds Python using PyBind11. The
program is run by the build system and prints the version of the
Python interpreter. The version information is then used by the build
system to ensure that the installed version is supported.

Change-Id: I727e0832f171362f5506247c022bea365068a0f6
Signed-off-by: Andreas Sandberg 
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/36383
Reviewed-by: Gabe Black 
Reviewed-by: Daniel Carvalho 
Maintainer: Gabe Black 
Tested-by: kokoro 
---
M SConstruct
1 file changed, 33 insertions(+), 3 deletions(-)

Approvals:
  Daniel Carvalho: Looks good to me, but someone else must approve
  Gabe Black: Looks good to me, approved; Looks good to me, approved
  kokoro: Regressions pass



diff --git a/SConstruct b/SConstruct
index 8e7ec34..a057da3 100755
--- a/SConstruct
+++ b/SConstruct
@@ -575,6 +575,27 @@
 context.Result(ret)
 return ret

+def CheckPythonLib(context):
+context.Message('Checking Python version... ')
+ret = context.TryRun(r"""
+#include 
+
+int
+main(int argc, char **argv) {
+pybind11::scoped_interpreter guard{};
+pybind11::exec(
+"import sys\n"
+"vi = sys.version_info\n"
+"sys.stdout.write('%i.%i.%i' % (vi.major, vi.minor,  
vi.micro));\n");

+return 0;
+}
+""", extension=".cc")
+context.Result(ret[1] if ret[0] == 1 else 0)
+if ret[0] == 0:
+return None
+else:
+return tuple(map(int, ret[1].split(".")))
+
 # Platform-specific configuration.  Note again that we assume that all
 # builds under a given build root run on the same host platform.
 conf = Configure(main,
@@ -582,6 +603,7 @@
  log_file = joinpath(build_root, 'scons_config.log'),
  custom_tests = {
 'CheckMember' : CheckMember,
+'CheckPythonLib' : CheckPythonLib,
 })

 # Check if we should compile a 64 bit binary on Mac OS X/Darwin
@@ -637,9 +659,6 @@
   main['PYTHON_CONFIG'])

 print("Info: Using Python config: %s" % (python_config, ))
-if python_config != 'python3-config':
-warning('python3-config could not be found.\n'
-'Future releases of gem5 will drop support for python2.')

 py_includes = readCommand([python_config, '--includes'],
   exception='').split()
@@ -697,6 +716,17 @@
 marshal_env = main.Clone()
 marshal_env.Append(CCFLAGS='$MARSHAL_CCFLAGS_EXTRA')
 marshal_env.Append(LINKFLAGS='$MARSHAL_LDFLAGS_EXTRA')
+py_version = conf.CheckPythonLib()
+if not py_version:
+error("Can't find a working Python installation")
+
+# Found a working Python installation. Check if it meets minimum
+# requirements.
+if py_version[0] < 3 or \
+   (py_version[0] == 3 and py_version[1] < 6):
+error('Python version too old. Version 3.6 or newer is required.')
+elif py_version[0] > 3:
+warning('Python version too new. Python 3 expected.')

 # On Solaris you need to use libsocket for socket ops
 if not  
conf.CheckLibWithHeader(None, 'sys/socket.h', 'C++', 'accept(0,0,0);'):


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


Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: I727e0832f171362f5506247c022bea365068a0f6
Gerrit-Change-Number: 36383
Gerrit-PatchSet: 4
Gerrit-Owner: Andreas Sandberg 
Gerrit-Assignee: Bobby R. Bruce 
Gerrit-Reviewer: Andreas Sandberg 
Gerrit-Reviewer: Ciro Santilli 
Gerrit-Reviewer: Daniel Carvalho 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Giacomo Travaglini 
Gerrit-Reviewer: Jason Lowe-Power 
Gerrit-Reviewer: kokoro 
Gerrit-CC: Bobby R. Bruce 
Gerrit-MessageType: merged
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s

[gem5-dev] Re: SimObject params() method

2020-10-23 Thread Gambord, Ryan via gem5-dev
With the #include method you could have multiple params for the same
simobject. I know mid-file includes are rare, but, like goto, there are
use-cases that make sense. In this case, imo, it improves clarity.

You can just inherit from MySimObject::Params, and you aren't restricted to
doing it in any specific source file.

$cat main.cc
#include 
#include 

#include "MySimObject.hh"

struct FooParams : MySimObject::Params {
  char foo;
};

int
main( int argc, char *argv[]){
  FooParams p;
  p.myint = 5;
  p.foo = 'f';
  MySimObject my_so_instance(&p);
  std::cout << my_so_instance.myInt() << std::endl;
  return EXIT_SUCCESS;
}

Ryan Gambord




On Thu, Oct 22, 2020 at 7:58 PM Gabe Black via gem5-dev 
wrote:

> [This email originated from outside of OSU. Use caution with links and
> attachments.]
> Also that (like the other mechanisms) means that there can be at most one
> C++ class for a given Params class. It would be impossible to have
> FooParams -> SimObj and BarParams -> SimObj since there is only room for
> one Params in a class.
>
> That said, we could turn the FooParams and BarParams into Params::Foo and
> Params::Bar. That would be fairly trivial, and would mean we'd only have
> one name to dodge, Params, although that's an easier name to collide with
> accidentally.
>
> I think a step in the right direction would be to start putting all our
> gem5 stuff into a gem5 namespace. Namespaces are easy to fold away in
> context (using, opening the namespace and working within it), and then we
> would only have to worry about internal collisions which I think are a lot
> easier to manage.
>
> We could even start doing that now without breaking compatibility by
> putting things in a gem5 namespace and then putting a "using namespace
> ::gem5;" at the end to maintain compatibility until we decide to switch.
>
> Gabe
>
> On Thu, Oct 22, 2020 at 7:50 PM Gabe Black  wrote:
>
>> That would work, but we don't have includes in the middle of a class like
>> that anywhere else in gem5 (that I can remember at least), which I think is
>> for the best :-).
>>
>> Gabe
>>
>> On Thu, Oct 22, 2020 at 6:28 PM Gambord, Ryan via gem5-dev <
>> gem5-dev@gem5.org> wrote:
>>
>>> @Gabe Black 
>>> Here is an example of what this looks like. It requires slightly
>>> modifying the boilerplate code generated for params structs, and then
>>> moving the include from the top of the source file to inside the class.
>>> This brings the struct into the class namespace.
>>>
>>> This should work fine as long as pybind can work with a FQN of an
>>> object.
>>>
>>> MySimObject.hh
>>> #ifndef __MYSIMOBJECT_HH__
>>> #define __MYSIMOBJECT_HH__
>>>
>>> class MySimObject
>>> {
>>>   public:
>>> #include "MySimObjectParams.hh"
>>>
>>>   public:
>>> MySimObject(Params * p) : myint(p->myint) {}
>>>
>>> int & myInt() { return myint; }
>>>
>>>   private:
>>> int myint;
>>> };
>>> #endif // __MYSIMOBJECT_HH__
>>>
>>> MySimObjectParams.hh
>>> // Generated automatically by SCons //
>>>
>>> struct Params {
>>>   int myint;
>>> };
>>>
>>> main.cc
>>> #include 
>>> #include 
>>>
>>> #include "MySimObject.hh"
>>>
>>> int
>>> main( int argc, char *argv[]){
>>>   MySimObject::Params p;
>>>   p.myint = 5;
>>>   MySimObject my_so_instance(&p);
>>>   std::cout << my_so_instance.myInt() << std::endl;
>>>   return EXIT_SUCCESS;
>>> }
>>>
>>> Ryan Gambord
>>> 
>>>
>>>
>>>
>>> On Thu, Oct 22, 2020 at 5:20 PM Gabe Black via gem5-dev <
>>> gem5-dev@gem5.org> wrote:
>>>
 [This email originated from outside of OSU. Use caution with links and
 attachments.]
 I definitely agree that we need to use more namespaces and be better
 citizens in the global namespace.

 See https://gem5.atlassian.net/browse/GEM5-730

 Mechanically, I don't think we can define something like
 Mem::Ruby::Network::BasicLink::Params since that would require adding a
 Params type to the not yet defined BasicLink class. You can do that with
 namespaces, but not with classes. We also couldn't add a params function to
 the SimObject for the same reason. Python doesn't define the SimObject
 class at all, even though it might look like it does because the python
 objects and C++ objects often (but not always) share the same name. The
 Python objects actually are the Params structs in C++, and then python uses
 the create method to make the actual SimObjects. The real C++ SimObject
 classes have no python analogue, although python has pointers to them and
 can indirectly call methods on them once they've been instantiated. That's
 how callbacks like init(), startup(), etc are handled.

 Gabe

 On Thu, Oct 22, 2020 at 10:25 AM Gambord, Ryan via gem5-dev <
 gem5-dev@gem5.org> wrote:

> While we're thinking about the params implementations, I'd also like
> to propose that we stop cluttering the global namespace with
> collision-prone names:
>
> src/.../.../MySimObject.hh
> na

[gem5-dev] Change in gem5/gem5[develop]: arch-arm: Reimplement TLB::flushAll

2020-10-23 Thread Giacomo Travaglini (Gerrit) via gem5-dev
Giacomo Travaglini has submitted this change. (  
https://gem5-review.googlesource.com/c/public/gem5/+/35239 )


Change subject: arch-arm: Reimplement TLB::flushAll
..

arch-arm: Reimplement TLB::flushAll

flushAll is a non architectural flush command; this is not based on
flushAllSecurity anymore. flushAll should always flush stage1 and stage2,
whereas flushAllSecurity is checking for the current state
(vmid, and if we are in Hyp)

Change-Id: I6b81ebfba387e646f256ecbecb7b5ee720745358
Signed-off-by: Giacomo Travaglini 
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/35239
Reviewed-by: Andreas Sandberg 
Reviewed-by: Richard Cooper 
Maintainer: Andreas Sandberg 
Tested-by: kokoro 
---
M src/arch/arm/tlb.cc
M src/arch/arm/tlb.hh
2 files changed, 30 insertions(+), 11 deletions(-)

Approvals:
  Andreas Sandberg: Looks good to me, approved; Looks good to me, approved
  Richard Cooper: Looks good to me, approved
  kokoro: Regressions pass



diff --git a/src/arch/arm/tlb.cc b/src/arch/arm/tlb.cc
index 0f9d7cd..6f8b46f 100644
--- a/src/arch/arm/tlb.cc
+++ b/src/arch/arm/tlb.cc
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2013, 2016-2019 ARM Limited
+ * Copyright (c) 2010-2013, 2016-2020 ARM Limited
  * All rights reserved
  *
  * The license below extends only to copyright in the software and shall
@@ -246,6 +246,29 @@
 }

 void
+TLB::flushAll()
+{
+DPRINTF(TLB, "Flushing all TLB entries\n");
+int x = 0;
+TlbEntry *te;
+while (x < size) {
+te = &table[x];
+
+DPRINTF(TLB, " -  %s\n", te->print());
+te->valid = false;
+stats.flushedEntries++;
+++x;
+}
+
+stats.flushTlb++;
+
+// If there's a second stage TLB (and we're not it) then flush it as  
well

+if (!isStage2) {
+stage2Tlb->flushAll();
+}
+}
+
+void
 TLB::flushAllSecurity(bool secure_lookup, ExceptionLevel target_el,
   bool ignore_el, bool in_host)
 {
diff --git a/src/arch/arm/tlb.hh b/src/arch/arm/tlb.hh
index f839848..6363b7c 100644
--- a/src/arch/arm/tlb.hh
+++ b/src/arch/arm/tlb.hh
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2013, 2016, 2019 ARM Limited
+ * Copyright (c) 2010-2013, 2016, 2019-2020 ARM Limited
  * All rights reserved
  *
  * The license below extends only to copyright in the software and shall
@@ -246,6 +246,11 @@
 bool checkPAN(ThreadContext *tc, uint8_t ap, const RequestPtr &req,
   Mode mode);

+/** Reset the entire TLB. Used for CPU switching to prevent stale
+ * translations after multiple switches
+ */
+void flushAll() override;
+

 /** Reset the entire TLB
  * @param secure_lookup if the operation affects the secure world
@@ -259,15 +264,6 @@
 void flushAllNs(ExceptionLevel target_el, bool ignore_el = false);


-/** Reset the entire TLB. Used for CPU switching to prevent stale
- * translations after multiple switches
- */
-void flushAll() override
-{
-flushAllSecurity(false, EL0, true, false);
-flushAllSecurity(true, EL0, true, false);
-}
-
 /** Remove any entries that match both a va and asn
  * @param mva virtual address to flush
  * @param asn contextid/asn to flush on match

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


Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: I6b81ebfba387e646f256ecbecb7b5ee720745358
Gerrit-Change-Number: 35239
Gerrit-PatchSet: 9
Gerrit-Owner: Giacomo Travaglini 
Gerrit-Reviewer: Andreas Sandberg 
Gerrit-Reviewer: Giacomo Travaglini 
Gerrit-Reviewer: Nikos Nikoleris 
Gerrit-Reviewer: Richard Cooper 
Gerrit-Reviewer: kokoro 
Gerrit-MessageType: merged
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s

[gem5-dev] Change in gem5/gem5[develop]: arch-arm: TLBIALL/TLBIASID/TLBIMVA base classes for I/D flavours

2020-10-23 Thread Giacomo Travaglini (Gerrit) via gem5-dev
Giacomo Travaglini has submitted this change. (  
https://gem5-review.googlesource.com/c/public/gem5/+/35238 )


Change subject: arch-arm: TLBIALL/TLBIASID/TLBIMVA base classes for I/D  
flavours

..

arch-arm: TLBIALL/TLBIASID/TLBIMVA base classes for I/D flavours

This will be exploited by the incoming patchset

Change-Id: Ic10a8d64910a04d4153b0f2abb133dfd56dbaf62
Signed-off-by: Giacomo Travaglini 
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/35238
Tested-by: kokoro 
Reviewed-by: Andreas Sandberg 
Reviewed-by: Richard Cooper 
Maintainer: Andreas Sandberg 
---
M src/arch/arm/tlbi_op.hh
1 file changed, 13 insertions(+), 27 deletions(-)

Approvals:
  Andreas Sandberg: Looks good to me, approved; Looks good to me, approved
  Richard Cooper: Looks good to me, approved
  kokoro: Regressions pass



diff --git a/src/arch/arm/tlbi_op.hh b/src/arch/arm/tlbi_op.hh
index 8706d3d..511d70e 100644
--- a/src/arch/arm/tlbi_op.hh
+++ b/src/arch/arm/tlbi_op.hh
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018-2019 ARM Limited
+ * Copyright (c) 2018-2020 ARM Limited
  * All rights reserved
  *
  * The license below extends only to copyright in the software and shall
@@ -89,11 +89,11 @@
 };

 /** Instruction TLB Invalidate All */
-class ITLBIALL : public TLBIOp
+class ITLBIALL : public TLBIALL
 {
   public:
 ITLBIALL(ExceptionLevel _targetEL, bool _secure)
-  : TLBIOp(_targetEL, _secure)
+  : TLBIALL(_targetEL, _secure)
 {}

 void broadcast(ThreadContext *tc) = delete;
@@ -102,11 +102,11 @@
 };

 /** Data TLB Invalidate All */
-class DTLBIALL : public TLBIOp
+class DTLBIALL : public TLBIALL
 {
   public:
 DTLBIALL(ExceptionLevel _targetEL, bool _secure)
-  : TLBIOp(_targetEL, _secure)
+  : TLBIALL(_targetEL, _secure)
 {}

 void broadcast(ThreadContext *tc) = delete;
@@ -129,35 +129,29 @@
 };

 /** Instruction TLB Invalidate by ASID match */
-class ITLBIASID : public TLBIOp
+class ITLBIASID : public TLBIASID
 {
   public:
 ITLBIASID(ExceptionLevel _targetEL, bool _secure, uint16_t _asid)
-  : TLBIOp(_targetEL, _secure), asid(_asid)
+  : TLBIASID(_targetEL, _secure, _asid)
 {}

 void broadcast(ThreadContext *tc) = delete;

 void operator()(ThreadContext* tc) override;
-
-  protected:
-uint16_t asid;
 };

 /** Data TLB Invalidate by ASID match */
-class DTLBIASID : public TLBIOp
+class DTLBIASID : public TLBIASID
 {
   public:
 DTLBIASID(ExceptionLevel _targetEL, bool _secure, uint16_t _asid)
-  : TLBIOp(_targetEL, _secure), asid(_asid)
+  : TLBIASID(_targetEL, _secure, _asid)
 {}

 void broadcast(ThreadContext *tc) = delete;

 void operator()(ThreadContext* tc) override;
-
-  protected:
-uint16_t asid;
 };

 /** TLB Invalidate All, Non-Secure */
@@ -203,39 +197,31 @@
 };

 /** Instruction TLB Invalidate by VA */
-class ITLBIMVA : public TLBIOp
+class ITLBIMVA : public TLBIMVA
 {
   public:
 ITLBIMVA(ExceptionLevel _targetEL, bool _secure,
  Addr _addr, uint16_t _asid)
-  : TLBIOp(_targetEL, _secure), addr(_addr), asid(_asid)
+  : TLBIMVA(_targetEL, _secure, _addr, _asid)
 {}

 void broadcast(ThreadContext *tc) = delete;

 void operator()(ThreadContext* tc) override;
-
-  protected:
-Addr addr;
-uint16_t asid;
 };

 /** Data TLB Invalidate by VA */
-class DTLBIMVA : public TLBIOp
+class DTLBIMVA : public TLBIMVA
 {
   public:
 DTLBIMVA(ExceptionLevel _targetEL, bool _secure,
  Addr _addr, uint16_t _asid)
-  : TLBIOp(_targetEL, _secure), addr(_addr), asid(_asid)
+  : TLBIMVA(_targetEL, _secure, _addr, _asid)
 {}

 void broadcast(ThreadContext *tc) = delete;

 void operator()(ThreadContext* tc) override;
-
-  protected:
-Addr addr;
-uint16_t asid;
 };

 /** TLB Invalidate by Intermediate Physical Address */

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


Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: Ic10a8d64910a04d4153b0f2abb133dfd56dbaf62
Gerrit-Change-Number: 35238
Gerrit-PatchSet: 9
Gerrit-Owner: Giacomo Travaglini 
Gerrit-Reviewer: Andreas Sandberg 
Gerrit-Reviewer: Giacomo Travaglini 
Gerrit-Reviewer: Nikos Nikoleris 
Gerrit-Reviewer: Richard Cooper 
Gerrit-Reviewer: kokoro 
Gerrit-MessageType: merged
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s

[gem5-dev] Change in gem5/gem5[develop]: arch-arm: Rewrite the TLB flushing interface

2020-10-23 Thread Giacomo Travaglini (Gerrit) via gem5-dev
Giacomo Travaglini has submitted this change. (  
https://gem5-review.googlesource.com/c/public/gem5/+/35240 )


Change subject: arch-arm: Rewrite the TLB flushing interface
..

arch-arm: Rewrite the TLB flushing interface

We are now using an overloaded flush method which has
different TLBI ops as arguments.

This is simplifying the interface and it is allowing us to
encode some state in the TLBIOp which will then be passed
to the TLB. This is a step towards making the TLB a stateless
cache of translations

Change-Id: Ic4fbae72dc3cfe756047148b1cf5f144298c8b08
Signed-off-by: Giacomo Travaglini 
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/35240
Reviewed-by: Andreas Sandberg 
Reviewed-by: Richard Cooper 
Maintainer: Andreas Sandberg 
Tested-by: kokoro 
---
M src/arch/arm/mmu.cc
M src/arch/arm/mmu.hh
M src/arch/arm/tlb.cc
M src/arch/arm/tlb.hh
M src/arch/arm/tlbi_op.cc
M src/arch/arm/tlbi_op.hh
6 files changed, 111 insertions(+), 219 deletions(-)

Approvals:
  Andreas Sandberg: Looks good to me, approved; Looks good to me, approved
  Richard Cooper: Looks good to me, but someone else must approve
  kokoro: Regressions pass



diff --git a/src/arch/arm/mmu.cc b/src/arch/arm/mmu.cc
index c3e487f..0895cee 100644
--- a/src/arch/arm/mmu.cc
+++ b/src/arch/arm/mmu.cc
@@ -36,6 +36,7 @@
  */

 #include "arch/arm/mmu.hh"
+#include "arch/arm/tlbi_op.hh"

 using namespace ArmISA;

@@ -66,84 +67,6 @@
 }
 }

-void
-MMU::flushAllSecurity(bool secure_lookup, ExceptionLevel target_el,
-TLBType type, bool ignore_el, bool in_host)
-{
-if (type & TLBType::I_TLBS) {
-getITBPtr()->flushAllSecurity(
-secure_lookup, target_el, ignore_el, in_host);
-}
-if (type & TLBType::D_TLBS) {
-getDTBPtr()->flushAllSecurity(
-secure_lookup, target_el, ignore_el, in_host);
-}
-}
-
-void
-MMU::flushAllNs(ExceptionLevel target_el, bool ignore_el,
-TLBType type)
-{
-if (type & TLBType::I_TLBS) {
-getITBPtr()->flushAllNs(target_el, ignore_el);
-}
-if (type & TLBType::D_TLBS) {
-getDTBPtr()->flushAllNs(target_el, ignore_el);
-}
-}
-
-void
-MMU::flushMvaAsid(Addr mva, uint64_t asn, bool secure_lookup,
-ExceptionLevel target_el, TLBType type,
-bool in_host)
-{
-if (type & TLBType::I_TLBS) {
-getITBPtr()->flushMvaAsid(
-mva, asn, secure_lookup, target_el, in_host);
-}
-if (type & TLBType::D_TLBS) {
-getDTBPtr()->flushMvaAsid(
-mva, asn, secure_lookup, target_el, in_host);
-}
-}
-
-void
-MMU::flushAsid(uint64_t asn, bool secure_lookup,
-ExceptionLevel target_el, TLBType type,
-bool in_host)
-{
-if (type & TLBType::I_TLBS) {
-getITBPtr()->flushAsid(asn, secure_lookup, target_el, in_host);
-}
-if (type & TLBType::D_TLBS) {
-getDTBPtr()->flushAsid(asn, secure_lookup, target_el, in_host);
-}
-}
-
-void
-MMU::flushMva(Addr mva, bool secure_lookup, ExceptionLevel target_el,
-TLBType type, bool in_host)
-{
-if (type & TLBType::I_TLBS) {
-getITBPtr()->flushMva(mva, secure_lookup, target_el, in_host);
-}
-if (type & TLBType::D_TLBS) {
-getDTBPtr()->flushMva(mva, secure_lookup, target_el, in_host);
-}
-}
-
-void
-MMU::flushIpaVmid(Addr ipa, bool secure_lookup, ExceptionLevel target_el,
-TLBType type)
-{
-if (type & TLBType::I_TLBS) {
-getITBPtr()->flushIpaVmid(ipa, secure_lookup, target_el);
-}
-if (type & TLBType::D_TLBS) {
-getDTBPtr()->flushIpaVmid(ipa, secure_lookup, target_el);
-}
-}
-
 ArmISA::MMU *
 ArmMMUParams::create() const
 {
diff --git a/src/arch/arm/mmu.hh b/src/arch/arm/mmu.hh
index cc4684f..e5adb95 100644
--- a/src/arch/arm/mmu.hh
+++ b/src/arch/arm/mmu.hh
@@ -79,58 +79,33 @@

 void invalidateMiscReg(TLBType type = ALL_TLBS);

-/** Reset the entire TLB
- * @param secure_lookup if the operation affects the secure world
- */
-void flushAllSecurity(bool secure_lookup, ExceptionLevel target_el,
- TLBType type = ALL_TLBS,
- bool ignore_el = false, bool in_host = false);
+template 
+void
+flush(const OP &tlbi_op)
+{
+getITBPtr()->flush(tlbi_op);
+getDTBPtr()->flush(tlbi_op);
+}

-/** Remove all entries in the non secure world, depending on whether  
they

- *  were allocated in hyp mode or not
- */
-void flushAllNs(ExceptionLevel target_el, bool ignore_el = false,
-TLBType type = ALL_TLBS);
+template 
+void
+iflush(const OP &tlbi_op)
+{
+getITBPtr()->flush(tlbi_op);
+}

-/** Remove any entries that match both a va and asn
- * @param mva virtual address to flush
- * @param asn contextid/asn to flush on match
- * @param secure_lookup if the operation affects the secure world
- */
-void flushMvaAsid(Addr mva, uint64_t asn, bool secure_lookup,
-Ex

[gem5-dev] Change in gem5/gem5[develop]: arch-arm: Fix implementation of TLBI ALLEx instructions

2020-10-23 Thread Giacomo Travaglini (Gerrit) via gem5-dev
Giacomo Travaglini has submitted this change. (  
https://gem5-review.googlesource.com/c/public/gem5/+/35241 )


Change subject: arch-arm: Fix implementation of TLBI ALLEx instructions
..

arch-arm: Fix implementation of TLBI ALLEx instructions

The TLBIALL op in gem5 was designed after the AArch32 TLBIALL instruction.
and was reused by the TLBI ALLEL1, ALLE2, ALLE3 logic.

This is not correct for the following reasons:

- TLBI ALLEx invalidates regardless of the VMID
- TLBI ALLEx (AArch64) is "target regime" oriented, whereas TLBIALL
  (AArch32) is "current regime" oriented

TLBIALL has a different behaviour depending on the current exception
level: if issued at EL1 it will invalidate stage1 translations only; if
at EL2, it will invalidate stage2 translations as well.

TLBI ALLEx is more standard; every TLBI ALLE1 will invalidate stage1 and
stage2 translations. This is because the instruction is not executable
from the guest (EL1)

So for TLBIALL the condition for stage2 forwarding will be:

if (!isStage2 && isHyp) {

Whereas for TLBI ALLEx will be:

if (!isStage2 && target_el == EL1) {

Change-Id: I282f2cfaecbfc883e173770e5d2578b41055bb7a
Signed-off-by: Giacomo Travaglini 
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/35241
Reviewed-by: Andreas Sandberg 
Maintainer: Andreas Sandberg 
Tested-by: kokoro 
---
M src/arch/arm/isa.cc
M src/arch/arm/tlb.cc
M src/arch/arm/tlb.hh
M src/arch/arm/tlbi_op.cc
M src/arch/arm/tlbi_op.hh
5 files changed, 92 insertions(+), 7 deletions(-)

Approvals:
  Andreas Sandberg: Looks good to me, approved; Looks good to me, approved
  kokoro: Regressions pass



diff --git a/src/arch/arm/isa.cc b/src/arch/arm/isa.cc
index d3f9c98..1c70a77 100644
--- a/src/arch/arm/isa.cc
+++ b/src/arch/arm/isa.cc
@@ -1701,7 +1701,7 @@
 {
 assert64();

-TLBIALL tlbiOp(EL3, true);
+TLBIALLEL tlbiOp(EL3, true);
 tlbiOp(tc);
 return;
 }
@@ -1710,7 +1710,7 @@
 {
 assert64();

-TLBIALL tlbiOp(EL3, true);
+TLBIALLEL tlbiOp(EL3, true);
 tlbiOp.broadcast(tc);
 return;
 }
@@ -1720,7 +1720,7 @@
 assert64();
 scr = readMiscReg(MISCREG_SCR);

-TLBIALL tlbiOp(EL2, haveSecurity && !scr.ns);
+TLBIALLEL tlbiOp(EL2, haveSecurity && !scr.ns);
 tlbiOp(tc);
 return;
 }
@@ -1730,12 +1730,30 @@
 assert64();
 scr = readMiscReg(MISCREG_SCR);

-TLBIALL tlbiOp(EL2, haveSecurity && !scr.ns);
+TLBIALLEL tlbiOp(EL2, haveSecurity && !scr.ns);
 tlbiOp.broadcast(tc);
 return;
 }
   // AArch64 TLB Invalidate All, EL1
   case MISCREG_TLBI_ALLE1:
+{
+assert64();
+scr = readMiscReg(MISCREG_SCR);
+
+TLBIALLEL tlbiOp(EL1, haveSecurity && !scr.ns);
+tlbiOp(tc);
+return;
+}
+  // AArch64 TLB Invalidate All, EL1, Inner Shareable
+  case MISCREG_TLBI_ALLE1IS:
+{
+assert64();
+scr = readMiscReg(MISCREG_SCR);
+
+TLBIALLEL tlbiOp(EL1, haveSecurity && !scr.ns);
+tlbiOp.broadcast(tc);
+return;
+}
   case MISCREG_TLBI_VMALLS12E1:
 // @todo: handle VMID and stage 2 to enable Virtualization
 {
@@ -1759,8 +1777,6 @@
 tlbiOp(tc);
 return;
 }
-  // AArch64 TLB Invalidate All, EL1, Inner Shareable
-  case MISCREG_TLBI_ALLE1IS:
   case MISCREG_TLBI_VMALLS12E1IS:
 // @todo: handle VMID and stage 2 to enable Virtualization
 {
diff --git a/src/arch/arm/tlb.cc b/src/arch/arm/tlb.cc
index a8e0cb3..56bce27 100644
--- a/src/arch/arm/tlb.cc
+++ b/src/arch/arm/tlb.cc
@@ -300,6 +300,36 @@
 }

 void
+TLB::flush(const TLBIALLEL &tlbi_op)
+{
+DPRINTF(TLB, "Flushing all TLB entries (%s lookup)\n",
+(tlbi_op.secureLookup ? "secure" : "non-secure"));
+int x = 0;
+TlbEntry *te;
+while (x < size) {
+te = &table[x];
+const bool el_match = te->checkELMatch(
+tlbi_op.targetEL, tlbi_op.inHost);
+if (te->valid && tlbi_op.secureLookup == !te->nstid && el_match) {
+
+DPRINTF(TLB, " -  %s\n", te->print());
+te->valid = false;
+stats.flushedEntries++;
+}
+++x;
+}
+
+stats.flushTlb++;
+
+// If there's a second stage TLB (and we're not it)
+// and if we're targeting EL1
+// then flush it as well
+if (!isStage2 && tlbi_op.targetEL == EL1) {
+stage2Tlb->flush(tlbi_op.makeStage2(

[gem5-dev] To understand page table walk for TimingSimpleCPU in X86 architecture

2020-10-23 Thread krishnan gosakan via gem5-dev
Hi all,
I would like to know how page table walking actually works in x86
TimingSImpleCPU, which uses a timing access memory model. Previously, I
tried to look at how the page table is walker for AtomicSimpleCPU which
uses an atomic access memory model. In
function Walker::WalkerState::startWalk(), for timing alone sendpackets()
is called while for other access models, there is a loop with stepWalk()
called. I see that a four level page table is used in atomic access, but I
don't see anything similar to it in timing mode. In short, I can't
understand how sendpackets() method does page walking. It would be great if
anyone could help me with this.
Thank you.
-- 
Regards,
Krishnan.
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s

[gem5-dev] Change in gem5/gem5[develop]: util: Fix an incorrect print statement in git pre-commit hook

2020-10-23 Thread Hoa Nguyen (Gerrit) via gem5-dev
Hoa Nguyen has submitted this change. (  
https://gem5-review.googlesource.com/c/public/gem5/+/36516 )


Change subject: util: Fix an incorrect print statement in git pre-commit  
hook

..

util: Fix an incorrect print statement in git pre-commit hook

Change-Id: I13d0a705b6cfab654635380e2adbf36243344a62
Signed-off-by: Hoa Nguyen 
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/36516
Reviewed-by: Gabe Black 
Reviewed-by: Jason Lowe-Power 
Maintainer: Gabe Black 
Tested-by: kokoro 
---
M util/git-pre-commit.py
1 file changed, 1 insertion(+), 1 deletion(-)

Approvals:
  Jason Lowe-Power: Looks good to me, approved
  Gabe Black: Looks good to me, approved; Looks good to me, approved
  kokoro: Regressions pass



diff --git a/util/git-pre-commit.py b/util/git-pre-commit.py
index 7681b87..ece2467 100755
--- a/util/git-pre-commit.py
+++ b/util/git-pre-commit.py
@@ -114,6 +114,6 @@
 "fixes for commit in\n"
 "the following files: ", file=sys.stderr)
 for f in staged_mismatch:
-print("\t%s".format(f), file=sys.stderr)
+print("\t{}".format(f), file=sys.stderr)
 print("Please `git --add' them", file=sys.stderr)
 sys.exit(1)

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


Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: I13d0a705b6cfab654635380e2adbf36243344a62
Gerrit-Change-Number: 36516
Gerrit-PatchSet: 2
Gerrit-Owner: Hoa Nguyen 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Hoa Nguyen 
Gerrit-Reviewer: Jason Lowe-Power 
Gerrit-Reviewer: kokoro 
Gerrit-MessageType: merged
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s

[gem5-dev] Change in gem5/gem5[develop]: mem-cache: Undefine compression ratio of perfect compression

2020-10-23 Thread Daniel Carvalho (Gerrit) via gem5-dev
Daniel Carvalho has submitted this change. (  
https://gem5-review.googlesource.com/c/public/gem5/+/36495 )


Change subject: mem-cache: Undefine compression ratio of perfect compression
..

mem-cache: Undefine compression ratio of perfect compression

Commit c0d67b2263aab6a729368373d9cdef9883870241 assumes that the
cache contains a parameter for its compression ratio. This is not
the case upstream, so force the user to provide it instead.

Change-Id: Ic7b4878bede6b0a34e4adfe7e0aa65a0ee48d1f6
Signed-off-by: Daniel R. Carvalho 
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/36495
Reviewed-by: Jason Lowe-Power 
Reviewed-by: Nikos Nikoleris 
Maintainer: Jason Lowe-Power 
Tested-by: kokoro 
---
M src/mem/cache/compressors/Compressors.py
1 file changed, 3 insertions(+), 2 deletions(-)

Approvals:
  Jason Lowe-Power: Looks good to me, approved; Looks good to me, approved
  Nikos Nikoleris: Looks good to me, approved
  kokoro: Regressions pass



diff --git a/src/mem/cache/compressors/Compressors.py  
b/src/mem/cache/compressors/Compressors.py

index d7dfdab..689a42e 100644
--- a/src/mem/cache/compressors/Compressors.py
+++ b/src/mem/cache/compressors/Compressors.py
@@ -125,8 +125,9 @@
 cxx_header = "mem/cache/compressors/perfect.hh"

 chunk_size_bits = 64
-max_compression_ratio = Param.Int(Parent.max_compression_ratio,
-"Maximum compression ratio allowed")
+
+max_compression_ratio = Param.Int("Maximum compression ratio allowed")
+
 compression_latency = Param.Cycles(1,
 "Number of cycles to perform data compression")
 decompression_latency = Param.Cycles(1,

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


Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: Ic7b4878bede6b0a34e4adfe7e0aa65a0ee48d1f6
Gerrit-Change-Number: 36495
Gerrit-PatchSet: 2
Gerrit-Owner: Daniel Carvalho 
Gerrit-Reviewer: Daniel Carvalho 
Gerrit-Reviewer: Jason Lowe-Power 
Gerrit-Reviewer: Nikos Nikoleris 
Gerrit-Reviewer: kokoro 
Gerrit-MessageType: merged
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s

[gem5-dev] Change in gem5/gem5[develop]: mem-cache: Make (de)compression latencies params

2020-10-23 Thread Daniel Carvalho (Gerrit) via gem5-dev
Daniel Carvalho has submitted this change. (  
https://gem5-review.googlesource.com/c/public/gem5/+/36497 )


Change subject: mem-cache: Make (de)compression latencies params
..

mem-cache: Make (de)compression latencies params

Add 4 params to calculate compression and decompression latencies.
A pair of params informs how many chunks are parsed per cycle, and
the other pair informs how many extra cycles are needed after the
chunks are parsed to finish the (de)compression.

Change-Id: Ie67b0c298f06a08011f553789e3a9a1d89dd7c4f
Signed-off-by: Daniel R. Carvalho 
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/36497
Reviewed-by: Nikos Nikoleris 
Maintainer: Nikos Nikoleris 
Tested-by: kokoro 
---
M src/mem/cache/compressors/Compressors.py
M src/mem/cache/compressors/base.cc
M src/mem/cache/compressors/base.hh
M src/mem/cache/compressors/base_delta_impl.hh
M src/mem/cache/compressors/cpack.cc
M src/mem/cache/compressors/cpack.hh
M src/mem/cache/compressors/dictionary_compressor.hh
M src/mem/cache/compressors/dictionary_compressor_impl.hh
M src/mem/cache/compressors/fpcd.cc
M src/mem/cache/compressors/fpcd.hh
M src/mem/cache/compressors/multi.cc
M src/mem/cache/compressors/perfect.cc
12 files changed, 156 insertions(+), 76 deletions(-)

Approvals:
  Nikos Nikoleris: Looks good to me, approved; Looks good to me, approved
  kokoro: Regressions pass



diff --git a/src/mem/cache/compressors/Compressors.py  
b/src/mem/cache/compressors/Compressors.py

index 689a42e..a1f3706 100644
--- a/src/mem/cache/compressors/Compressors.py
+++ b/src/mem/cache/compressors/Compressors.py
@@ -41,6 +41,15 @@
 "Minimum percentage of the block size, a compressed block must "
 "achieve to be stored in compressed format")

+comp_chunks_per_cycle = Param.Unsigned(1,
+"Number of chunks that can be compressed in parallel per cycle.")
+comp_extra_latency = Param.Cycles(1, "Number of extra cycles required "
+"to finish compression (e.g., due to shifting and packaging).")
+decomp_chunks_per_cycle = Param.Unsigned(1,
+"Number of chunks that can be decompressed in parallel per cycle.")
+decomp_extra_latency = Param.Cycles(1, "Number of extra cycles  
required "

+"to finish decompression (e.g., due to shifting and packaging).")
+
 class BaseDictionaryCompressor(BaseCacheCompressor):
 type = 'BaseDictionaryCompressor'
 abstract = True
@@ -57,6 +66,12 @@

 chunk_size_bits = 64

+# Base-delta compressors achieve 1-cycle latencies
+comp_chunks_per_cycle = 8 * Self.block_size / Self.chunk_size_bits
+comp_extra_latency = 0
+decomp_chunks_per_cycle = 8 * Self.block_size / Self.chunk_size_bits
+decomp_extra_latency = 0
+
 class Base64Delta16(BaseDictionaryCompressor):
 type = 'Base64Delta16'
 cxx_class = 'Compressor::Base64Delta16'
@@ -64,6 +79,12 @@

 chunk_size_bits = 64

+# Base-delta compressors achieve 1-cycle latencies
+comp_chunks_per_cycle = 8 * Self.block_size / Self.chunk_size_bits
+comp_extra_latency = 0
+decomp_chunks_per_cycle = 8 * Self.block_size / Self.chunk_size_bits
+decomp_extra_latency = 0
+
 class Base64Delta32(BaseDictionaryCompressor):
 type = 'Base64Delta32'
 cxx_class = 'Compressor::Base64Delta32'
@@ -71,6 +92,12 @@

 chunk_size_bits = 64

+# Base-delta compressors achieve 1-cycle latencies
+comp_chunks_per_cycle = 8 * Self.block_size / Self.chunk_size_bits
+comp_extra_latency = 0
+decomp_chunks_per_cycle = 8 * Self.block_size / Self.chunk_size_bits
+decomp_extra_latency = 0
+
 class Base32Delta8(BaseDictionaryCompressor):
 type = 'Base32Delta8'
 cxx_class = 'Compressor::Base32Delta8'
@@ -78,6 +105,12 @@

 chunk_size_bits = 32

+# Base-delta compressors achieve 1-cycle latencies
+comp_chunks_per_cycle = 8 * Self.block_size / Self.chunk_size_bits
+comp_extra_latency = 0
+decomp_chunks_per_cycle = 8 * Self.block_size / Self.chunk_size_bits
+decomp_extra_latency = 0
+
 class Base32Delta16(BaseDictionaryCompressor):
 type = 'Base32Delta16'
 cxx_class = 'Compressor::Base32Delta16'
@@ -85,6 +118,12 @@

 chunk_size_bits = 32

+# Base-delta compressors achieve 1-cycle latencies
+comp_chunks_per_cycle = 8 * Self.block_size / Self.chunk_size_bits
+comp_extra_latency = 0
+decomp_chunks_per_cycle = 8 * Self.block_size / Self.chunk_size_bits
+decomp_extra_latency = 0
+
 class Base16Delta8(BaseDictionaryCompressor):
 type = 'Base16Delta8'
 cxx_class = 'Compressor::Base16Delta8'
@@ -92,16 +131,36 @@

 chunk_size_bits = 16

+# Base-delta compressors achieve 1-cycle latencies
+comp_chunks_per_cycle = 8 * Self.block_size / Self.chunk_size_bits
+comp_extra_latency = 0
+decomp_chunks_per_cycle = 8 * Self.block_size / Self.chunk_size_bits
+decomp_extra_latency = 0
+
 class CPack(BaseDictionaryCompressor):
 t

[gem5-dev] Change in gem5/gem5[develop]: python: Add support for Proxy division

2020-10-23 Thread Daniel Carvalho (Gerrit) via gem5-dev
Daniel Carvalho has submitted this change. (  
https://gem5-review.googlesource.com/c/public/gem5/+/36496 )


Change subject: python: Add support for Proxy division
..

python: Add support for Proxy division

Allow proxies to use python3's division operations. The dividends
and divisors can be either a proxy or a constant.

Change-Id: I96b854355b8f593edfb1ea52a52548b855b05fc0
Signed-off-by: Daniel R. Carvalho 
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/36496
Reviewed-by: Andreas Sandberg 
Reviewed-by: Jason Lowe-Power 
Reviewed-by: Nikos Nikoleris 
Maintainer: Jason Lowe-Power 
Tested-by: kokoro 
---
M src/python/m5/proxy.py
1 file changed, 40 insertions(+), 21 deletions(-)

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



diff --git a/src/python/m5/proxy.py b/src/python/m5/proxy.py
index 9d91b84..d15b6f2 100644
--- a/src/python/m5/proxy.py
+++ b/src/python/m5/proxy.py
@@ -55,7 +55,7 @@
 def __init__(self, search_self, search_up):
 self._search_self = search_self
 self._search_up = search_up
-self._multipliers = []
+self._ops = []

 def __str__(self):
 if self._search_self and not self._search_up:
@@ -72,29 +72,48 @@
 "cannot set attribute '%s' on proxy object" % attr)
 super(BaseProxy, self).__setattr__(attr, value)

-# support for multiplying proxies by constants or other proxies to
-# other params
-def __mul__(self, other):
-if not (isinstance(other, (int, long, float)) or isproxy(other)):
-raise TypeError(
-"Proxy multiplier must be a constant or a proxy to a  
param")

-self._multipliers.append(other)
-return self
+def _gen_op(operation):
+def op(self, operand):
+if not (isinstance(operand, (int, long, float)) or \
+isproxy(operand)):
+raise TypeError(
+"Proxy operand must be a constant or a proxy to a  
param")

+self._ops.append((operation, operand))
+return self
+return op

+# Support for multiplying proxies by either constants or other proxies
+__mul__ = _gen_op(lambda operand_a, operand_b : operand_a * operand_b)
 __rmul__ = __mul__

-def _mulcheck(self, result, base):
+# Support for dividing proxies by either constants or other proxies
+__truediv__ = _gen_op(lambda operand_a, operand_b :
+operand_a / operand_b)
+__floordiv__ = _gen_op(lambda operand_a, operand_b :
+operand_a // operand_b)
+
+# Support for dividing constants by proxies
+__rtruediv__ = _gen_op(lambda operand_a, operand_b :
+operand_b / operand_a.getValue())
+__rfloordiv__ = _gen_op(lambda operand_a, operand_b :
+operand_b // operand_a.getValue())
+
+# After all the operators and operands have been defined, this function
+# should be called to perform the actual operation
+def _opcheck(self, result, base):
 from . import params
-for multiplier in self._multipliers:
-if isproxy(multiplier):
-multiplier = multiplier.unproxy(base)
-# assert that we are multiplying with a compatible
-# param
-if not isinstance(multiplier, params.NumericParamValue):
-raise TypeError(
-"Proxy multiplier must be a numerical param")
-multiplier = multiplier.getValue()
-result = result * multiplier
+for operation, operand in self._ops:
+# Get the operand's value
+if isproxy(operand):
+operand = operand.unproxy(base)
+# assert that we are operating with a compatible param
+if not isinstance(operand, params.NumericParamValue):
+raise TypeError("Proxy operand must be a numerical  
param")

+operand = operand.getValue()
+
+# Apply the operation
+result = operation(result, operand)
+
 return result

 def unproxy(self, base):
@@ -128,7 +147,7 @@
 raise RuntimeError("Cycle in unproxy")
 result = result.unproxy(obj)

-return self._mulcheck(result, base)
+return self._opcheck(result, base)

 def getindex(obj, index):
 if index == None:

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


Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: I96b854355b8f593edfb1ea52a52548b855b05fc0
Gerrit-Change-Number: 36496
Gerrit-PatchSet: 3
Gerrit-Owner: Daniel Carvalho 
Gerrit-Reviewer: Andreas Sandber

[gem5-dev] Change in gem5/gem5[develop]: mem-cache: Implement FPC cache compressor

2020-10-23 Thread Daniel Carvalho (Gerrit) via gem5-dev
Daniel Carvalho has submitted this change. (  
https://gem5-review.googlesource.com/c/public/gem5/+/36395 )


Change subject: mem-cache: Implement FPC cache compressor
..

mem-cache: Implement FPC cache compressor

Implementation of Frequent Pattern Compression, proposed
by Alameldeen et al. in "Frequent Pattern Compression: A
Significance-Based Compression Scheme for L2 Caches".

Change-Id: I6dca8ca6b3043b561140bc681dbdbe9f7cef27d7
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/36395
Reviewed-by: Nikos Nikoleris 
Reviewed-by: Jason Lowe-Power 
Maintainer: Nikos Nikoleris 
Tested-by: kokoro 
---
M src/mem/cache/compressors/Compressors.py
M src/mem/cache/compressors/SConscript
M src/mem/cache/compressors/dictionary_compressor.hh
A src/mem/cache/compressors/fpc.cc
A src/mem/cache/compressors/fpc.hh
5 files changed, 475 insertions(+), 1 deletion(-)

Approvals:
  Jason Lowe-Power: Looks good to me, approved
  Nikos Nikoleris: Looks good to me, approved; Looks good to me, approved
  kokoro: Regressions pass



diff --git a/src/mem/cache/compressors/Compressors.py  
b/src/mem/cache/compressors/Compressors.py

index a1f3706..b93a66a 100644
--- a/src/mem/cache/compressors/Compressors.py
+++ b/src/mem/cache/compressors/Compressors.py
@@ -148,6 +148,21 @@
 decomp_chunks_per_cycle = 2
 decomp_extra_latency = 1

+class FPC(BaseDictionaryCompressor):
+type = 'FPC'
+cxx_class = 'Compressor::FPC'
+cxx_header = "mem/cache/compressors/fpc.hh"
+
+comp_chunks_per_cycle = 8
+comp_extra_latency = 1
+decomp_chunks_per_cycle = 4
+decomp_extra_latency = 1
+
+# Dummy dictionary size, since FPC has no dictionary
+dictionary_size = 1
+
+zero_run_bits = Param.Int(3, "Number of bits of the zero run bit  
field")

+
 class FPCD(BaseDictionaryCompressor):
 type = 'FPCD'
 cxx_class = 'Compressor::FPCD'
diff --git a/src/mem/cache/compressors/SConscript  
b/src/mem/cache/compressors/SConscript

index d73c2be..f696c04 100644
--- a/src/mem/cache/compressors/SConscript
+++ b/src/mem/cache/compressors/SConscript
@@ -34,6 +34,7 @@
 Source('base_dictionary_compressor.cc')
 Source('base_delta.cc')
 Source('cpack.cc')
+Source('fpc.cc')
 Source('fpcd.cc')
 Source('multi.cc')
 Source('perfect.cc')
diff --git a/src/mem/cache/compressors/dictionary_compressor.hh  
b/src/mem/cache/compressors/dictionary_compressor.hh

index e5d67d7..fe70b59 100644
--- a/src/mem/cache/compressors/dictionary_compressor.hh
+++ b/src/mem/cache/compressors/dictionary_compressor.hh
@@ -135,6 +135,8 @@
 class RepeatedValuePattern;
 template 
 class DeltaPattern;
+template 
+class SignExtendedPattern;

 /**
  * Create a factory to determine if input matches a pattern. The if  
else

@@ -346,7 +348,7 @@
  *
  * @return The size.
  */
-std::size_t
+virtual std::size_t
 getSizeBits() const
 {
 return numUnmatchedBits + length;
@@ -735,6 +737,55 @@
 }
 };

+/**
+ * A pattern that checks whether the value is an N bits sign-extended  
value,

+ * that is, all the MSB starting from the Nth are equal to the (N-1)th bit.
+ *
+ * Therefore, if N = 8, and T has 16 bits, the values within the ranges
+ * [0x, 0x007F] and [0xFF80, 0x] would match this pattern.
+ *
+ * @tparam N The number of bits in the non-extended original value. It must
+ *   fit in a dictionary entry.
+ */
+template 
+template 
+class DictionaryCompressor::SignExtendedPattern
+: public DictionaryCompressor::Pattern
+{
+  private:
+static_assert((N > 0) & (N <= (sizeof(T) * 8)),
+"The original data's type size must be smaller than the  
dictionary's");

+
+/** The non-extended original value. */
+const T bits : N;
+
+  public:
+SignExtendedPattern(const int number,
+const uint64_t code,
+const uint64_t metadata_length,
+const DictionaryEntry bytes,
+const bool allocate = false)
+  : DictionaryCompressor::Pattern(number, code, metadata_length, N,
+-1, allocate),
+bits(fromDictionaryEntry(bytes) & mask(N))
+{
+}
+
+static bool
+isPattern(const DictionaryEntry& bytes,
+const DictionaryEntry& dict_bytes, const int match_location)
+{
+const T data = DictionaryCompressor::fromDictionaryEntry(bytes);
+return data == sext(data & mask(N));
+}
+
+DictionaryEntry
+decompress(const DictionaryEntry dict_bytes) const override
+{
+return toDictionaryEntry(sext(bits));
+}
+};
+
 } // namespace Compressor

 #endif //__MEM_CACHE_COMPRESSORS_DICTIONARY_COMPRESSOR_HH__
diff --git a/src/mem/cache/compressors/fpc.cc  
b/src/mem/cache/compressors/fpc.cc

new file mode 100644
index 000..8398a32
--- /dev/null
+++ b/src/mem/cache/compressors/fpc.cc
@@ -0,0 +1,103 @@
+/*
+ * Copyright (c) 2018-2020 Inria
+ * All rights reserved.
+ *
+ * Redistribution and use in sourc

[gem5-dev] Change in gem5/gem5[develop]: fastmodel: Fix up for the new standardized create() methods.

2020-10-23 Thread Gabe Black (Gerrit) via gem5-dev
Gabe Black has submitted this change. (  
https://gem5-review.googlesource.com/c/public/gem5/+/36155 )


Change subject: fastmodel: Fix up for the new standardized create() methods.
..

fastmodel: Fix up for the new standardized create() methods.

Change-Id: I2e3610b5cad37b67d32907a2c2568b504d5ed113
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/36155
Reviewed-by: Andreas Sandberg 
Maintainer: Andreas Sandberg 
Tested-by: kokoro 
---
M src/arch/arm/fastmodel/CortexA76/cortex_a76.cc
M src/arch/arm/fastmodel/CortexA76/cortex_a76.hh
M src/arch/arm/fastmodel/CortexR52/cortex_r52.cc
M src/arch/arm/fastmodel/CortexR52/cortex_r52.hh
M src/arch/arm/fastmodel/GIC/gic.cc
5 files changed, 8 insertions(+), 8 deletions(-)

Approvals:
  Andreas Sandberg: Looks good to me, approved; Looks good to me, approved
  kokoro: Regressions pass



diff --git a/src/arch/arm/fastmodel/CortexA76/cortex_a76.cc  
b/src/arch/arm/fastmodel/CortexA76/cortex_a76.cc

index a9206de..802299b 100644
--- a/src/arch/arm/fastmodel/CortexA76/cortex_a76.cc
+++ b/src/arch/arm/fastmodel/CortexA76/cortex_a76.cc
@@ -98,8 +98,8 @@
 return Base::getPort(if_name, idx);
 }

-CortexA76Cluster::CortexA76Cluster(Params &p) :
-SimObject(&p), _params(p), cores(p.cores), evs(p.evs)
+CortexA76Cluster::CortexA76Cluster(const Params &p) :
+SimObject(p), _params(p), cores(p.cores), evs(p.evs)
 {
 for (int i = 0; i < p.cores.size(); i++)
 p.cores[i]->setCluster(this, i);
diff --git a/src/arch/arm/fastmodel/CortexA76/cortex_a76.hh  
b/src/arch/arm/fastmodel/CortexA76/cortex_a76.hh

index 6088b0a..68ff1a8 100644
--- a/src/arch/arm/fastmodel/CortexA76/cortex_a76.hh
+++ b/src/arch/arm/fastmodel/CortexA76/cortex_a76.hh
@@ -62,8 +62,8 @@
 const Params ¶ms() { return _params; }

   public:
-CortexA76(Params &p) : Base(&p,  
scx::scx_get_iris_connection_interface()),

-_params(p)
+CortexA76(const Params &p) :
+Base(p, scx::scx_get_iris_connection_interface()), _params(p)
 {}

 void
@@ -110,7 +110,7 @@
 CortexA76 *getCore(int num) const { return cores.at(num); }
 sc_core::sc_module *getEvs() const { return evs; }

-CortexA76Cluster(Params &p);
+CortexA76Cluster(const Params &p);
 const Params ¶ms() { return _params; }

 Port &getPort(const std::string &if_name,
diff --git a/src/arch/arm/fastmodel/CortexR52/cortex_r52.cc  
b/src/arch/arm/fastmodel/CortexR52/cortex_r52.cc

index 1936e2a..31485d2 100644
--- a/src/arch/arm/fastmodel/CortexR52/cortex_r52.cc
+++ b/src/arch/arm/fastmodel/CortexR52/cortex_r52.cc
@@ -94,7 +94,7 @@
 }

 CortexR52Cluster::CortexR52Cluster(const Params &p) :
-SimObject(&p), _params(p), cores(p.cores), evs(p.evs)
+SimObject(p), _params(p), cores(p.cores), evs(p.evs)
 {
 for (int i = 0; i < p.cores.size(); i++)
 p.cores[i]->setCluster(this, i);
diff --git a/src/arch/arm/fastmodel/CortexR52/cortex_r52.hh  
b/src/arch/arm/fastmodel/CortexR52/cortex_r52.hh

index 9abf194..8332066 100644
--- a/src/arch/arm/fastmodel/CortexR52/cortex_r52.hh
+++ b/src/arch/arm/fastmodel/CortexR52/cortex_r52.hh
@@ -63,7 +63,7 @@

   public:
 CortexR52(const Params &p) :
-Base(&p, scx::scx_get_iris_connection_interface()), _params(p)
+Base(p, scx::scx_get_iris_connection_interface()), _params(p)
 {}

 template 
diff --git a/src/arch/arm/fastmodel/GIC/gic.cc  
b/src/arch/arm/fastmodel/GIC/gic.cc

index 97d0154..934305b 100644
--- a/src/arch/arm/fastmodel/GIC/gic.cc
+++ b/src/arch/arm/fastmodel/GIC/gic.cc
@@ -297,7 +297,7 @@
 }

 GIC::GIC(const FastModelGICParams ¶ms) :
-BaseGic(¶ms),
+BaseGic(params),
 ambaM(params.sc_gic->amba_m, params.name + ".amba_m", -1),
 ambaS(params.sc_gic->amba_s, params.name + ".amba_s", -1),
 redistributors(params.port_redistributor_connection_count),

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


Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: I2e3610b5cad37b67d32907a2c2568b504d5ed113
Gerrit-Change-Number: 36155
Gerrit-PatchSet: 2
Gerrit-Owner: Gabe Black 
Gerrit-Reviewer: Andreas Sandberg 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Giacomo Travaglini 
Gerrit-Reviewer: kokoro 
Gerrit-MessageType: merged
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s

[gem5-dev] Re: Changes to SE mode

2020-10-23 Thread Gabe Black via gem5-dev
Hey folks! If someone is going to look at these I can wait, but if not
there's no point in just letting it sit there...

Gabe

On Thu, Oct 22, 2020 at 4:23 PM Gabe Black  wrote:

> For fans of the classics, you can look up my email with subject "Merging
> of FS and SE mode" from 2011, but I suspect that's too old for most people
> to have seen, and not completely the same as what I'm trying to do here.
> This is the other half of the workload concept which is already applied to
> FS mode, ie separating and modularizing the thing you're running from the
> thing you're running on. The "hardware" like the CPU, memory, devices, etc,
> is the same no matter if you're running SE mode programs, FS operating
> systems, an OS from scratch, bare metal, etc. Then on top of that, you can
> add a workload object which will load an OS for you like the system objects
> used to do and the workload objects do now, or which fakes an OS kernel and
> loads and coordinates SE mode processes which is what these new changes are
> setting up, or sets up SE mode like hooks for a BIOS to implement to fake
> power modes or BIOS interrupt routines for something like DOS, etc, etc.
>
> A long time ago I managed to break down the barriers between SE and FS
> modes to the point where they could be combined into a single build, but
> there is still a big FS/SE mode switch which means you have to pick which
> one you want, and a decent number of places where global behaviors or
> mechanisms are selected with that switch. These changes are a big step
> towards not having that switch at all, and for SE mode and FS mode to not
> be modes, but to just be handy labels to put on configurations which tend
> to fit in certain categories. Other than just making gem5 cleaner and
> simpler, this will also enable some configurations which are just not
> possible today, like systems which fall outside of the FS or SE dichotomy,
> or which combine them and have, for instance, an FS mode server connected
> to SE mode clients over a simulated network.
>
> Gabe
>
> On Thu, Oct 22, 2020 at 8:06 AM Jason Lowe-Power via gem5-dev <
> gem5-dev@gem5.org> wrote:
>
>> Hi Gabe,
>>
>> Could you give us some context to the 16 changes that you are going to
>> commit without review at the end of the week? Starting with
>> https://gem5-review.googlesource.com/c/public/gem5/+/33902/
>>
>> I would like to review these, but I don't have any context as to the
>> purpose. What problem are they solving and how do they solve the problem?
>>
>> Sorry that I missed these for two months. You've contributed over 116
>> changes in the past two months. That requires others to review about two
>> changes per day. There's bound to be things that fall through the cracks.
>>
>> Thanks,
>> Jason
>> ___
>> gem5-dev mailing list -- gem5-dev@gem5.org
>> To unsubscribe send an email to gem5-dev-le...@gem5.org
>> %(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s
>
>
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s