[gem5-dev] [S] Change in gem5/gem5[develop]: base: fatal() if a socket path doesn't fit in sockaddr_un.sun_path.

2023-04-12 Thread Gabe Black (Gerrit) via gem5-dev
Gabe Black has submitted this change. (  
https://gem5-review.googlesource.com/c/public/gem5/+/69677?usp=email )


Change subject: base: fatal() if a socket path doesn't fit in  
sockaddr_un.sun_path.

..

base: fatal() if a socket path doesn't fit in sockaddr_un.sun_path.

Normally this would just generate a warning, but a warning is easy to
miss, and truncating the path to fit would be surprising. Since the max
length isn't likely to change, a path which has to be truncated is
essentially fundementally wrong, and could be defined as something
else which is short enough before being used in the config.

Note that this only applies to either the abstract path which is just
a string, or the file name and not the directory path on a file based
socket.

Change-Id: I8702cf02c03053b5d0b6133f25b0e588de666f15
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/69677
Maintainer: Gabe Black 
Reviewed-by: Earl Ou 
Tested-by: kokoro 
---
M src/base/socket.cc
M src/base/socket.hh
2 files changed, 10 insertions(+), 13 deletions(-)

Approvals:
  Gabe Black: Looks good to me, approved
  kokoro: Regressions pass
  Earl Ou: Looks good to me, approved




diff --git a/src/base/socket.cc b/src/base/socket.cc
index 76dc73f..62f2071 100644
--- a/src/base/socket.cc
+++ b/src/base/socket.cc
@@ -261,15 +261,12 @@
 });
 }

-std::string
-ListenSocketUnix::truncate(const std::string , size_t max_len)
+void
+ListenSocketUnix::checkPathLength(const std::string , size_t  
max_len)

 {
-if (original.size() <= max_len)
-return original;
-
-std::string truncated = original.substr(0, max_len);
-warn("%s: Truncated \"%s\" to \"%s\"", name(), original, truncated);
-return truncated;
+fatal_if(original.size() > max_len,
+"Length of socket path '%s' is %d, greater than max %d.",
+original, original.size(), max_len);
 }

 void
@@ -303,9 +300,9 @@

 ListenSocketUnixFile::ListenSocketUnixFile(const std::string &_name,
 const std::string &_dir, const std::string &_fname) :
-ListenSocketUnix(_name), dir(_dir),
-fname(truncate(_fname, sizeof(sockaddr_un::sun_path) - 1))
+ListenSocketUnix(_name), dir(_dir), fname(_fname)
 {
+checkPathLength(fname, sizeof(sockaddr_un::sun_path) - 1);
 }

 ListenSocketUnixFile::~ListenSocketUnixFile()
@@ -385,9 +382,9 @@

 ListenSocketUnixAbstract::ListenSocketUnixAbstract(
 const std::string &_name, const std::string &_path) :
-ListenSocketUnix(_name),
-path(truncate(_path, sizeof(sockaddr_un::sun_path) - 1))
+ListenSocketUnix(_name), path(_path)
 {
+checkPathLength(path, sizeof(sockaddr_un::sun_path) - 1);
 }

 void
diff --git a/src/base/socket.hh b/src/base/socket.hh
index b8828e7..bc17213 100644
--- a/src/base/socket.hh
+++ b/src/base/socket.hh
@@ -162,7 +162,7 @@
   protected:
 virtual size_t prepSockaddrUn(sockaddr_un ) const = 0;

-std::string truncate(const std::string , size_t max_len);
+void checkPathLength(const std::string , size_t max_len);

 ListenSocketUnix(const std::string &_name) : ListenSocket(_name) {}


--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/69677?usp=email
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: I8702cf02c03053b5d0b6133f25b0e588de666f15
Gerrit-Change-Number: 69677
Gerrit-PatchSet: 2
Gerrit-Owner: Gabe Black 
Gerrit-Reviewer: Chia-You Chen 
Gerrit-Reviewer: Earl Ou 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Jesse Pai 
Gerrit-Reviewer: Yu-hsin Wang 
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


[gem5-dev] [S] Change in gem5/gem5[develop]: base: fatal() if a socket path doesn't fit in sockaddr_un.sun_path.

2023-04-12 Thread Gabe Black (Gerrit) via gem5-dev
Gabe Black has uploaded this change for review. (  
https://gem5-review.googlesource.com/c/public/gem5/+/69677?usp=email )



Change subject: base: fatal() if a socket path doesn't fit in  
sockaddr_un.sun_path.

..

base: fatal() if a socket path doesn't fit in sockaddr_un.sun_path.

Normally this would just generate a warning, but a warning is easy to
miss, and truncating the path to fit would be surprising. Since the max
length isn't likely to change, a path which has to be truncated is
essentially fundementally wrong, and could be defined as something
else which is short enough before being used in the config.

Note that this only applies to either the abstract path which is just
a string, or the file name and not the directory path on a file based
socket.

Change-Id: I8702cf02c03053b5d0b6133f25b0e588de666f15
---
M src/base/socket.cc
M src/base/socket.hh
2 files changed, 10 insertions(+), 13 deletions(-)



diff --git a/src/base/socket.cc b/src/base/socket.cc
index 76dc73f..62f2071 100644
--- a/src/base/socket.cc
+++ b/src/base/socket.cc
@@ -261,15 +261,12 @@
 });
 }

-std::string
-ListenSocketUnix::truncate(const std::string , size_t max_len)
+void
+ListenSocketUnix::checkPathLength(const std::string , size_t  
max_len)

 {
-if (original.size() <= max_len)
-return original;
-
-std::string truncated = original.substr(0, max_len);
-warn("%s: Truncated \"%s\" to \"%s\"", name(), original, truncated);
-return truncated;
+fatal_if(original.size() > max_len,
+"Length of socket path '%s' is %d, greater than max %d.",
+original, original.size(), max_len);
 }

 void
@@ -303,9 +300,9 @@

 ListenSocketUnixFile::ListenSocketUnixFile(const std::string &_name,
 const std::string &_dir, const std::string &_fname) :
-ListenSocketUnix(_name), dir(_dir),
-fname(truncate(_fname, sizeof(sockaddr_un::sun_path) - 1))
+ListenSocketUnix(_name), dir(_dir), fname(_fname)
 {
+checkPathLength(fname, sizeof(sockaddr_un::sun_path) - 1);
 }

 ListenSocketUnixFile::~ListenSocketUnixFile()
@@ -385,9 +382,9 @@

 ListenSocketUnixAbstract::ListenSocketUnixAbstract(
 const std::string &_name, const std::string &_path) :
-ListenSocketUnix(_name),
-path(truncate(_path, sizeof(sockaddr_un::sun_path) - 1))
+ListenSocketUnix(_name), path(_path)
 {
+checkPathLength(path, sizeof(sockaddr_un::sun_path) - 1);
 }

 void
diff --git a/src/base/socket.hh b/src/base/socket.hh
index b8828e7..bc17213 100644
--- a/src/base/socket.hh
+++ b/src/base/socket.hh
@@ -162,7 +162,7 @@
   protected:
 virtual size_t prepSockaddrUn(sockaddr_un ) const = 0;

-std::string truncate(const std::string , size_t max_len);
+void checkPathLength(const std::string , size_t max_len);

 ListenSocketUnix(const std::string &_name) : ListenSocket(_name) {}


--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/69677?usp=email
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: I8702cf02c03053b5d0b6133f25b0e588de666f15
Gerrit-Change-Number: 69677
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black 
Gerrit-CC: Gabe Black 
Gerrit-MessageType: newchange
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org


[gem5-dev] [M] Change in gem5/gem5[develop]: arch,base,dev,sim: Convert objects to use the HostSocket param type.

2023-04-11 Thread Gabe Black (Gerrit) via gem5-dev
nc/Vnc.py
@@ -50,5 +50,5 @@
 type = "VncServer"
 cxx_header = "base/vnc/vncserver.hh"
 cxx_class = "gem5::VncServer"
-port = Param.TcpPort(5900, "listen port")
+port = Param.HostSocket(5900, "listen port/socket")
 number = Param.Int(0, "vnc client number")
diff --git a/src/base/vnc/vncserver.cc b/src/base/vnc/vncserver.cc
index 4e5c951..f342419 100644
--- a/src/base/vnc/vncserver.cc
+++ b/src/base/vnc/vncserver.cc
@@ -117,7 +117,7 @@
  */
 VncServer::VncServer(const Params )
 : VncInput(p), listenEvent(NULL), dataEvent(NULL), number(p.number),
-  listener(listenSocketInetConfig(p.port).build(p.name)),
+  listener(p.port.build(p.name)),
   sendUpdate(false), supportsRawEnc(false), supportsResizeEnc(false)
 {
 if (p.port)
diff --git a/src/dev/net/Ethernet.py b/src/dev/net/Ethernet.py
index 608f25b..72f2061 100644
--- a/src/dev/net/Ethernet.py
+++ b/src/dev/net/Ethernet.py
@@ -147,7 +147,7 @@
 cxx_header = "dev/net/ethertap.hh"
 cxx_class = "gem5::EtherTapStub"

-port = Param.UInt16(3500, "Port helper should send packets to")
+port = Param.HostSocket(3500, "Port/socket helper should send packets  
to")



 class EtherDump(SimObject):
diff --git a/src/dev/net/ethertap.cc b/src/dev/net/ethertap.cc
index 7c7a8dc..c66723b 100644
--- a/src/dev/net/ethertap.cc
+++ b/src/dev/net/ethertap.cc
@@ -249,8 +249,8 @@
 EtherTapStub *tap;

   public:
-TapListener(EtherTapStub *t, int p) :
-listener(listenSocketInetConfig(p).build(t->name())), tap(t) {}
+TapListener(EtherTapStub *t, ListenSocketPtr _listener) :
+listener(std::move(_listener)), tap(t) {}
 ~TapListener() { delete event; }

 void listen();
@@ -287,7 +287,7 @@
 if (ListenSocket::allDisabled())
 fatal("All listeners are disabled! EtherTapStub can't work!");

-listener = new TapListener(this, p.port);
+listener = new TapListener(this, p.port.build(name()));
 listener->listen();
 }

diff --git a/src/dev/serial/Terminal.py b/src/dev/serial/Terminal.py
index c774379..a08a18f 100644
--- a/src/dev/serial/Terminal.py
+++ b/src/dev/serial/Terminal.py
@@ -51,7 +51,7 @@
 type = "Terminal"
 cxx_header = "dev/serial/terminal.hh"
 cxx_class = "gem5::Terminal"
-port = Param.TcpPort(3456, "listen port")
+port = Param.HostSocket(3456, "listen port/socket")
 number = Param.Int(0, "terminal number")
 outfile = Param.TerminalDump(
 "file", "Selects if and where the terminal is dumping its output"
diff --git a/src/dev/serial/terminal.cc b/src/dev/serial/terminal.cc
index 6e8e435..db4906a 100644
--- a/src/dev/serial/terminal.cc
+++ b/src/dev/serial/terminal.cc
@@ -121,8 +121,7 @@
  */
 Terminal::Terminal(const Params )
 : SerialDevice(p), listenEvent(NULL), dataEvent(NULL),
-  number(p.number), data_fd(-1),
-  listener(listenSocketInetConfig(p.port).build(p.name)),
+  number(p.number), data_fd(-1), listener(p.port.build(p.name)),
   txbuf(16384), rxbuf(16384), outfile(terminalDump(p))
 #if TRACING_ON == 1
   , linebuf(16384)
diff --git a/src/sim/Workload.py b/src/sim/Workload.py
index f5139e1..31ea738 100644
--- a/src/sim/Workload.py
+++ b/src/sim/Workload.py
@@ -36,8 +36,8 @@
 abstract = True

 wait_for_remote_gdb = Param.Bool(False, "Wait for a remote GDB  
connection")

-remote_gdb_port = Param.Int(
-7000, "Default port number used for remote GDB connection"
+remote_gdb_port = Param.HostSocket(
+7000, "Default port/socket used for remote GDB connection"
 )

 @cxxMethod

--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/69166?usp=email
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: Id441c3628f62d60608a07c5cb697786e33199981
Gerrit-Change-Number: 69166
Gerrit-PatchSet: 7
Gerrit-Owner: Gabe Black 
Gerrit-Reviewer: Bobby Bruce 
Gerrit-Reviewer: Daniel Carvalho 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Jason Lowe-Power 
Gerrit-Reviewer: Jui-min Lee 
Gerrit-Reviewer: Yu-hsin Wang 
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


[gem5-dev] [M] Change in gem5/gem5[develop]: base: Remove the now unused UnixSocketAddr class and associated code.

2023-04-11 Thread Gabe Black (Gerrit) via gem5-dev
.cc
@@ -45,79 +45,6 @@
  * socket.cc have not been fully tested due to interaction with  
system-calls.

  */

-namespace {
-
-std::string
-repeat(const std::string& str, size_t n)
-{
-std::stringstream ss;
-for (int i = 0; i < n; ++i) {
-ss << str;
-}
-return ss.str();
-}
-
-} // namespace
-
-TEST(UnixSocketAddrTest, AbstractSocket)
-{
-UnixSocketAddr sock_addr = UnixSocketAddr::build("@abstract");
-EXPECT_EQ(AF_UNIX, sock_addr.addr.sun_family);
-// null byte will not show, so compare from the first byte
-EXPECT_STREQ("abstract", sock_addr.addr.sun_path + 1);
-EXPECT_TRUE(sock_addr.isAbstract);
-EXPECT_STREQ("@abstract", sock_addr.formattedPath.c_str());
-}
-
-TEST(UnixSocketAddrTest, TruncatedAbstractSocket)
-{
-// Test that address is truncated if longer than sizeof(sun_path)
-constexpr size_t MaxSize =  
sizeof(std::declval().sun_path);

-
-// >sizeof(sun_path) bytes
-std::string addr = "@" + repeat("123456789", 100);
-ASSERT_GT(addr.size(), MaxSize);
-std::string truncated_addr = addr.substr(0, MaxSize);
-
-UnixSocketAddr sock_addr = UnixSocketAddr::build(addr);
-EXPECT_EQ(AF_UNIX, sock_addr.addr.sun_family);
-// Use memcmp so that we can compare null bytes as well
-std::string null_formatted = '\0' + truncated_addr.substr(1);
-EXPECT_EQ(0, std::memcmp(null_formatted.c_str(),  
sock_addr.addr.sun_path,

- MaxSize));
-EXPECT_TRUE(sock_addr.isAbstract);
-EXPECT_EQ(truncated_addr, sock_addr.formattedPath);
-}
-
-TEST(UnixSocketAddrTest, FileBasedSocket)
-{
-std::string addr = "/home/parent/dir/x";
-UnixSocketAddr sock_addr = UnixSocketAddr::build(addr);
-EXPECT_EQ(AF_UNIX, sock_addr.addr.sun_family);
-EXPECT_STREQ(addr.c_str(), sock_addr.addr.sun_path);
-EXPECT_FALSE(sock_addr.isAbstract);
-EXPECT_EQ(addr, sock_addr.formattedPath);
-}
-
-TEST(UnixSocketAddrTest, TruncatedFileBasedSocket)
-{
-// sun_path should null terminate, so test that address is truncated if
-// longer than sizeof(sun_path) - 1 bytes.
-constexpr size_t MaxSize =
-sizeof(std::declval().sun_path) - 1;
-
-// >sizeof(sun_path) - 1 bytes
-std::string addr = "/" + repeat("123456789", 100);
-ASSERT_GT(addr.size(), MaxSize);
-std::string truncated_addr = addr.substr(0, MaxSize);
-
-UnixSocketAddr sock_addr = UnixSocketAddr::build(addr);
-EXPECT_EQ(AF_UNIX, sock_addr.addr.sun_family);
-EXPECT_STREQ(truncated_addr.c_str(), sock_addr.addr.sun_path);
-EXPECT_FALSE(sock_addr.isAbstract);
-EXPECT_EQ(truncated_addr, sock_addr.formattedPath);
-}
-
 class MockListenSocket : public ListenSocketInet
 {
   public:

--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/69169?usp=email
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: I3a29b880b2484c5e25071bdef59fc73e1e8c2760
Gerrit-Change-Number: 69169
Gerrit-PatchSet: 8
Gerrit-Owner: Gabe Black 
Gerrit-Reviewer: Bobby Bruce 
Gerrit-Reviewer: Daniel Carvalho 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Simon Park 
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


[gem5-dev] [M] Change in gem5/gem5[develop]: base,python: Add a param type for host sockets.

2023-04-11 Thread Gabe Black (Gerrit) via gem5-dev
bind11/core.cc b/src/python/pybind11/core.cc
index bd83a74..0b03d5a 100644
--- a/src/python/pybind11/core.cc
+++ b/src/python/pybind11/core.cc
@@ -223,6 +223,20 @@
 m.def("setInterpDir", ::setInterpDir);
 }

+static void
+init_socket(py::module_ _native)
+{
+py::module_ m_socket = m_native.def_submodule("socket");
+m_socket
+.def("listenSocketEmptyConfig", )
+.def("listenSocketInetConfig", )
+.def("listenSocketUnixFileConfig", )
+.def("listenSocketUnixAbstractConfig",
+);
+
+py::class_(m_socket, "ListenSocketConfig");
+}
+
 void
 pybind_init_core(py::module_ _native)
 {
@@ -334,6 +348,7 @@
 init_net(m_native);
 init_loader(m_native);
 init_pc(m_native);
+init_socket(m_native);
 }

 } // namespace gem5

--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/69165?usp=email
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: I1fc7a579074e849b3becd936238c62fb0d9a2087
Gerrit-Change-Number: 69165
Gerrit-PatchSet: 7
Gerrit-Owner: Gabe Black 
Gerrit-Reviewer: Andreas Sandberg 
Gerrit-Reviewer: Bobby Bruce 
Gerrit-Reviewer: Daniel Carvalho 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Giacomo Travaglini 
Gerrit-Reviewer: Jason Lowe-Power 
Gerrit-Reviewer: Jui-min Lee 
Gerrit-Reviewer: Yu-hsin Wang 
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


[gem5-dev] [M] Change in gem5/gem5[develop]: mem: Use HostSocket in the SharedMemoryServer.

2023-04-11 Thread Gabe Black (Gerrit) via gem5-dev
tion %d", name(), cli_fd);
 shmServer->clientSocketEvents[cli_fd].reset(
 new ClientSocketEvent(cli_fd, shmServer));
diff --git a/src/mem/shared_memory_server.hh  
b/src/mem/shared_memory_server.hh

index d9fbeb3..a4ef63d 100644
--- a/src/mem/shared_memory_server.hh
+++ b/src/mem/shared_memory_server.hh
@@ -83,10 +83,10 @@
 void process(int revent) override;
 };

-UnixSocketAddr sockAddr;
 System* system;

-int serverFd;
+ListenSocketPtr listener;
+
 std::unique_ptr listenSocketEvent;
 std::unordered_map>
 clientSocketEvents;

--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/69168?usp=email
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: I8e05434d08cffaebdf6c68a967e2ee7613c10a76
Gerrit-Change-Number: 69168
Gerrit-PatchSet: 8
Gerrit-Owner: Gabe Black 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Jui-min Lee 
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


[gem5-dev] [M] Change in gem5/gem5[develop]: base: Add support for unix domain sockets in ListenSocket.

2023-04-09 Thread Gabe Black (Gerrit) via gem5-dev
e](const std::string ) {
+return std::make_unique(name, dir, fname);
+});
+}
+
+size_t
+ListenSocketUnixAbstract::prepSockaddrUn(sockaddr_un ) const
+{
+addr.sun_family = AF_UNIX;
+addr.sun_path[0] = '\0';
+std::memcpy(_path[1], path.c_str(), path.size());
+return offsetof(sockaddr_un, sun_path) + path.size() + 1;
+}
+
+ListenSocketUnixAbstract::ListenSocketUnixAbstract(
+const std::string &_name, const std::string &_path) :
+ListenSocketUnix(_name),
+path(truncate(_path, sizeof(sockaddr_un::sun_path) - 1))
+{
+}
+
+void
+ListenSocketUnixAbstract::output(std::ostream ) const
+{
+os << "abstract socket \"" << path << "\"";
+}
+
+ListenSocketConfig
+listenSocketUnixAbstractConfig(std::string path)
+{
+return ListenSocketConfig([path](const std::string ) {
+return std::make_unique(name, path);
+});
+}
+
 } // namespace gem5
diff --git a/src/base/socket.hh b/src/base/socket.hh
index 761312b..33c1c3a 100644
--- a/src/base/socket.hh
+++ b/src/base/socket.hh
@@ -184,6 +184,60 @@

 ListenSocketConfig listenSocketInetConfig(int port);

+// AF_UNIX based sockets.
+
+class ListenSocketUnix : public ListenSocket
+{
+  protected:
+virtual size_t prepSockaddrUn(sockaddr_un ) const = 0;
+
+std::string truncate(const std::string , size_t max_len);
+
+ListenSocketUnix(const std::string &_name) : ListenSocket(_name) {}
+
+  public:
+void listen() override;
+};
+
+class ListenSocketUnixFile : public ListenSocketUnix
+{
+  protected:
+std::string dir;
+std::string resolvedDir;
+std::string fname;
+
+bool unlink() const;
+
+size_t prepSockaddrUn(sockaddr_un ) const override;
+
+  public:
+ListenSocketUnixFile(const std::string &_name, const std::string &_dir,
+const std::string &_fname);
+~ListenSocketUnixFile();
+
+void listen() override;
+void output(std::ostream ) const override;
+};
+
+ListenSocketConfig listenSocketUnixFileConfig(
+std::string dir, std::string fname);
+
+class ListenSocketUnixAbstract : public ListenSocketUnix
+{
+  protected:
+std::string path;
+
+size_t prepSockaddrUn(sockaddr_un ) const override;
+
+  public:
+ListenSocketUnixAbstract(
+const std::string &_name, const std::string &_path);
+
+void output(std::ostream ) const override;
+};
+
+ListenSocketConfig listenSocketUnixAbstractConfig(std::string path);
+
 } // namespace gem5

 #endif //__SOCKET_HH__
diff --git a/src/base/socket.test.cc b/src/base/socket.test.cc
index 0f0de54..7bf9e18 100644
--- a/src/base/socket.test.cc
+++ b/src/base/socket.test.cc
@@ -207,5 +207,10 @@
 TEST(SocketTest, AcceptError)
 {
 MockListenSocket listen_socket(-1);
-EXPECT_EQ(-1, listen_socket.accept());
+EXPECT_ANY_THROW(listen_socket.accept());
+std::string expected =
+"panic: panic condition sfd == -1 occurred: mock: Failed to  
accept "

+"connection: Bad file descriptor\n";
+std::string actual = gtestLogOutput.str();
+EXPECT_EQ(expected, actual);
 }

--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/69164?usp=email
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: I6a5fa2cd3e4b567829203bf9d61ad2b55c259697
Gerrit-Change-Number: 69164
Gerrit-PatchSet: 8
Gerrit-Owner: Gabe Black 
Gerrit-Reviewer: Bobby Bruce 
Gerrit-Reviewer: Daniel Carvalho 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Jui-min Lee 
Gerrit-Reviewer: kokoro 
Gerrit-CC: Gabe Black 
Gerrit-MessageType: merged
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org


[gem5-dev] [XS] Change in gem5/gem5[develop]: util: Add a missing free() to m5term.

2023-04-08 Thread Gabe Black (Gerrit) via gem5-dev
Gabe Black has submitted this change. (  
https://gem5-review.googlesource.com/c/public/gem5/+/69557?usp=email )


Change subject: util: Add a missing free() to m5term.
..

util: Add a missing free() to m5term.

The "cwd" string is used to store the previous working directory, if
m5term needs to change it to maximize the space it has to create a
unix domain socket using a relative path. That string was not being
freed, which is a small memory leak. This change frees that memory.

Change-Id: I1ad901e7c59614dd938165cae91c3f666d86e872
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/69557
Maintainer: Gabe Black 
Tested-by: kokoro 
Reviewed-by: Jason Lowe-Power 
---
M util/term/term.c
1 file changed, 1 insertion(+), 0 deletions(-)

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




diff --git a/util/term/term.c b/util/term/term.c
index cf3fdda..b1624b2 100644
--- a/util/term/term.c
+++ b/util/term/term.c
@@ -235,6 +235,7 @@
 perror("chdir back failed:");
 exit(1);
 }
+free(cwd);
 }

 // Return the FD of our new connection.

--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/69557?usp=email
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: I1ad901e7c59614dd938165cae91c3f666d86e872
Gerrit-Change-Number: 69557
Gerrit-PatchSet: 2
Gerrit-Owner: Gabe Black 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Jason Lowe-Power 
Gerrit-Reviewer: Jui-min Lee 
Gerrit-Reviewer: Yu-hsin Wang 
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


[gem5-dev] [XS] Change in gem5/gem5[develop]: util: Add a missing free() to m5term.

2023-04-08 Thread Gabe Black (Gerrit) via gem5-dev
Gabe Black has uploaded this change for review. (  
https://gem5-review.googlesource.com/c/public/gem5/+/69557?usp=email )



Change subject: util: Add a missing free() to m5term.
..

util: Add a missing free() to m5term.

The "cwd" string is used to store the previous working directory, if
m5term needs to change it to maximize the space it has to create a
unix domain socket using a relative path. That string was not being
freed, which is a small memory leak. This change frees that memory.

Change-Id: I1ad901e7c59614dd938165cae91c3f666d86e872
---
M util/term/term.c
1 file changed, 1 insertion(+), 0 deletions(-)



diff --git a/util/term/term.c b/util/term/term.c
index cf3fdda..b1624b2 100644
--- a/util/term/term.c
+++ b/util/term/term.c
@@ -235,6 +235,7 @@
 perror("chdir back failed:");
 exit(1);
 }
+free(cwd);
 }

 // Return the FD of our new connection.

--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/69557?usp=email
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: I1ad901e7c59614dd938165cae91c3f666d86e872
Gerrit-Change-Number: 69557
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black 
Gerrit-CC: Gabe Black 
Gerrit-MessageType: newchange
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org


[gem5-dev] [M] Change in gem5/gem5[develop]: dev: Add an "abortPending" method to the DMA port class.

2023-04-08 Thread Gabe Black (Gerrit) via gem5-dev
f (last)
 transmitList.pop_front();
-else
-state->gen.next();
 DPRINTF(DMA, "-- Done\n");
 // If there is more to do, then do so.
 if (!transmitList.empty()) {
@@ -236,8 +288,8 @@
 DPRINTF(DMA, "-- Failed, waiting for retry\n");
 }

-DPRINTF(DMA, "TransmitList: %d, inRetry: %d\n",
-transmitList.size(), inRetry ? 1 : 0);
+DPRINTF(DMA, "TransmitList: %d, retryPending: %d\n",
+transmitList.size(), retryPending ? 1 : 0);
 }

 bool
@@ -246,6 +298,7 @@
 PacketPtr pkt = state->createPacket();
 DPRINTF(DMA, "Sending  DMA for addr: %#x size: %d\n",
 state->gen.addr(), state->gen.size());
+pendingCount++;
 Tick lat = sendAtomic(pkt);

 // Check if we're done, since handleResp may delete state.
@@ -258,6 +311,7 @@
 DmaPort::sendAtomicBdReq(DmaReqState *state)
 {
 bool done = false;
+pendingCount++;

 auto bd_it = memBackdoors.contains(state->gen.addr());
 if (bd_it == memBackdoors.end()) {
@@ -336,7 +390,7 @@
 if (sys->isTimingMode()) {
 // If we are either waiting for a retry or are still waiting after
 // sending the last packet, then do not proceed.
-if (inRetry || sendEvent.scheduled()) {
+if (retryPending || sendEvent.scheduled()) {
 DPRINTF(DMA, "Can't send immediately, waiting to send\n");
 return;
 }
diff --git a/src/dev/dma_device.hh b/src/dev/dma_device.hh
index 2a3468c..92b44bf 100644
--- a/src/dev/dma_device.hh
+++ b/src/dev/dma_device.hh
@@ -85,6 +85,12 @@
  * complete. */
 Event *completionEvent;

+/** Event to call on the device when this transaction is aborted.  
*/

+Event *abortEvent;
+
+/** Whether this request was aborted. */
+bool aborted = false;
+
 /** Total number of bytes that this transaction involves. */
 const Addr totBytes;

@@ -115,8 +121,9 @@

 DmaReqState(Packet::Command _cmd, Addr addr, Addr chunk_sz, Addr  
tb,

 uint8_t *_data, Request::Flags _flags, RequestorID _id,
-uint32_t _sid, uint32_t _ssid, Event *ce, Tick _delay)
-: completionEvent(ce), totBytes(tb), delay(_delay),
+uint32_t _sid, uint32_t _ssid, Event *ce, Tick _delay,
+Event *ae=nullptr)
+: completionEvent(ce), abortEvent(ae), totBytes(tb),  
delay(_delay),

   gen(addr, tb, chunk_sz), data(_data), flags(_flags), id(_id),
   sid(_sid), ssid(_ssid), cmd(_cmd)
 {}
@@ -168,6 +175,11 @@

 /** The packet (if any) waiting for a retry to send. */
 PacketPtr inRetry = nullptr;
+/**
+ * Whether the other side expects us to wait for a retry. We may have
+ * decided not to actually send the packet by the time we get the  
retry.

+ */
+bool retryPending = false;

 /** Default streamId */
 const uint32_t defaultSid;
@@ -195,6 +207,9 @@
   uint8_t *data, uint32_t sid, uint32_t ssid, Tick delay,
   Request::Flags flag=0);

+// Abort and remove any pending DMA transmissions.
+void abortPending();
+
 bool dmaPending() const { return pendingCount > 0; }

 DrainState drain() override;

--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/69437?usp=email
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: Ie5f2c702530656a0c4590461369d430abead14cd
Gerrit-Change-Number: 69437
Gerrit-PatchSet: 3
Gerrit-Owner: Gabe Black 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Giacomo Travaglini 
Gerrit-Reviewer: Jui-min Lee 
Gerrit-Reviewer: kokoro 
Gerrit-CC: Gabe Black 
Gerrit-MessageType: merged
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org


[gem5-dev] [M] Change in gem5/gem5[develop]: util: Make m5term able to connect to unix domain sockets.

2023-04-05 Thread Gabe Black (Gerrit) via gem5-dev
(cwd, PATH_MAX)) {
+perror("getcwd failed");
+exit(1);
+}
+char *dirc = strdup(path);
+if (!dirc) {
+perror("strdup failed");
+exit(1);
+}
+char *dname = dirname(dirc);
+if (chdir(dname) != 0) {
+perror("chdir to socket dir failed");
+exit(1);
+}
+free(dirc);
+
+// Replace the path with just the filename part. We still have a
+// pointer to the cpath argument, so we can clean it up later.
+path = basename(path);
+}
+
+// Copy the path into sun_path.
+strncpy(sun_path, path, path_size);
+
+// Figure out how much actual data we have in sockaddr_un.
+int struct_len = (char *)sun_path + path_size - (char *)
+
+// Actually connect to the socket.
+if (connect(s, (struct sockaddr *), struct_len) == -1) {
+// If that didn't work, switch our dir back and error out.
+if (cwd)
+chdir(cwd);
+errx(1, "Failed to connect");
+}
+
+// We're connected, clean up memory and switch the current dir back.
+free(path_buf);
+if (cwd) {
+if (chdir(cwd) != 0) {
+perror("chdir back failed:");
+exit(1);
+}
+}
+
+// Return the FD of our new connection.
+return s;
+}
+
+/*
  * readwrite()
  * Loop that selects on the network file descriptor and stdin.
  * Changed from poll() by Ali Saidi to make work on Mac OS X >= 10.4
@@ -165,7 +271,8 @@
 n = select(max_fd, _fds, NULL, NULL, );
 if (n < 0) {
 close(nfd);
-perror("Select Error:");
+perror("Select Error");
+exit(1);
 }

 if (n == 0) {
@@ -221,7 +328,8 @@
 void
 usage(int ret)
 {
-fprintf(stderr, "usage: %s hostname port\n", progname);
+fprintf(stderr, "usage: %s [hostname] port\n", progname);
+fprintf(stderr, "usage: %s --unix socket\n", progname);
 if (ret)
 exit(1);
 }

--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/69167?usp=email
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: I3a71eb8ef80018546f3bbf9d781770bd37ecec09
Gerrit-Change-Number: 69167
Gerrit-PatchSet: 8
Gerrit-Owner: Gabe Black 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Jui-min Lee 
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


[gem5-dev] [M] Change in gem5/gem5[develop]: dev: Add an "abortPending" method to the DMA port class.

2023-04-05 Thread Gabe Black (Gerrit) via gem5-dev
for retry\n");
 }

-DPRINTF(DMA, "TransmitList: %d, inRetry: %d\n",
-transmitList.size(), inRetry ? 1 : 0);
+DPRINTF(DMA, "TransmitList: %d, retryPending: %d\n",
+transmitList.size(), retryPending ? 1 : 0);
 }

 bool
@@ -246,6 +297,7 @@
 PacketPtr pkt = state->createPacket();
 DPRINTF(DMA, "Sending  DMA for addr: %#x size: %d\n",
 state->gen.addr(), state->gen.size());
+pendingCount++;
 Tick lat = sendAtomic(pkt);

 // Check if we're done, since handleResp may delete state.
@@ -258,6 +310,7 @@
 DmaPort::sendAtomicBdReq(DmaReqState *state)
 {
 bool done = false;
+pendingCount++;

 auto bd_it = memBackdoors.contains(state->gen.addr());
 if (bd_it == memBackdoors.end()) {
@@ -336,7 +389,7 @@
 if (sys->isTimingMode()) {
 // If we are either waiting for a retry or are still waiting after
 // sending the last packet, then do not proceed.
-if (inRetry || sendEvent.scheduled()) {
+if (retryPending || sendEvent.scheduled()) {
 DPRINTF(DMA, "Can't send immediately, waiting to send\n");
 return;
 }
diff --git a/src/dev/dma_device.hh b/src/dev/dma_device.hh
index 2a3468c..92b44bf 100644
--- a/src/dev/dma_device.hh
+++ b/src/dev/dma_device.hh
@@ -85,6 +85,12 @@
  * complete. */
 Event *completionEvent;

+/** Event to call on the device when this transaction is aborted.  
*/

+Event *abortEvent;
+
+/** Whether this request was aborted. */
+bool aborted = false;
+
 /** Total number of bytes that this transaction involves. */
 const Addr totBytes;

@@ -115,8 +121,9 @@

 DmaReqState(Packet::Command _cmd, Addr addr, Addr chunk_sz, Addr  
tb,

 uint8_t *_data, Request::Flags _flags, RequestorID _id,
-uint32_t _sid, uint32_t _ssid, Event *ce, Tick _delay)
-: completionEvent(ce), totBytes(tb), delay(_delay),
+uint32_t _sid, uint32_t _ssid, Event *ce, Tick _delay,
+Event *ae=nullptr)
+: completionEvent(ce), abortEvent(ae), totBytes(tb),  
delay(_delay),

   gen(addr, tb, chunk_sz), data(_data), flags(_flags), id(_id),
   sid(_sid), ssid(_ssid), cmd(_cmd)
 {}
@@ -168,6 +175,11 @@

 /** The packet (if any) waiting for a retry to send. */
 PacketPtr inRetry = nullptr;
+/**
+ * Whether the other side expects us to wait for a retry. We may have
+ * decided not to actually send the packet by the time we get the  
retry.

+ */
+bool retryPending = false;

 /** Default streamId */
 const uint32_t defaultSid;
@@ -195,6 +207,9 @@
   uint8_t *data, uint32_t sid, uint32_t ssid, Tick delay,
   Request::Flags flag=0);

+// Abort and remove any pending DMA transmissions.
+void abortPending();
+
 bool dmaPending() const { return pendingCount > 0; }

 DrainState drain() override;

--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/69437?usp=email
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: Ie5f2c702530656a0c4590461369d430abead14cd
Gerrit-Change-Number: 69437
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black 
Gerrit-CC: Gabe Black 
Gerrit-MessageType: newchange
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org


[gem5-dev] [M] Change in gem5/gem5[develop]: base: Abstract the AF_INET-ness out of ListenSocket.

2023-04-05 Thread Gabe Black (Gerrit) via gem5-dev
istenSocketConfig
@@ -155,14 +165,24 @@

 static inline ListenSocketConfig listenSocketEmptyConfig() { return {}; }

-ListenSocketConfig listenSocketInetConfig(int port);
+// AF_INET based sockets.

-inline static std::ostream &
-operator << (std::ostream , const ListenSocket )
+class ListenSocketInet : public ListenSocket
 {
-socket.output(os);
-return os;
-}
+  protected:
+int _port;
+
+virtual bool listen(int port);
+
+  public:
+ListenSocketInet(const std::string &_name, int port);
+
+int accept() override;
+void listen() override;
+void output(std::ostream ) const override;
+};
+
+ListenSocketConfig listenSocketInetConfig(int port);

 } // namespace gem5

diff --git a/src/base/socket.test.cc b/src/base/socket.test.cc
index 8e1c25b..0f0de54 100644
--- a/src/base/socket.test.cc
+++ b/src/base/socket.test.cc
@@ -118,10 +118,10 @@
 EXPECT_EQ(truncated_addr, sock_addr.formattedPath);
 }

-class MockListenSocket : public ListenSocket
+class MockListenSocket : public ListenSocketInet
 {
   public:
-MockListenSocket(int port) : ListenSocket("mock", port) {}
+MockListenSocket(int port) : ListenSocketInet("mock", port) {}
 /*
  * This mock Listen Socket is used to ensure the static variables are  
reset
  * back to their default values after deconstruction (i.e., after a  
test


--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/69163?usp=email
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: I035621463a7f799c1d36a500ed933dc056238e5e
Gerrit-Change-Number: 69163
Gerrit-PatchSet: 6
Gerrit-Owner: Gabe Black 
Gerrit-Reviewer: Bobby Bruce 
Gerrit-Reviewer: Daniel Carvalho 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Jui-min Lee 
Gerrit-Reviewer: Yu-hsin Wang 
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


[gem5-dev] [M] Change in gem5/gem5[develop]: base,cpu,dev: Add a level of indirection for ListenSockets.

2023-03-29 Thread Gabe Black (Gerrit) via gem5-dev
ev/serial/terminal.hh
index bd6711d..03adc9f 100644
--- a/src/dev/serial/terminal.hh
+++ b/src/dev/serial/terminal.hh
@@ -101,7 +101,7 @@
 OutputStream * terminalDump(const TerminalParams );

   protected:
-ListenSocket listener;
+ListenSocketPtr listener;

 void listen();
 void accept();

--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/69162?usp=email
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: I8c959e2c3400caec8242e693e11330e072bc2c5f
Gerrit-Change-Number: 69162
Gerrit-PatchSet: 4
Gerrit-Owner: Gabe Black 
Gerrit-Reviewer: Bobby Bruce 
Gerrit-Reviewer: Daniel Carvalho 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Jason Lowe-Power 
Gerrit-Reviewer: Jui-min Lee 
Gerrit-Reviewer: Yu-hsin Wang 
Gerrit-Reviewer: kokoro 
Gerrit-CC: Gabe Black 
Gerrit-MessageType: merged
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org


[gem5-dev] [M] Change in gem5/gem5[develop]: base,cpu,dev,sim: Pull common logic into ListenSocket::listen().

2023-03-28 Thread Gabe Black (Gerrit) via gem5-dev
 ": can't bind address terminal port %d inuse PID %d\n",
-port, getpid());
-port++;
-}
-
-ccprintf(std::cerr, "%s: Listening for connections on port %d\n",
- name(), port);
+listener.listen();

 listenEvent = new ListenEvent(this, listener.getfd(), POLLIN);
 pollQueue.schedule(listenEvent);
diff --git a/src/dev/serial/terminal.hh b/src/dev/serial/terminal.hh
index 83ea64b..bd6711d 100644
--- a/src/dev/serial/terminal.hh
+++ b/src/dev/serial/terminal.hh
@@ -103,7 +103,7 @@
   protected:
 ListenSocket listener;

-void listen(int port);
+void listen();
 void accept();

   protected:
diff --git a/src/sim/workload.cc b/src/sim/workload.cc
index ceb1029..84b1e40 100644
--- a/src/sim/workload.cc
+++ b/src/sim/workload.cc
@@ -97,8 +97,8 @@
 // Now that we're about to start simulation, wait for GDB connections  
if

 // requested.
 if (gdb && waitForRemoteGDB) {
-inform("%s: Waiting for a remote GDB connection on port %d.",  
name(),

-gdb->port());
+inform("%s: Waiting for a remote GDB connection on %s.", name(),
+gdb->hostSocket());
 gdb->connect();
 }
 }

--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/69160?usp=email
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: Ie371eccc4d0da5e7b90714508e4cb72fb0091875
Gerrit-Change-Number: 69160
Gerrit-PatchSet: 3
Gerrit-Owner: Gabe Black 
Gerrit-Reviewer: Bobby Bruce 
Gerrit-Reviewer: Daniel Carvalho 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Jason Lowe-Power 
Gerrit-Reviewer: Jui-min Lee 
Gerrit-Reviewer: Yu-hsin Wang 
Gerrit-Reviewer: kokoro 
Gerrit-CC: Gabe Black 
Gerrit-MessageType: merged
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org


[gem5-dev] [M] Change in gem5/gem5[develop]: base: Make ListenSocket::listen(int port) protected.

2023-03-28 Thread Gabe Black (Gerrit) via gem5-dev
T_EQ(-1, listen_socket.accept());
 }

--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/69161?usp=email
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: I70752d081cb572a8ae5bf396d2ea43ecc7be1e9c
Gerrit-Change-Number: 69161
Gerrit-PatchSet: 3
Gerrit-Owner: Gabe Black 
Gerrit-Reviewer: Bobby Bruce 
Gerrit-Reviewer: Daniel Carvalho 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Jui-min Lee 
Gerrit-Reviewer: Yu-hsin Wang 
Gerrit-Reviewer: kokoro 
Gerrit-CC: Gabe Black 
Gerrit-MessageType: merged
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org


[gem5-dev] [M] Change in gem5/gem5[develop]: base,cpu,dev: Simplify ListenSocket::listen().

2023-03-22 Thread Gabe Black (Gerrit) via gem5-dev
 EXPECT_ANY_THROW(listen_socket.listen(TestPort1));
-std::string expected = "panic: Socket already listening!\n";
+std::string expected =
+"panic: panic condition listening occurred: "
+"Socket already listening!\n";
 std::string actual = gtestLogOutput.str();
 EXPECT_EQ(expected, actual);
 }
@@ -201,7 +190,9 @@
 gtestLogOutput.str("");
 EXPECT_ANY_THROW(listen_socket.listen(TestPort2));

-std::string expected = "panic: Socket already listening!\n";
+std::string expected =
+"panic: panic condition listening occurred: "
+"Socket already listening!\n";
 std::string actual = gtestLogOutput.str();
 EXPECT_EQ(expected, actual);
 }
diff --git a/src/base/vnc/vncserver.cc b/src/base/vnc/vncserver.cc
index 5792c44..39a1338 100644
--- a/src/base/vnc/vncserver.cc
+++ b/src/base/vnc/vncserver.cc
@@ -164,7 +164,7 @@
 return;
 }

-while (!listener.listen(port, true)) {
+while (!listener.listen(port)) {
 DPRINTF(VNC,
 "can't bind address vnc server port %d in use PID %d\n",
 port, getpid());
diff --git a/src/cpu/nativetrace.cc b/src/cpu/nativetrace.cc
index 5b7d0b9..714787f 100644
--- a/src/cpu/nativetrace.cc
+++ b/src/cpu/nativetrace.cc
@@ -45,8 +45,7 @@
 fatal("All listeners are disabled!");

 int port = 8000;
-while (!native_listener.listen(port, true))
-{
+while (!native_listener.listen(port)) {
 DPRINTF(GDBMisc, "Can't bind port %d\n", port);
 port++;
 }
diff --git a/src/dev/net/ethertap.cc b/src/dev/net/ethertap.cc
index b28f255..0769ad1 100644
--- a/src/dev/net/ethertap.cc
+++ b/src/dev/net/ethertap.cc
@@ -259,7 +259,7 @@
 void
 TapListener::listen()
 {
-while (!listener.listen(port, true)) {
+while (!listener.listen(port)) {
 DPRINTF(Ethernet, "TapListener(listen): Can't bind port %d\n",  
port);

 port++;
 }
diff --git a/src/dev/serial/terminal.cc b/src/dev/serial/terminal.cc
index fada99c..9564876 100644
--- a/src/dev/serial/terminal.cc
+++ b/src/dev/serial/terminal.cc
@@ -175,7 +175,7 @@
 return;
 }

-while (!listener.listen(port, true)) {
+while (!listener.listen(port)) {
 DPRINTF(Terminal,
 ": can't bind address terminal port %d inuse PID %d\n",
 port, getpid());

--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/69159?usp=email
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: Ie23971aabf2fe4252d27f1887468360722a72379
Gerrit-Change-Number: 69159
Gerrit-PatchSet: 3
Gerrit-Owner: Gabe Black 
Gerrit-Reviewer: Bobby Bruce 
Gerrit-Reviewer: Daniel Carvalho 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Jason Lowe-Power 
Gerrit-Reviewer: Yu-hsin Wang 
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


[gem5-dev] [S] Change in gem5/gem5[develop]: base,dev: Simplify the ListenSocket::accept method.

2023-03-22 Thread Gabe Black (Gerrit) via gem5-dev
Gabe Black has submitted this change. (  
https://gem5-review.googlesource.com/c/public/gem5/+/69158?usp=email )


Change subject: base,dev: Simplify the ListenSocket::accept method.
..

base,dev: Simplify the ListenSocket::accept method.

Remove the nodelay option which is always set to the same thing, and
simplify the logic of the method itself.

Change-Id: I78cd91f99cbaec9abddedbc7dcddc563daedb81f
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/69158
Tested-by: kokoro 
Maintainer: Gabe Black 
Reviewed-by: Yu-hsin Wang 
---
M src/base/remote_gdb.cc
M src/base/socket.cc
M src/base/socket.hh
M src/base/vnc/vncserver.cc
M src/dev/net/ethertap.cc
M src/dev/serial/terminal.cc
6 files changed, 12 insertions(+), 12 deletions(-)

Approvals:
  Gabe Black: Looks good to me, approved
  kokoro: Regressions pass
  Yu-hsin Wang: Looks good to me, approved




diff --git a/src/base/remote_gdb.cc b/src/base/remote_gdb.cc
index dd37a35..b709ac3 100644
--- a/src/base/remote_gdb.cc
+++ b/src/base/remote_gdb.cc
@@ -438,7 +438,7 @@

 pollQueue.remove(incomingConnectionEvent);

-int sfd = listener.accept(true);
+int sfd = listener.accept();

 if (sfd != -1) {
 if (isAttached())
diff --git a/src/base/socket.cc b/src/base/socket.cc
index 23f2b40..0a62a88 100644
--- a/src/base/socket.cc
+++ b/src/base/socket.cc
@@ -239,17 +239,17 @@
 // Open a connection.  Accept will block, so if you don't want it to,
 // make sure a connection is ready before you call accept.
 int
-ListenSocket::accept(bool nodelay)
+ListenSocket::accept()
 {
 struct sockaddr_in sockaddr;
 socklen_t slen = sizeof (sockaddr);
 int sfd = acceptCloexec(fd, (struct sockaddr *), );
-if (sfd != -1 && nodelay) {
-int i = 1;
-if (::setsockopt(sfd, IPPROTO_TCP, TCP_NODELAY, (char *),
- sizeof(i)) < 0)
-warn("ListenSocket(accept): setsockopt() TCP_NODELAY failed!");
-}
+if (sfd == -1)
+return -1;
+
+int i = 1;
+int ret = ::setsockopt(sfd, IPPROTO_TCP, TCP_NODELAY, , sizeof(i));
+warn_if(ret < 0, "ListenSocket(accept): setsockopt() TCP_NODELAY  
failed!");


 return sfd;
 }
diff --git a/src/base/socket.hh b/src/base/socket.hh
index af4a651..aa451b6 100644
--- a/src/base/socket.hh
+++ b/src/base/socket.hh
@@ -104,7 +104,7 @@
 ListenSocket();
 virtual ~ListenSocket();

-virtual int accept(bool nodelay = true);
+virtual int accept();

 virtual bool listen(int port, bool reuse = true);

diff --git a/src/base/vnc/vncserver.cc b/src/base/vnc/vncserver.cc
index c98838a..5792c44 100644
--- a/src/base/vnc/vncserver.cc
+++ b/src/base/vnc/vncserver.cc
@@ -190,7 +190,7 @@
 if (!listener.islistening())
 panic("%s: cannot accept a connection if not listening!", name());

-int fd = listener.accept(true);
+int fd = listener.accept();
 if (fd < 0) {
 warn("%s: failed to accept VNC connection!", name());
 return;
diff --git a/src/dev/net/ethertap.cc b/src/dev/net/ethertap.cc
index 5b1e957..b28f255 100644
--- a/src/dev/net/ethertap.cc
+++ b/src/dev/net/ethertap.cc
@@ -280,7 +280,7 @@
 if (!listener.islistening())
 panic("TapListener(accept): cannot accept if we're not  
listening!");


-int sfd = listener.accept(true);
+int sfd = listener.accept();
 if (sfd != -1)
 tap->attach(sfd);
 }
diff --git a/src/dev/serial/terminal.cc b/src/dev/serial/terminal.cc
index d4108a3..fada99c 100644
--- a/src/dev/serial/terminal.cc
+++ b/src/dev/serial/terminal.cc
@@ -195,7 +195,7 @@
 if (!listener.islistening())
 panic("%s: cannot accept a connection if not listening!", name());

-int fd = listener.accept(true);
+int fd = listener.accept();
 if (data_fd != -1) {
 char message[] = "terminal already attached!\n";
 atomic_write(fd, message, sizeof(message));

--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/69158?usp=email
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: I78cd91f99cbaec9abddedbc7dcddc563daedb81f
Gerrit-Change-Number: 69158
Gerrit-PatchSet: 3
Gerrit-Owner: Gabe Black 
Gerrit-Reviewer: Bobby Bruce 
Gerrit-Reviewer: Daniel Carvalho 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Yu-hsin Wang 
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


[gem5-dev] [XS] Change in gem5/gem5[develop]: base: Flip the default for ListenSocket::accept(bool nodelay).

2023-03-21 Thread Gabe Black (Gerrit) via gem5-dev
Gabe Black has submitted this change. (  
https://gem5-review.googlesource.com/c/public/gem5/+/69157?usp=email )


Change subject: base: Flip the default for ListenSocket::accept(bool  
nodelay).

..

base: Flip the default for ListenSocket::accept(bool nodelay).

This option was almost always overridden from false to true anyway,
except in one place (in the ethertap device) which was likely just by
accident.

This will give external users a chance to remove the option without
changing behavior, so that the option can be removed entirely in a
later change.

Change-Id: I77add40b8131b91997b2aecbfff6c7de0ee9ead9
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/69157
Reviewed-by: Yu-hsin Wang 
Tested-by: kokoro 
Maintainer: Gabe Black 
---
M src/base/socket.hh
1 file changed, 1 insertion(+), 1 deletion(-)

Approvals:
  Gabe Black: Looks good to me, approved
  kokoro: Regressions pass
  Yu-hsin Wang: Looks good to me, approved




diff --git a/src/base/socket.hh b/src/base/socket.hh
index f3b2760..af4a651 100644
--- a/src/base/socket.hh
+++ b/src/base/socket.hh
@@ -104,7 +104,7 @@
 ListenSocket();
 virtual ~ListenSocket();

-virtual int accept(bool nodelay = false);
+virtual int accept(bool nodelay = true);

 virtual bool listen(int port, bool reuse = true);


--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/69157?usp=email
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: I77add40b8131b91997b2aecbfff6c7de0ee9ead9
Gerrit-Change-Number: 69157
Gerrit-PatchSet: 2
Gerrit-Owner: Gabe Black 
Gerrit-Reviewer: Bobby Bruce 
Gerrit-Reviewer: Daniel Carvalho 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Yu-hsin Wang 
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


[gem5-dev] [M] Change in gem5/gem5[develop]: mem: Use HostSocket in the SharedMemoryServer.

2023-03-21 Thread Gabe Black (Gerrit) via gem5-dev
tem* system;

-int serverFd;
+ListenSocketPtr listener;
+
 std::unique_ptr listenSocketEvent;
 std::unordered_map>
 clientSocketEvents;

--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/69168?usp=email
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: I8e05434d08cffaebdf6c68a967e2ee7613c10a76
Gerrit-Change-Number: 69168
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black 
Gerrit-CC: Gabe Black 
Gerrit-MessageType: newchange
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org


[gem5-dev] [M] Change in gem5/gem5[develop]: base: Remove the now unused UnixSocketAddr class and associated code.

2023-03-21 Thread Gabe Black (Gerrit) via gem5-dev
{
-ss << str;
-}
-return ss.str();
-}
-
-} // namespace
-
-TEST(UnixSocketAddrTest, AbstractSocket)
-{
-UnixSocketAddr sock_addr = UnixSocketAddr::build("@abstract");
-EXPECT_EQ(AF_UNIX, sock_addr.addr.sun_family);
-// null byte will not show, so compare from the first byte
-EXPECT_STREQ("abstract", sock_addr.addr.sun_path + 1);
-EXPECT_TRUE(sock_addr.isAbstract);
-EXPECT_STREQ("@abstract", sock_addr.formattedPath.c_str());
-}
-
-TEST(UnixSocketAddrTest, TruncatedAbstractSocket)
-{
-// Test that address is truncated if longer than sizeof(sun_path)
-constexpr size_t MaxSize =  
sizeof(std::declval().sun_path);

-
-// >sizeof(sun_path) bytes
-std::string addr = "@" + repeat("123456789", 100);
-ASSERT_GT(addr.size(), MaxSize);
-std::string truncated_addr = addr.substr(0, MaxSize);
-
-UnixSocketAddr sock_addr = UnixSocketAddr::build(addr);
-EXPECT_EQ(AF_UNIX, sock_addr.addr.sun_family);
-// Use memcmp so that we can compare null bytes as well
-std::string null_formatted = '\0' + truncated_addr.substr(1);
-EXPECT_EQ(0, std::memcmp(null_formatted.c_str(),  
sock_addr.addr.sun_path,

- MaxSize));
-EXPECT_TRUE(sock_addr.isAbstract);
-EXPECT_EQ(truncated_addr, sock_addr.formattedPath);
-}
-
-TEST(UnixSocketAddrTest, FileBasedSocket)
-{
-std::string addr = "/home/parent/dir/x";
-UnixSocketAddr sock_addr = UnixSocketAddr::build(addr);
-EXPECT_EQ(AF_UNIX, sock_addr.addr.sun_family);
-EXPECT_STREQ(addr.c_str(), sock_addr.addr.sun_path);
-EXPECT_FALSE(sock_addr.isAbstract);
-EXPECT_EQ(addr, sock_addr.formattedPath);
-}
-
-TEST(UnixSocketAddrTest, TruncatedFileBasedSocket)
-{
-// sun_path should null terminate, so test that address is truncated if
-// longer than sizeof(sun_path) - 1 bytes.
-constexpr size_t MaxSize =
-sizeof(std::declval().sun_path) - 1;
-
-// >sizeof(sun_path) - 1 bytes
-std::string addr = "/" + repeat("123456789", 100);
-ASSERT_GT(addr.size(), MaxSize);
-std::string truncated_addr = addr.substr(0, MaxSize);
-
-UnixSocketAddr sock_addr = UnixSocketAddr::build(addr);
-EXPECT_EQ(AF_UNIX, sock_addr.addr.sun_family);
-EXPECT_STREQ(truncated_addr.c_str(), sock_addr.addr.sun_path);
-EXPECT_FALSE(sock_addr.isAbstract);
-EXPECT_EQ(truncated_addr, sock_addr.formattedPath);
-}
-
 class MockListenSocket : public ListenSocketInet
 {
   public:

--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/69169?usp=email
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: I3a29b880b2484c5e25071bdef59fc73e1e8c2760
Gerrit-Change-Number: 69169
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black 
Gerrit-CC: Gabe Black 
Gerrit-MessageType: newchange
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org


[gem5-dev] [M] Change in gem5/gem5[develop]: util: Make m5term able to connect to unix domain sockets.

2023-03-21 Thread Gabe Black (Gerrit) via gem5-dev
t(s, (struct sockaddr *), struct_len) == -1) {
+// If that didn't work, switch our dir back and error out.
+if (cwd)
+chdir(cwd);
+errx(1, "Failed to connect");
+}
+
+// We're connected, clean up memory and switch the current dir back.
+free(pathc);
+if (cwd)
+chdir(cwd);
+
+// Return the FD of our new connection.
+return s;
+}
+
+/*
  * readwrite()
  * Loop that selects on the network file descriptor and stdin.
  * Changed from poll() by Ali Saidi to make work on Mac OS X >= 10.4

--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/69167?usp=email
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: I3a71eb8ef80018546f3bbf9d781770bd37ecec09
Gerrit-Change-Number: 69167
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black 
Gerrit-CC: Gabe Black 
Gerrit-MessageType: newchange
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org


[gem5-dev] [M] Change in gem5/gem5[develop]: arch,base,dev,sim: Convert objects to use the HostSocket param type.

2023-03-21 Thread Gabe Black (Gerrit) via gem5-dev
 4e5c951..f342419 100644
--- a/src/base/vnc/vncserver.cc
+++ b/src/base/vnc/vncserver.cc
@@ -117,7 +117,7 @@
  */
 VncServer::VncServer(const Params )
 : VncInput(p), listenEvent(NULL), dataEvent(NULL), number(p.number),
-  listener(listenSocketInetConfig(p.port).build(p.name)),
+  listener(p.port.build(p.name)),
   sendUpdate(false), supportsRawEnc(false), supportsResizeEnc(false)
 {
 if (p.port)
diff --git a/src/dev/net/Ethernet.py b/src/dev/net/Ethernet.py
index 608f25b..72f2061 100644
--- a/src/dev/net/Ethernet.py
+++ b/src/dev/net/Ethernet.py
@@ -147,7 +147,7 @@
 cxx_header = "dev/net/ethertap.hh"
 cxx_class = "gem5::EtherTapStub"

-port = Param.UInt16(3500, "Port helper should send packets to")
+port = Param.HostSocket(3500, "Port/socket helper should send packets  
to")



 class EtherDump(SimObject):
diff --git a/src/dev/net/ethertap.cc b/src/dev/net/ethertap.cc
index 7c7a8dc..c66723b 100644
--- a/src/dev/net/ethertap.cc
+++ b/src/dev/net/ethertap.cc
@@ -249,8 +249,8 @@
 EtherTapStub *tap;

   public:
-TapListener(EtherTapStub *t, int p) :
-listener(listenSocketInetConfig(p).build(t->name())), tap(t) {}
+TapListener(EtherTapStub *t, ListenSocketPtr _listener) :
+listener(std::move(_listener)), tap(t) {}
 ~TapListener() { delete event; }

 void listen();
@@ -287,7 +287,7 @@
 if (ListenSocket::allDisabled())
 fatal("All listeners are disabled! EtherTapStub can't work!");

-listener = new TapListener(this, p.port);
+listener = new TapListener(this, p.port.build(name()));
 listener->listen();
 }

diff --git a/src/dev/serial/Terminal.py b/src/dev/serial/Terminal.py
index c774379..7fc1dce 100644
--- a/src/dev/serial/Terminal.py
+++ b/src/dev/serial/Terminal.py
@@ -51,7 +51,7 @@
 type = "Terminal"
 cxx_header = "dev/serial/terminal.hh"
 cxx_class = "gem5::Terminal"
-port = Param.TcpPort(3456, "listen port")
+port = Param.HostSocket(3456, "listen port")
 number = Param.Int(0, "terminal number")
 outfile = Param.TerminalDump(
 "file", "Selects if and where the terminal is dumping its output"
diff --git a/src/dev/serial/terminal.cc b/src/dev/serial/terminal.cc
index 6e8e435..db4906a 100644
--- a/src/dev/serial/terminal.cc
+++ b/src/dev/serial/terminal.cc
@@ -121,8 +121,7 @@
  */
 Terminal::Terminal(const Params )
 : SerialDevice(p), listenEvent(NULL), dataEvent(NULL),
-  number(p.number), data_fd(-1),
-  listener(listenSocketInetConfig(p.port).build(p.name)),
+  number(p.number), data_fd(-1), listener(p.port.build(p.name)),
   txbuf(16384), rxbuf(16384), outfile(terminalDump(p))
 #if TRACING_ON == 1
   , linebuf(16384)
diff --git a/src/sim/Workload.py b/src/sim/Workload.py
index f5139e1..31ea738 100644
--- a/src/sim/Workload.py
+++ b/src/sim/Workload.py
@@ -36,8 +36,8 @@
 abstract = True

 wait_for_remote_gdb = Param.Bool(False, "Wait for a remote GDB  
connection")

-remote_gdb_port = Param.Int(
-7000, "Default port number used for remote GDB connection"
+remote_gdb_port = Param.HostSocket(
+7000, "Default port/socket used for remote GDB connection"
 )

 @cxxMethod

--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/69166?usp=email
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: Id441c3628f62d60608a07c5cb697786e33199981
Gerrit-Change-Number: 69166
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black 
Gerrit-CC: Gabe Black 
Gerrit-MessageType: newchange
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org


[gem5-dev] [M] Change in gem5/gem5[develop]: base: Make ListenSocket::listen(int port) protected.

2023-03-21 Thread Gabe Black (Gerrit) via gem5-dev


Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: I70752d081cb572a8ae5bf396d2ea43ecc7be1e9c
Gerrit-Change-Number: 69161
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black 
Gerrit-CC: Gabe Black 
Gerrit-MessageType: newchange
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org


[gem5-dev] [M] Change in gem5/gem5[develop]: base: Add support for unix domain sockets in ListenSocket.

2023-03-21 Thread Gabe Black (Gerrit) via gem5-dev
_path[1], path.c_str(), path.size());
+return offsetof(sockaddr_un, sun_path) + path.size();
+}
+
+ListenSocketUnixAbstract::ListenSocketUnixAbstract(
+const std::string &_name, const std::string &_path) :
+ListenSocketUnix(_name),
+path(truncate(_path, sizeof(sockaddr_un::sun_path) - 1))
+{
+}
+
+void
+ListenSocketUnixAbstract::output(std::ostream ) const
+{
+os << "abstract socket \"" << path << "\"";
+}
+
+ListenSocketConfig
+listenSocketUnixAbstractConfig(std::string path)
+{
+return ListenSocketConfig([path](const std::string ) {
+return std::make_unique(name, path);
+});
+}
+
 } // namespace gem5
diff --git a/src/base/socket.hh b/src/base/socket.hh
index e233d85..82e8375 100644
--- a/src/base/socket.hh
+++ b/src/base/socket.hh
@@ -177,6 +177,60 @@

 ListenSocketConfig listenSocketInetConfig(int port);

+// AF_UNIX based sockets.
+
+class ListenSocketUnix : public ListenSocket
+{
+  protected:
+virtual size_t prepSockaddrUn(sockaddr_un ) const = 0;
+
+std::string truncate(const std::string , size_t max_len);
+
+ListenSocketUnix(const std::string &_name) : ListenSocket(_name) {}
+
+  public:
+void listen() override;
+};
+
+class ListenSocketUnixFile : public ListenSocketUnix
+{
+  protected:
+std::string dir;
+std::string resolvedDir;
+std::string fname;
+
+bool unlink() const;
+
+size_t prepSockaddrUn(sockaddr_un ) const;
+
+  public:
+ListenSocketUnixFile(const std::string &_name, const std::string &_dir,
+const std::string &_fname);
+~ListenSocketUnixFile();
+
+void listen() override;
+void output(std::ostream ) const override;
+};
+
+ListenSocketConfig listenSocketUnixFileConfig(
+std::string dir, std::string fname);
+
+class ListenSocketUnixAbstract : public ListenSocketUnix
+{
+  protected:
+std::string path;
+
+size_t prepSockaddrUn(sockaddr_un ) const;
+
+  public:
+ListenSocketUnixAbstract(
+const std::string &_name, const std::string &_path);
+
+void output(std::ostream ) const override;
+};
+
+ListenSocketConfig listenSocketUnixAbstractConfig(std::string path);
+
 } // namespace gem5

 #endif //__SOCKET_HH__
diff --git a/src/base/socket.test.cc b/src/base/socket.test.cc
index 0f0de54..7bf9e18 100644
--- a/src/base/socket.test.cc
+++ b/src/base/socket.test.cc
@@ -207,5 +207,10 @@
 TEST(SocketTest, AcceptError)
 {
 MockListenSocket listen_socket(-1);
-EXPECT_EQ(-1, listen_socket.accept());
+EXPECT_ANY_THROW(listen_socket.accept());
+std::string expected =
+"panic: panic condition sfd == -1 occurred: mock: Failed to  
accept "

+"connection: Bad file descriptor\n";
+std::string actual = gtestLogOutput.str();
+EXPECT_EQ(expected, actual);
 }

--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/69164?usp=email
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: I6a5fa2cd3e4b567829203bf9d61ad2b55c259697
Gerrit-Change-Number: 69164
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black 
Gerrit-CC: Gabe Black 
Gerrit-MessageType: newchange
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org


[gem5-dev] [M] Change in gem5/gem5[develop]: base,python: Add a param type for host sockets.

2023-03-21 Thread Gabe Black (Gerrit) via gem5-dev
ocket = m_native.def_submodule("socket");
+m_socket
+.def("listenSocketEmptyConfig", )
+.def("listenSocketInetConfig", )
+.def("listenSocketUnixFileConfig", )
+.def("listenSocketUnixAbstractConfig",
+);
+
+py::class_(m_socket, "ListenSocketConfig");
+}
+
 void
 pybind_init_core(py::module_ _native)
 {
@@ -334,6 +348,7 @@
 init_net(m_native);
 init_loader(m_native);
 init_pc(m_native);
+init_socket(m_native);
 }

 } // namespace gem5

--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/69165?usp=email
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: I1fc7a579074e849b3becd936238c62fb0d9a2087
Gerrit-Change-Number: 69165
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black 
Gerrit-CC: Gabe Black 
Gerrit-MessageType: newchange
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org


[gem5-dev] [S] Change in gem5/gem5[develop]: base,dev: Simplify the ListenSocket::accept method.

2023-03-21 Thread Gabe Black (Gerrit) via gem5-dev
Gabe Black has uploaded this change for review. (  
https://gem5-review.googlesource.com/c/public/gem5/+/69158?usp=email )



Change subject: base,dev: Simplify the ListenSocket::accept method.
..

base,dev: Simplify the ListenSocket::accept method.

Remove the nodelay option which is always set to the same thing, and
simplify the logic of the method itself.

Change-Id: I78cd91f99cbaec9abddedbc7dcddc563daedb81f
---
M src/base/remote_gdb.cc
M src/base/socket.cc
M src/base/socket.hh
M src/base/vnc/vncserver.cc
M src/dev/net/ethertap.cc
M src/dev/serial/terminal.cc
6 files changed, 12 insertions(+), 12 deletions(-)



diff --git a/src/base/remote_gdb.cc b/src/base/remote_gdb.cc
index dd37a35..b709ac3 100644
--- a/src/base/remote_gdb.cc
+++ b/src/base/remote_gdb.cc
@@ -438,7 +438,7 @@

 pollQueue.remove(incomingConnectionEvent);

-int sfd = listener.accept(true);
+int sfd = listener.accept();

 if (sfd != -1) {
 if (isAttached())
diff --git a/src/base/socket.cc b/src/base/socket.cc
index 23f2b40..0a62a88 100644
--- a/src/base/socket.cc
+++ b/src/base/socket.cc
@@ -239,17 +239,17 @@
 // Open a connection.  Accept will block, so if you don't want it to,
 // make sure a connection is ready before you call accept.
 int
-ListenSocket::accept(bool nodelay)
+ListenSocket::accept()
 {
 struct sockaddr_in sockaddr;
 socklen_t slen = sizeof (sockaddr);
 int sfd = acceptCloexec(fd, (struct sockaddr *), );
-if (sfd != -1 && nodelay) {
-int i = 1;
-if (::setsockopt(sfd, IPPROTO_TCP, TCP_NODELAY, (char *),
- sizeof(i)) < 0)
-warn("ListenSocket(accept): setsockopt() TCP_NODELAY failed!");
-}
+if (sfd == -1)
+return -1;
+
+int i = 1;
+int ret = ::setsockopt(sfd, IPPROTO_TCP, TCP_NODELAY, , sizeof(i));
+warn_if(ret < 0, "ListenSocket(accept): setsockopt() TCP_NODELAY  
failed!");


 return sfd;
 }
diff --git a/src/base/socket.hh b/src/base/socket.hh
index af4a651..aa451b6 100644
--- a/src/base/socket.hh
+++ b/src/base/socket.hh
@@ -104,7 +104,7 @@
 ListenSocket();
 virtual ~ListenSocket();

-virtual int accept(bool nodelay = true);
+virtual int accept();

 virtual bool listen(int port, bool reuse = true);

diff --git a/src/base/vnc/vncserver.cc b/src/base/vnc/vncserver.cc
index c98838a..5792c44 100644
--- a/src/base/vnc/vncserver.cc
+++ b/src/base/vnc/vncserver.cc
@@ -190,7 +190,7 @@
 if (!listener.islistening())
 panic("%s: cannot accept a connection if not listening!", name());

-int fd = listener.accept(true);
+int fd = listener.accept();
 if (fd < 0) {
 warn("%s: failed to accept VNC connection!", name());
 return;
diff --git a/src/dev/net/ethertap.cc b/src/dev/net/ethertap.cc
index 5b1e957..b28f255 100644
--- a/src/dev/net/ethertap.cc
+++ b/src/dev/net/ethertap.cc
@@ -280,7 +280,7 @@
 if (!listener.islistening())
 panic("TapListener(accept): cannot accept if we're not  
listening!");


-int sfd = listener.accept(true);
+int sfd = listener.accept();
 if (sfd != -1)
 tap->attach(sfd);
 }
diff --git a/src/dev/serial/terminal.cc b/src/dev/serial/terminal.cc
index d4108a3..fada99c 100644
--- a/src/dev/serial/terminal.cc
+++ b/src/dev/serial/terminal.cc
@@ -195,7 +195,7 @@
 if (!listener.islistening())
 panic("%s: cannot accept a connection if not listening!", name());

-int fd = listener.accept(true);
+int fd = listener.accept();
 if (data_fd != -1) {
 char message[] = "terminal already attached!\n";
 atomic_write(fd, message, sizeof(message));

--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/69158?usp=email
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: I78cd91f99cbaec9abddedbc7dcddc563daedb81f
Gerrit-Change-Number: 69158
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black 
Gerrit-CC: Gabe Black 
Gerrit-MessageType: newchange
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org


[gem5-dev] [M] Change in gem5/gem5[develop]: base,cpu,dev: Simplify ListenSocket::listen().

2023-03-21 Thread Gabe Black (Gerrit) via gem5-dev
g!\n";
 std::string actual = gtestLogOutput.str();
 EXPECT_EQ(expected, actual);
 }
@@ -201,7 +190,9 @@
 gtestLogOutput.str("");
 EXPECT_ANY_THROW(listen_socket.listen(TestPort2));

-std::string expected = "panic: Socket already listening!\n";
+std::string expected =
+"panic: panic condition listening occurred: "
+"Socket already listening!\n";
 std::string actual = gtestLogOutput.str();
 EXPECT_EQ(expected, actual);
 }
diff --git a/src/base/vnc/vncserver.cc b/src/base/vnc/vncserver.cc
index 5792c44..39a1338 100644
--- a/src/base/vnc/vncserver.cc
+++ b/src/base/vnc/vncserver.cc
@@ -164,7 +164,7 @@
 return;
 }

-while (!listener.listen(port, true)) {
+while (!listener.listen(port)) {
 DPRINTF(VNC,
 "can't bind address vnc server port %d in use PID %d\n",
 port, getpid());
diff --git a/src/cpu/nativetrace.cc b/src/cpu/nativetrace.cc
index 5b7d0b9..714787f 100644
--- a/src/cpu/nativetrace.cc
+++ b/src/cpu/nativetrace.cc
@@ -45,8 +45,7 @@
 fatal("All listeners are disabled!");

 int port = 8000;
-while (!native_listener.listen(port, true))
-{
+while (!native_listener.listen(port)) {
 DPRINTF(GDBMisc, "Can't bind port %d\n", port);
 port++;
 }
diff --git a/src/dev/net/ethertap.cc b/src/dev/net/ethertap.cc
index b28f255..0769ad1 100644
--- a/src/dev/net/ethertap.cc
+++ b/src/dev/net/ethertap.cc
@@ -259,7 +259,7 @@
 void
 TapListener::listen()
 {
-while (!listener.listen(port, true)) {
+while (!listener.listen(port)) {
 DPRINTF(Ethernet, "TapListener(listen): Can't bind port %d\n",  
port);

 port++;
 }
diff --git a/src/dev/serial/terminal.cc b/src/dev/serial/terminal.cc
index fada99c..9564876 100644
--- a/src/dev/serial/terminal.cc
+++ b/src/dev/serial/terminal.cc
@@ -175,7 +175,7 @@
 return;
 }

-while (!listener.listen(port, true)) {
+while (!listener.listen(port)) {
 DPRINTF(Terminal,
 ": can't bind address terminal port %d inuse PID %d\n",
 port, getpid());

--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/69159?usp=email
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: Ie23971aabf2fe4252d27f1887468360722a72379
Gerrit-Change-Number: 69159
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black 
Gerrit-CC: Gabe Black 
Gerrit-MessageType: newchange
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org


[gem5-dev] [M] Change in gem5/gem5[develop]: base,cpu,dev,sim: Pull common logic into ListenSocket::listen().

2023-03-21 Thread Gabe Black (Gerrit) via gem5-dev
istenEvent(this, listener.getfd(), POLLIN);
 pollQueue.schedule(listenEvent);
diff --git a/src/dev/serial/terminal.hh b/src/dev/serial/terminal.hh
index 83ea64b..bd6711d 100644
--- a/src/dev/serial/terminal.hh
+++ b/src/dev/serial/terminal.hh
@@ -103,7 +103,7 @@
   protected:
 ListenSocket listener;

-void listen(int port);
+void listen();
 void accept();

   protected:
diff --git a/src/sim/workload.cc b/src/sim/workload.cc
index ceb1029..84b1e40 100644
--- a/src/sim/workload.cc
+++ b/src/sim/workload.cc
@@ -97,8 +97,8 @@
 // Now that we're about to start simulation, wait for GDB connections  
if

 // requested.
 if (gdb && waitForRemoteGDB) {
-inform("%s: Waiting for a remote GDB connection on port %d.",  
name(),

-gdb->port());
+inform("%s: Waiting for a remote GDB connection on %s.", name(),
+gdb->hostSocket());
 gdb->connect();
 }
 }

--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/69160?usp=email
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: Ie371eccc4d0da5e7b90714508e4cb72fb0091875
Gerrit-Change-Number: 69160
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black 
Gerrit-CC: Gabe Black 
Gerrit-MessageType: newchange
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org


[gem5-dev] [XS] Change in gem5/gem5[develop]: base: Flip the default for ListenSocket::accept(bool nodelay).

2023-03-21 Thread Gabe Black (Gerrit) via gem5-dev
Gabe Black has uploaded this change for review. (  
https://gem5-review.googlesource.com/c/public/gem5/+/69157?usp=email )



Change subject: base: Flip the default for ListenSocket::accept(bool  
nodelay).

..

base: Flip the default for ListenSocket::accept(bool nodelay).

This option was almost always overridden from false to true anyway,
except in one place (in the ethertap device) which was likely just by
accident.

This will give external users a chance to remove the option without
changing behavior, so that the option can be removed entirely in a
later change.

Change-Id: I77add40b8131b91997b2aecbfff6c7de0ee9ead9
---
M src/base/socket.hh
1 file changed, 1 insertion(+), 1 deletion(-)



diff --git a/src/base/socket.hh b/src/base/socket.hh
index f3b2760..af4a651 100644
--- a/src/base/socket.hh
+++ b/src/base/socket.hh
@@ -104,7 +104,7 @@
 ListenSocket();
 virtual ~ListenSocket();

-virtual int accept(bool nodelay = false);
+virtual int accept(bool nodelay = true);

 virtual bool listen(int port, bool reuse = true);


--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/69157?usp=email
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: I77add40b8131b91997b2aecbfff6c7de0ee9ead9
Gerrit-Change-Number: 69157
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black 
Gerrit-CC: Gabe Black 
Gerrit-MessageType: newchange
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org


[gem5-dev] [M] Change in gem5/gem5[develop]: base,cpu,dev: Add a level of indirection for ListenSockets.

2023-03-21 Thread Gabe Black (Gerrit) via gem5-dev
void listen();
 void accept();

--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/69162?usp=email
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: I8c959e2c3400caec8242e693e11330e072bc2c5f
Gerrit-Change-Number: 69162
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black 
Gerrit-CC: Gabe Black 
Gerrit-MessageType: newchange
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org


[gem5-dev] [M] Change in gem5/gem5[develop]: base: Abstract the AF_INET-ness out of ListenSocket.

2023-03-21 Thread Gabe Black (Gerrit) via gem5-dev
erride;
+};
+
+ListenSocketConfig listenSocketInetConfig(int port);

 } // namespace gem5

diff --git a/src/base/socket.test.cc b/src/base/socket.test.cc
index 8e1c25b..0f0de54 100644
--- a/src/base/socket.test.cc
+++ b/src/base/socket.test.cc
@@ -118,10 +118,10 @@
 EXPECT_EQ(truncated_addr, sock_addr.formattedPath);
 }

-class MockListenSocket : public ListenSocket
+class MockListenSocket : public ListenSocketInet
 {
   public:
-MockListenSocket(int port) : ListenSocket("mock", port) {}
+MockListenSocket(int port) : ListenSocketInet("mock", port) {}
 /*
  * This mock Listen Socket is used to ensure the static variables are  
reset
  * back to their default values after deconstruction (i.e., after a  
test


--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/69163?usp=email
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: I035621463a7f799c1d36a500ed933dc056238e5e
Gerrit-Change-Number: 69163
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black 
Gerrit-CC: Gabe Black 
Gerrit-MessageType: newchange
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org


[gem5-dev] [S] Change in gem5/gem5[develop]: mem: Add a parameter which will make a memory truly a ROM.

2023-03-02 Thread Gabe Black (Gerrit) via gem5-dev
Gabe Black has submitted this change. (  
https://gem5-review.googlesource.com/c/public/gem5/+/68557?usp=email )


Change subject: mem: Add a parameter which will make a memory truly a ROM.
..

mem: Add a parameter which will make a memory truly a ROM.

This piggy-backs on the writeOK method which already exists. It also
modifies the flags returned as part of the memory's backdoor
descriptor which doesn't enforce that the memory is read only, but will
let the other party know it's expected not to write to it.

Change-Id: Ib95e619c76c327d302e62a88515a92af11815981
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/68557
Maintainer: Gabe Black 
Tested-by: kokoro 
Reviewed-by: Matthew Poremba 
---
M src/mem/AbstractMemory.py
M src/mem/abstract_mem.cc
M src/mem/abstract_mem.hh
3 files changed, 14 insertions(+), 4 deletions(-)

Approvals:
  Matthew Poremba: Looks good to me, approved
  Gabe Black: Looks good to me, approved
  kokoro: Regressions pass




diff --git a/src/mem/AbstractMemory.py b/src/mem/AbstractMemory.py
index ea88fd8..7ab24bc 100644
--- a/src/mem/AbstractMemory.py
+++ b/src/mem/AbstractMemory.py
@@ -74,3 +74,5 @@
 image_file = Param.String(
 "", "Image to load into memory as its initial contents"
 )
+
+writeable = Param.Bool(True, "Allow writes to this memory")
diff --git a/src/mem/abstract_mem.cc b/src/mem/abstract_mem.cc
index 03f2557..9340f7e 100644
--- a/src/mem/abstract_mem.cc
+++ b/src/mem/abstract_mem.cc
@@ -59,10 +59,11 @@
 AbstractMemory::AbstractMemory(const Params ) :
 ClockedObject(p), range(p.range), pmemAddr(NULL),
 backdoor(params().range, nullptr,
- (MemBackdoor::Flags)(MemBackdoor::Readable |
-  MemBackdoor::Writeable)),
+ (MemBackdoor::Flags)(p.writeable ?
+ MemBackdoor::Readable | MemBackdoor::Writeable :
+ MemBackdoor::Readable)),
 confTableReported(p.conf_table_reported), inAddrMap(p.in_addr_map),
-kvmMap(p.kvm_map), _system(NULL),
+kvmMap(p.kvm_map), writeable(p.writeable), _system(NULL),
 stats(*this)
 {
 panic_if(!range.valid() || !range.size(),
diff --git a/src/mem/abstract_mem.hh b/src/mem/abstract_mem.hh
index 53b7940..7f12487 100644
--- a/src/mem/abstract_mem.hh
+++ b/src/mem/abstract_mem.hh
@@ -129,6 +129,9 @@
 // Should KVM map this memory for the guest
 const bool kvmMap;

+// Are writes allowed to this memory
+const bool writeable;
+
 std::list lockedAddrList;

 // helper function for checkLockedAddrs(): we really want to
@@ -149,8 +152,12 @@
 // requesting execution context), 'true' otherwise.  Note that
 // this method must be called on *all* stores since even
 // non-conditional stores must clear any matching lock addresses.
-bool writeOK(PacketPtr pkt) {
+bool
+writeOK(PacketPtr pkt)
+{
 const RequestPtr  = pkt->req;
+if (!writeable)
+return false;
 if (lockedAddrList.empty()) {
 // no locked addrs: nothing to check, store_conditional fails
 bool isLLSC = pkt->isLLSC();

--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/68557?usp=email
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: Ib95e619c76c327d302e62a88515a92af11815981
Gerrit-Change-Number: 68557
Gerrit-PatchSet: 3
Gerrit-Owner: Gabe Black 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Giacomo Travaglini 
Gerrit-Reviewer: Jui-min Lee 
Gerrit-Reviewer: Matthew Poremba 
Gerrit-Reviewer: Yu-hsin Wang 
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


[gem5-dev] [S] Change in gem5/gem5[develop]: mem: Add a parameter which will make a memory truly a ROM.

2023-03-02 Thread Gabe Black (Gerrit) via gem5-dev
Gabe Black has uploaded this change for review. (  
https://gem5-review.googlesource.com/c/public/gem5/+/68557?usp=email )



Change subject: mem: Add a parameter which will make a memory truly a ROM.
..

mem: Add a parameter which will make a memory truly a ROM.

This piggy-backs on the writeOK method which already exists. It also
modifies the flags returned as part of the memory's backdoor
descriptor which doesn't enforce that the memory is read only, but will
let the other party know it's expected not to write to it.

Bug: 254411221
Test: Used this flag with the GSA's boot ROM and saw that it no longer
Test: accepted a corrupting write which overwrote the reset vector.
Change-Id: Ib95e619c76c327d302e62a88515a92af11815981
---
M src/mem/AbstractMemory.py
M src/mem/abstract_mem.cc
M src/mem/abstract_mem.hh
3 files changed, 14 insertions(+), 4 deletions(-)



diff --git a/src/mem/AbstractMemory.py b/src/mem/AbstractMemory.py
index ea88fd8..7ab24bc 100644
--- a/src/mem/AbstractMemory.py
+++ b/src/mem/AbstractMemory.py
@@ -74,3 +74,5 @@
 image_file = Param.String(
 "", "Image to load into memory as its initial contents"
 )
+
+writeable = Param.Bool(True, "Allow writes to this memory")
diff --git a/src/mem/abstract_mem.cc b/src/mem/abstract_mem.cc
index 03f2557..9340f7e 100644
--- a/src/mem/abstract_mem.cc
+++ b/src/mem/abstract_mem.cc
@@ -59,10 +59,11 @@
 AbstractMemory::AbstractMemory(const Params ) :
 ClockedObject(p), range(p.range), pmemAddr(NULL),
 backdoor(params().range, nullptr,
- (MemBackdoor::Flags)(MemBackdoor::Readable |
-  MemBackdoor::Writeable)),
+ (MemBackdoor::Flags)(p.writeable ?
+ MemBackdoor::Readable | MemBackdoor::Writeable :
+ MemBackdoor::Readable)),
 confTableReported(p.conf_table_reported), inAddrMap(p.in_addr_map),
-kvmMap(p.kvm_map), _system(NULL),
+kvmMap(p.kvm_map), writeable(p.writeable), _system(NULL),
 stats(*this)
 {
 panic_if(!range.valid() || !range.size(),
diff --git a/src/mem/abstract_mem.hh b/src/mem/abstract_mem.hh
index 53b7940..7f12487 100644
--- a/src/mem/abstract_mem.hh
+++ b/src/mem/abstract_mem.hh
@@ -129,6 +129,9 @@
 // Should KVM map this memory for the guest
 const bool kvmMap;

+// Are writes allowed to this memory
+const bool writeable;
+
 std::list lockedAddrList;

 // helper function for checkLockedAddrs(): we really want to
@@ -149,8 +152,12 @@
 // requesting execution context), 'true' otherwise.  Note that
 // this method must be called on *all* stores since even
 // non-conditional stores must clear any matching lock addresses.
-bool writeOK(PacketPtr pkt) {
+bool
+writeOK(PacketPtr pkt)
+{
 const RequestPtr  = pkt->req;
+if (!writeable)
+return false;
 if (lockedAddrList.empty()) {
 // no locked addrs: nothing to check, store_conditional fails
 bool isLLSC = pkt->isLLSC();

--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/68557?usp=email
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: Ib95e619c76c327d302e62a88515a92af11815981
Gerrit-Change-Number: 68557
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black 
Gerrit-CC: Gabe Black 
Gerrit-MessageType: newchange
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org


[gem5-dev] [M] Change in gem5/gem5[develop]: cpu: Add a generic model_reset port on the BaseCPU.

2023-02-09 Thread Gabe Black (Gerrit) via gem5-dev
n;
+}
+
 DPRINTF(Thread, "activate contextId %d\n",
 threadContexts[thread_num]->contextId());
 // Squash enter power gating event while cpu gets activated
@@ -602,6 +617,32 @@
 // we are switching to.
 getInstPort().takeOverFrom(>getInstPort());
 getDataPort().takeOverFrom(>getDataPort());
+
+// Switch over the reset line as well, if necessary.
+if (oldCPU->modelResetPort.isConnected())
+modelResetPort.takeOverFrom(>modelResetPort);
+}
+
+void
+BaseCPU::setReset(bool state)
+{
+for (auto tc: threadContexts) {
+if (state) {
+// As we enter reset, stop execution.
+tc->quiesce();
+} else {
+// As we leave reset, first reset thread state,
+tc->getIsaPtr()->resetThread();
+// reset the decoder in case it had partially decoded  
something,

+tc->getDecoderPtr()->reset();
+// flush the TLBs,
+tc->getMMUPtr()->flushAll();
+// Clear any interrupts,
+interrupts[tc->threadId()]->clearAll();
+// and finally reenable execution.
+tc->activate();
+}
+}
 }

 void
diff --git a/src/cpu/base.hh b/src/cpu/base.hh
index 0d56fba..084d9b9 100644
--- a/src/cpu/base.hh
+++ b/src/cpu/base.hh
@@ -55,6 +55,7 @@
 #include "sim/insttracer.hh"
 #include "sim/probe/pmu.hh"
 #include "sim/probe/probe.hh"
+#include "sim/signal.hh"
 #include "sim/system.hh"

 namespace gem5
@@ -161,6 +162,8 @@
  * group. */
 static std::unique_ptr globalStats;

+SignalSinkPort modelResetPort;
+
   public:

 /**
@@ -338,6 +341,19 @@
 virtual void takeOverFrom(BaseCPU *cpu);

 /**
+ * Set the reset of the CPU to be either asserted or deasserted.
+ *
+ * When asserted, the CPU should be stopped and waiting. When  
deasserted,
+ * the CPU should start running again, unless some other condition  
would

+ * also prevent it. At the point the reset is deasserted, it should be
+ * reinitialized as defined by the ISA it's running and any other  
relevant

+ * part of its configuration (reset address, etc).
+ *
+ * @param state The new state of the reset signal to this CPU.
+ */
+virtual void setReset(bool state);
+
+/**
  * Flush all TLBs in the CPU.
  *
  * This method is mainly used to flush stale translations when

--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/67574?usp=email
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: Ie6b4769298ea224ec5dc88360cbb52ee8fbbf69c
Gerrit-Change-Number: 67574
Gerrit-PatchSet: 6
Gerrit-Owner: Gabe Black 
Gerrit-Reviewer: Earl Ou 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Giacomo Travaglini 
Gerrit-Reviewer: Jason Lowe-Power 
Gerrit-Reviewer: Roger Chang 
Gerrit-Reviewer: Yu-hsin Wang 
Gerrit-Reviewer: kokoro 
Gerrit-CC: Gabe Black 
Gerrit-MessageType: merged
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org


[gem5-dev] [S] Change in gem5/gem5[develop]: dev: Add a definition for VectorResetResponsePort.

2023-02-09 Thread Gabe Black (Gerrit) via gem5-dev
Gabe Black has submitted this change. (  
https://gem5-review.googlesource.com/c/public/gem5/+/67576?usp=email )


Change subject: dev: Add a definition for VectorResetResponsePort.
..

dev: Add a definition for VectorResetResponsePort.

This is just a simple extension of the regular ResetResponsePort, and
is useful if there is a collection of reset pins on a device.

Change-Id: I6ccb21e949d3a51bf8b788ffd23e4b2b02706da9
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/67576
Tested-by: kokoro 
Reviewed-by: Yu-hsin Wang 
Maintainer: Gabe Black 
---
M src/dev/ResetPort.py
1 file changed, 24 insertions(+), 1 deletion(-)

Approvals:
  Yu-hsin Wang: Looks good to me, approved
  kokoro: Regressions pass
  Gabe Black: Looks good to me, approved




diff --git a/src/dev/ResetPort.py b/src/dev/ResetPort.py
index f35bc11..15caa47 100644
--- a/src/dev/ResetPort.py
+++ b/src/dev/ResetPort.py
@@ -42,8 +42,15 @@
 super().__init__(RESET_RESPONSE_ROLE, desc)


-# VectorResetRequestPort presents a bank of artifact reset request
+# VectorResetRequestPort represents a bank of artifact reset request
 # ports.
 class VectorResetRequestPort(VectorPort):
 def __init__(self, desc):
 super().__init__(RESET_REQUEST_ROLE, desc, is_source=True)
+
+
+# VectorResetResponsePort represents a bank of artifact reset request
+# ports.
+class VectorResetResponsePort(VectorPort):
+def __init__(self, desc):
+super().__init__(RESET_RESPONSE_ROLE, desc)

--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/67576?usp=email
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: I6ccb21e949d3a51bf8b788ffd23e4b2b02706da9
Gerrit-Change-Number: 67576
Gerrit-PatchSet: 3
Gerrit-Owner: Gabe Black 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Yu-hsin Wang 
Gerrit-Reviewer: kokoro 
Gerrit-CC: Gabe Black 
Gerrit-MessageType: merged
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org


[gem5-dev] [M] Change in gem5/gem5[develop]: fastmodel: Export the reset signals of the GIC.

2023-02-03 Thread Gabe Black (Gerrit) via gem5-dev
 SCGIC(const SCFastModelGICParams , sc_core::sc_module_name  
_name);


+Port _getPort(const std::string _name, int idx) override;
+
 SignalInterruptInitiatorSocket signalInterrupt;

 std::vector> wakeRequests;
+SignalSender resetPort;
+SignalSender poResetPort;

 void before_end_of_elaboration() override;


--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/67575?usp=email
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: I686b4d973fc3cfff8a3ec05f8c95ee2cb6ff6698
Gerrit-Change-Number: 67575
Gerrit-PatchSet: 3
Gerrit-Owner: Gabe Black 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Jui-min Lee 
Gerrit-Reviewer: Yu-hsin Wang 
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


[gem5-dev] [S] Change in gem5/gem5[develop]: arch-riscv: Implement the resetThread method on the ISA object.

2023-02-02 Thread Gabe Black (Gerrit) via gem5-dev
Gabe Black has submitted this change. (  
https://gem5-review.googlesource.com/c/public/gem5/+/67573?usp=email )


Change subject: arch-riscv: Implement the resetThread method on the ISA  
object.

..

arch-riscv: Implement the resetThread method on the ISA object.

This method invokes a Reset fault on the associated ThreadContext.

Change-Id: Ie0725b06e0b506640b9038a986a9c56d9eed7011
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/67573
Maintainer: Gabe Black 
Tested-by: kokoro 
Reviewed-by: Roger Chang 
---
M src/arch/riscv/isa.cc
M src/arch/riscv/isa.hh
2 files changed, 24 insertions(+), 0 deletions(-)

Approvals:
  Roger Chang: Looks good to me, approved
  kokoro: Regressions pass
  Gabe Black: Looks good to me, approved




diff --git a/src/arch/riscv/isa.cc b/src/arch/riscv/isa.cc
index 6e4c380..3809c61 100644
--- a/src/arch/riscv/isa.cc
+++ b/src/arch/riscv/isa.cc
@@ -34,6 +34,7 @@
 #include 
 #include 

+#include "arch/riscv/faults.hh"
 #include "arch/riscv/interrupts.hh"
 #include "arch/riscv/mmu.hh"
 #include "arch/riscv/pagetable.hh"
@@ -723,6 +724,12 @@
 tc->getCpuPtr()->wakeup(tc->threadId());
 }

+void
+ISA::resetThread()
+{
+Reset().invoke(tc);
+}
+
 } // namespace RiscvISA
 } // namespace gem5

diff --git a/src/arch/riscv/isa.hh b/src/arch/riscv/isa.hh
index e332956..5a2a610 100644
--- a/src/arch/riscv/isa.hh
+++ b/src/arch/riscv/isa.hh
@@ -127,6 +127,8 @@

 void globalClearExclusive() override;

+void resetThread() override;
+
 RiscvType rvType() const { return rv_type; }
 };


--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/67573?usp=email
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: Ie0725b06e0b506640b9038a986a9c56d9eed7011
Gerrit-Change-Number: 67573
Gerrit-PatchSet: 2
Gerrit-Owner: Gabe Black 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Roger Chang 
Gerrit-Reviewer: Yu-hsin Wang 
Gerrit-Reviewer: kokoro 
Gerrit-CC: Giacomo Travaglini 
Gerrit-MessageType: merged
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org


[gem5-dev] [S] Change in gem5/gem5[develop]: arch: Add a virtual method to the BaseISA to reset its ThreadContext.

2023-02-02 Thread Gabe Black (Gerrit) via gem5-dev
Gabe Black has submitted this change. (  
https://gem5-review.googlesource.com/c/public/gem5/+/67572?usp=email )


Change subject: arch: Add a virtual method to the BaseISA to reset its  
ThreadContext.

..

arch: Add a virtual method to the BaseISA to reset its ThreadContext.

This will be used as part of a generic CPU reset mechanism.

Change-Id: I010f6bdaca0cbb6be1799ccdc345c4828515209d
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/67572
Reviewed-by: Giacomo Travaglini 
Maintainer: Gabe Black 
Tested-by: kokoro 
---
M src/arch/generic/isa.hh
1 file changed, 18 insertions(+), 0 deletions(-)

Approvals:
  Gabe Black: Looks good to me, approved
  Giacomo Travaglini: Looks good to me, approved
  kokoro: Regressions pass




diff --git a/src/arch/generic/isa.hh b/src/arch/generic/isa.hh
index e4e7929..e9e4d95 100644
--- a/src/arch/generic/isa.hh
+++ b/src/arch/generic/isa.hh
@@ -43,6 +43,7 @@
 #include 

 #include "arch/generic/pcstate.hh"
+#include "base/logging.hh"
 #include "cpu/reg_class.hh"
 #include "mem/packet.hh"
 #include "mem/request.hh"
@@ -83,6 +84,8 @@
 virtual bool inUserMode() const = 0;
 virtual void copyRegsFrom(ThreadContext *src) = 0;

+virtual void resetThread() { panic("Thread reset not implemented."); }
+
 const RegClasses () const { return _regClasses; }

 // Locked memory handling functions.

--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/67572?usp=email
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: I010f6bdaca0cbb6be1799ccdc345c4828515209d
Gerrit-Change-Number: 67572
Gerrit-PatchSet: 2
Gerrit-Owner: Gabe Black 
Gerrit-Reviewer: Earl Ou 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Giacomo Travaglini 
Gerrit-Reviewer: Roger Chang 
Gerrit-Reviewer: Yu-hsin Wang 
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


[gem5-dev] [S] Change in gem5/gem5[develop]: arch-riscv: Get rid of redundant reset fault invocation.

2023-02-02 Thread Gabe Black (Gerrit) via gem5-dev
Gabe Black has submitted this change. (  
https://gem5-review.googlesource.com/c/public/gem5/+/67571?usp=email )


Change subject: arch-riscv: Get rid of redundant reset fault invocation.
..

arch-riscv: Get rid of redundant reset fault invocation.

It was added in one change, another pending change which also added it
was rebased on top of it, and the redundant addition was left in when
the second change was submitted.

Change-Id: I3faf53bca983d8568af45ec7174c2a064eadc0a6
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/67571
Maintainer: Gabe Black 
Tested-by: kokoro 
Reviewed-by: Roger Chang 
---
M src/arch/riscv/bare_metal/fs_workload.cc
1 file changed, 17 insertions(+), 5 deletions(-)

Approvals:
  Roger Chang: Looks good to me, approved
  kokoro: Regressions pass
  Gabe Black: Looks good to me, approved




diff --git a/src/arch/riscv/bare_metal/fs_workload.cc  
b/src/arch/riscv/bare_metal/fs_workload.cc

index 83f5411..4f7adb3 100644
--- a/src/arch/riscv/bare_metal/fs_workload.cc
+++ b/src/arch/riscv/bare_metal/fs_workload.cc
@@ -59,11 +59,6 @@
 {
 Workload::initState();

-for (auto *tc: system->threads) {
-RiscvISA::Reset().invoke(tc);
-tc->activate();
-}
-
 warn_if(!bootloader->buildImage().write(system->physProxy),
 "Could not load sections to memory.");


--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/67571?usp=email
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: I3faf53bca983d8568af45ec7174c2a064eadc0a6
Gerrit-Change-Number: 67571
Gerrit-PatchSet: 2
Gerrit-Owner: Gabe Black 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Roger Chang 
Gerrit-Reviewer: Yu-hsin Wang 
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


[gem5-dev] [S] Change in gem5/gem5[develop]: dev: Add a definition for VectorResetResponsePort.

2023-02-02 Thread Gabe Black (Gerrit) via gem5-dev
Gabe Black has uploaded this change for review. (  
https://gem5-review.googlesource.com/c/public/gem5/+/67576?usp=email )



Change subject: dev: Add a definition for VectorResetResponsePort.
..

dev: Add a definition for VectorResetResponsePort.

This is just a simple extension of the regular ResetResponsePort, and
is useful if there is a collection of reset pins on a device.

Change-Id: I6ccb21e949d3a51bf8b788ffd23e4b2b02706da9
---
M src/dev/ResetPort.py
1 file changed, 20 insertions(+), 1 deletion(-)



diff --git a/src/dev/ResetPort.py b/src/dev/ResetPort.py
index f35bc11..15caa47 100644
--- a/src/dev/ResetPort.py
+++ b/src/dev/ResetPort.py
@@ -42,8 +42,15 @@
 super().__init__(RESET_RESPONSE_ROLE, desc)


-# VectorResetRequestPort presents a bank of artifact reset request
+# VectorResetRequestPort represents a bank of artifact reset request
 # ports.
 class VectorResetRequestPort(VectorPort):
 def __init__(self, desc):
 super().__init__(RESET_REQUEST_ROLE, desc, is_source=True)
+
+
+# VectorResetResponsePort represents a bank of artifact reset request
+# ports.
+class VectorResetResponsePort(VectorPort):
+def __init__(self, desc):
+super().__init__(RESET_RESPONSE_ROLE, desc)

--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/67576?usp=email
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: I6ccb21e949d3a51bf8b788ffd23e4b2b02706da9
Gerrit-Change-Number: 67576
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black 
Gerrit-CC: Gabe Black 
Gerrit-MessageType: newchange
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org


[gem5-dev] [M] Change in gem5/gem5[develop]: fastmodel: Export the reset signals of the GIC.

2023-02-02 Thread Gabe Black (Gerrit) via gem5-dev
nder poResetPort;

 void before_end_of_elaboration() override;


--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/67575?usp=email
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: I686b4d973fc3cfff8a3ec05f8c95ee2cb6ff6698
Gerrit-Change-Number: 67575
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black 
Gerrit-CC: Gabe Black 
Gerrit-MessageType: newchange
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org


[gem5-dev] [M] Change in gem5/gem5[develop]: cpu: Add a generic model_reset port on the BaseCPU.

2023-02-02 Thread Gabe Black (Gerrit) via gem5-dev
om(>getDataPort());
+
+// Switch over the reset line as well.
+modelResetPort.takeOverFrom(>modelResetPort);
+}
+
+void
+BaseCPU::setReset(bool state)
+{
+for (auto tc: threadContexts) {
+if (state) {
+// As we enter reset, stop execution.
+tc->quiesce();
+} else {
+// As we leave reset, first reset thread state,
+tc->getIsaPtr()->resetThread();
+// reset the decoder in case it had partially decoded  
something,

+tc->getDecoderPtr()->reset();
+// flush the TLBs,
+tc->getMMUPtr()->flushAll();
+// and finally reenable execution.
+tc->activate();
+}
+}
 }

 void
diff --git a/src/cpu/base.hh b/src/cpu/base.hh
index 0d56fba..084d9b9 100644
--- a/src/cpu/base.hh
+++ b/src/cpu/base.hh
@@ -55,6 +55,7 @@
 #include "sim/insttracer.hh"
 #include "sim/probe/pmu.hh"
 #include "sim/probe/probe.hh"
+#include "sim/signal.hh"
 #include "sim/system.hh"

 namespace gem5
@@ -161,6 +162,8 @@
  * group. */
 static std::unique_ptr globalStats;

+SignalSinkPort modelResetPort;
+
   public:

 /**
@@ -338,6 +341,19 @@
 virtual void takeOverFrom(BaseCPU *cpu);

 /**
+ * Set the reset of the CPU to be either asserted or deasserted.
+ *
+ * When asserted, the CPU should be stopped and waiting. When  
deasserted,
+ * the CPU should start running again, unless some other condition  
would

+ * also prevent it. At the point the reset is deasserted, it should be
+ * reinitialized as defined by the ISA it's running and any other  
relevant

+ * part of its configuration (reset address, etc).
+ *
+ * @param state The new state of the reset signal to this CPU.
+ */
+virtual void setReset(bool state);
+
+/**
  * Flush all TLBs in the CPU.
  *
  * This method is mainly used to flush stale translations when

--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/67574?usp=email
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: Ie6b4769298ea224ec5dc88360cbb52ee8fbbf69c
Gerrit-Change-Number: 67574
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black 
Gerrit-CC: Gabe Black 
Gerrit-MessageType: newchange
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org


[gem5-dev] [S] Change in gem5/gem5[develop]: arch-riscv: Implement the resetThread method on the ISA object.

2023-02-02 Thread Gabe Black (Gerrit) via gem5-dev
Gabe Black has uploaded this change for review. (  
https://gem5-review.googlesource.com/c/public/gem5/+/67573?usp=email )



Change subject: arch-riscv: Implement the resetThread method on the ISA  
object.

..

arch-riscv: Implement the resetThread method on the ISA object.

This method invokes a Reset fault on the associated ThreadContext.

Change-Id: Ie0725b06e0b506640b9038a986a9c56d9eed7011
---
M src/arch/riscv/isa.cc
M src/arch/riscv/isa.hh
2 files changed, 20 insertions(+), 0 deletions(-)



diff --git a/src/arch/riscv/isa.cc b/src/arch/riscv/isa.cc
index 6e4c380..3809c61 100644
--- a/src/arch/riscv/isa.cc
+++ b/src/arch/riscv/isa.cc
@@ -34,6 +34,7 @@
 #include 
 #include 

+#include "arch/riscv/faults.hh"
 #include "arch/riscv/interrupts.hh"
 #include "arch/riscv/mmu.hh"
 #include "arch/riscv/pagetable.hh"
@@ -723,6 +724,12 @@
 tc->getCpuPtr()->wakeup(tc->threadId());
 }

+void
+ISA::resetThread()
+{
+Reset().invoke(tc);
+}
+
 } // namespace RiscvISA
 } // namespace gem5

diff --git a/src/arch/riscv/isa.hh b/src/arch/riscv/isa.hh
index e332956..5a2a610 100644
--- a/src/arch/riscv/isa.hh
+++ b/src/arch/riscv/isa.hh
@@ -127,6 +127,8 @@

 void globalClearExclusive() override;

+void resetThread() override;
+
 RiscvType rvType() const { return rv_type; }
 };


--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/67573?usp=email
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: Ie0725b06e0b506640b9038a986a9c56d9eed7011
Gerrit-Change-Number: 67573
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black 
Gerrit-CC: Gabe Black 
Gerrit-MessageType: newchange
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org


[gem5-dev] [S] Change in gem5/gem5[develop]: arch-riscv: Get rid of redundant reset fault invocation.

2023-02-02 Thread Gabe Black (Gerrit) via gem5-dev
Gabe Black has uploaded this change for review. (  
https://gem5-review.googlesource.com/c/public/gem5/+/67571?usp=email )



Change subject: arch-riscv: Get rid of redundant reset fault invocation.
..

arch-riscv: Get rid of redundant reset fault invocation.

It was added in one change, another pending change which also added it
was rebased on top of it, and the redundant addition was left in when
the second change was submitted.

Change-Id: I3faf53bca983d8568af45ec7174c2a064eadc0a6
---
M src/arch/riscv/bare_metal/fs_workload.cc
1 file changed, 13 insertions(+), 5 deletions(-)



diff --git a/src/arch/riscv/bare_metal/fs_workload.cc  
b/src/arch/riscv/bare_metal/fs_workload.cc

index 83f5411..4f7adb3 100644
--- a/src/arch/riscv/bare_metal/fs_workload.cc
+++ b/src/arch/riscv/bare_metal/fs_workload.cc
@@ -59,11 +59,6 @@
 {
 Workload::initState();

-for (auto *tc: system->threads) {
-RiscvISA::Reset().invoke(tc);
-tc->activate();
-}
-
 warn_if(!bootloader->buildImage().write(system->physProxy),
 "Could not load sections to memory.");


--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/67571?usp=email
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: I3faf53bca983d8568af45ec7174c2a064eadc0a6
Gerrit-Change-Number: 67571
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black 
Gerrit-CC: Gabe Black 
Gerrit-MessageType: newchange
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org


[gem5-dev] [S] Change in gem5/gem5[develop]: arch: Add a virtual method to the BaseISA to reset its ThreadContext.

2023-02-02 Thread Gabe Black (Gerrit) via gem5-dev
Gabe Black has uploaded this change for review. (  
https://gem5-review.googlesource.com/c/public/gem5/+/67572?usp=email )



Change subject: arch: Add a virtual method to the BaseISA to reset its  
ThreadContext.

..

arch: Add a virtual method to the BaseISA to reset its ThreadContext.

This will be used as part of a generic CPU reset mechanism.

Change-Id: I010f6bdaca0cbb6be1799ccdc345c4828515209d
---
M src/arch/generic/isa.hh
1 file changed, 14 insertions(+), 0 deletions(-)



diff --git a/src/arch/generic/isa.hh b/src/arch/generic/isa.hh
index e4e7929..e9e4d95 100644
--- a/src/arch/generic/isa.hh
+++ b/src/arch/generic/isa.hh
@@ -43,6 +43,7 @@
 #include 

 #include "arch/generic/pcstate.hh"
+#include "base/logging.hh"
 #include "cpu/reg_class.hh"
 #include "mem/packet.hh"
 #include "mem/request.hh"
@@ -83,6 +84,8 @@
 virtual bool inUserMode() const = 0;
 virtual void copyRegsFrom(ThreadContext *src) = 0;

+virtual void resetThread() { panic("Thread reset not implemented."); }
+
 const RegClasses () const { return _regClasses; }

 // Locked memory handling functions.

--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/67572?usp=email
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: I010f6bdaca0cbb6be1799ccdc345c4828515209d
Gerrit-Change-Number: 67572
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black 
Gerrit-CC: Gabe Black 
Gerrit-MessageType: newchange
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org


[gem5-dev] [M] Change in gem5/gem5[develop]: sim: Add some helpers for setting up Signal*Ports in python.

2023-02-01 Thread Gabe Black (Gerrit) via gem5-dev
k_role, desc)
+
+return SignalSinkPort
+
+
+def VectorSignalSinkPort(type_signature):
+source_role = SIGNAL_SOURCE_ROLE_TEMPLATE % type_signature
+sink_role = SIGNAL_SINK_ROLE_TEMPLATE % type_signature
+Port.compat(source_role, sink_role)
+
+class VectorSignalSinkPort(VectorPort):
+def __init__(self, desc):
+super().__init__(sink_role, desc)
+
+return VectorSignalSinkPort

--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/67511?usp=email
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: If6359b2c69f34ff775cd9aa01272ac487db08bf7
Gerrit-Change-Number: 67511
Gerrit-PatchSet: 3
Gerrit-Owner: Gabe Black 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Jason Lowe-Power 
Gerrit-Reviewer: Yu-hsin Wang 
Gerrit-Reviewer: kokoro 
Gerrit-CC: Gabe Black 
Gerrit-MessageType: merged
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org


[gem5-dev] [M] Change in gem5/gem5[develop]: sim: Add some helpers for setting up Signal*Ports in python.

2023-02-01 Thread Gabe Black (Gerrit) via gem5-dev
+class VectorSignalSinkPort(VectorPort):
+def __init__(self, desc):
+super().__init__(sink_role, desc)
+
+return VectorSignalSinkPort

--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/67511?usp=email
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: If6359b2c69f34ff775cd9aa01272ac487db08bf7
Gerrit-Change-Number: 67511
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black 
Gerrit-CC: Gabe Black 
Gerrit-MessageType: newchange
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org


[gem5-dev] [S] Change in gem5/gem5[develop]: fastmodel: Export the "reset_in" reset signal from the PL330.

2023-01-15 Thread Gabe Black (Gerrit) via gem5-dev
nsubscribe, or for help writing mail filters, visit  
https://gem5-review.googlesource.com/settings


Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: I6b61fed6eb1566d131d4b0367fe4ae65031b25f8
Gerrit-Change-Number: 67351
Gerrit-PatchSet: 3
Gerrit-Owner: Gabe Black 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Yu-hsin Wang 
Gerrit-Reviewer: kokoro 
Gerrit-CC: Gabe Black 
Gerrit-MessageType: merged
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org


[gem5-dev] [S] Change in gem5/gem5[develop]: fastmodel: Export the "reset_in" reset signal from the PL330.

2023-01-13 Thread Gabe Black (Gerrit) via gem5-dev
/67351?usp=email
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: I6b61fed6eb1566d131d4b0367fe4ae65031b25f8
Gerrit-Change-Number: 67351
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black 
Gerrit-Reviewer: Yu-hsin Wang 
Gerrit-Reviewer: kokoro 
Gerrit-CC: Gabe Black 
Gerrit-Attention: Yu-hsin Wang 
Gerrit-MessageType: newchange
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org


[gem5-dev] [M] Change in gem5/gem5[develop]: dev: Add a "resetter" callback to the typed register class.

2023-01-11 Thread Gabe Black (Gerrit) via gem5-dev
 + 1;
+EXPECT_EQ(reg.get(), initial_value + 1);
+
+reg.reset();
+
+EXPECT_EQ(reg.get(), initial_value);
+}
+
+// Set a custom resetter for a register.
+TEST_F(TypedRegisterTest, Resetter)
+{
+RegisterBankLE::Register *reg_ptr = nullptr;
+
+reg.resetter([_ptr](auto ) {
+reg_ptr = 
+});
+
+reg.reset();
+
+EXPECT_EQ(reg_ptr, );
+}
+
+// Set a custom resetter for a register which is a class method.
+TEST_F(TypedRegisterTest, ResetterMF)
+{
+using Reg = RegisterBankLE::Register;
+
+struct ResetStruct
+{
+Reg *reg_ptr = nullptr;
+
+void
+resetter(Reg )
+{
+reg_ptr = 
+}
+} reset_struct;
+
+reg.resetter(_struct, ::resetter);
+
+reg.reset();
+
+EXPECT_EQ(reset_struct.reg_ptr, );
+}
+
 TEST_F(TypedRegisterTest, Serialize)
 {
 std::ostringstream os;

--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/67203?usp=email
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: Ia74b36616fd459c1dbed9304568903a76a4b55de
Gerrit-Change-Number: 67203
Gerrit-PatchSet: 3
Gerrit-Owner: Gabe Black 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Jui-min Lee 
Gerrit-Reviewer: Yu-hsin Wang 
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


[gem5-dev] [M] Change in gem5/gem5[develop]: dev: Add a "resetter" callback to the typed register class.

2023-01-10 Thread Gabe Black (Gerrit) via gem5-dev
EQ(reg.get(), initial_value + 1);
+
+reg.reset();
+
+EXPECT_EQ(reg.get(), initial_value);
+}
+
+// Set a custom resetter for a register.
+TEST_F(TypedRegisterTest, Resetter)
+{
+RegisterBankLE::Register *reg_ptr = nullptr;
+
+reg.resetter([_ptr](auto ) {
+reg_ptr = 
+});
+
+reg.reset();
+
+EXPECT_EQ(reg_ptr, );
+}
+
+// Set a custom resetter for a register which is a class method.
+TEST_F(TypedRegisterTest, ResetterMF)
+{
+using Reg = RegisterBankLE::Register;
+
+struct ResetStruct
+{
+Reg *reg_ptr = nullptr;
+
+void
+resetter(Reg )
+{
+reg_ptr = 
+}
+} reset_struct;
+
+reg.resetter(_struct, ::resetter);
+
+reg.reset();
+
+EXPECT_EQ(reset_struct.reg_ptr, );
+}
+
 TEST_F(TypedRegisterTest, Serialize)
 {
 std::ostringstream os;

--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/67203?usp=email
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: Ia74b36616fd459c1dbed9304568903a76a4b55de
Gerrit-Change-Number: 67203
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black 
Gerrit-CC: Gabe Black 
Gerrit-MessageType: newchange
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org


[gem5-dev] [L] Change in gem5/gem5[develop]: fastmodel,dev: Replace the reset port with a Signal*Port.

2022-12-15 Thread Gabe Black (Gerrit) via gem5-dev
ID id, Device *dev) :
-ResetResponsePortBase(name, id), device(dev) {}
-void requestReset() override { device->requestReset(); }
-
-  private:
-Device *device = nullptr;
-};
-
-class ResetRequestPort : public Port
-{
-  public:
-ResetRequestPort(const std::string &_name, PortID _id)
-: Port(_name, _id) {}
-void bind(Port ) override;
-void unbind() override;
-void requestReset();
-
-  private:
-ResetResponsePortBase *peer = nullptr;
-};
-
-} // namespace gem5
-
-#endif // __DEV_RESET_PORT_HH__

--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/66675?usp=email
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: Id98bef901ab61ac5b200dbbe49439bb2d2e6c57f
Gerrit-Change-Number: 66675
Gerrit-PatchSet: 3
Gerrit-Owner: Gabe Black 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Jui-min Lee 
Gerrit-Reviewer: Yu-hsin Wang 
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


[gem5-dev] [M] Change in gem5/gem5[develop]: dev: Introduce a reset() method on RegisterBank and Register classes.

2022-12-15 Thread Gabe Black (Gerrit) via gem5-dev
void serialize(std::ostream ) const override {}
 bool unserialize(const std::string ) override { return true;  
}

+
+void
+reset() override
+{
+_reg1.reset();
+_reg2.reset();
+}
 };

 class BankedRegister : public PairedRegister

--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/66671?usp=email
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: I73fe9874fcb69feed33611a320dcca85c0de2d0e
Gerrit-Change-Number: 66671
Gerrit-PatchSet: 3
Gerrit-Owner: Gabe Black 
Gerrit-Reviewer: Bobby Bruce 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Jui-min Lee 
Gerrit-Reviewer: Yu-hsin Wang 
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


[gem5-dev] [M] Change in gem5/gem5[develop]: fastmodel,dev: Rework the Int*Pin classes with Signal*Port.

2022-12-15 Thread Gabe Black (Gerrit) via gem5-dev
 namespace gem5
 {

-class IntSourcePinBase;
-
-class IntSinkPinBase : public Port
+class IntSinkPinBase : public SignalSinkPort
 {
-  protected:
-friend IntSourcePinBase;
+  private:
+const int _number = 0;

-IntSourcePinBase *source = nullptr;
+  public:

-int _number = 0;
-bool _state = false;
+template 
+IntSinkPinBase(const std::string &_name, PortID _id, Device *dev,
+int num) :
+SignalSinkPort(_name, _id), _number(num)
+{
+onChange([dev, num](const bool _val) {
+if (new_val)
+dev->raiseInterruptPin(num);
+else
+dev->lowerInterruptPin(num);
+});
+}
+
+template 
+IntSinkPinBase(const std::string &_name, PortID _id, Device *dev) :
+IntSinkPinBase(_name, _id, dev, _id)
+{}

 IntSinkPinBase(const std::string &_name, PortID _id, int num) :
-Port(_name, _id), _number(num)
+SignalSinkPort(_name, _id), _number(num)
 {}

-virtual void raiseOnDevice() = 0;
-virtual void lowerOnDevice() = 0;
+IntSinkPinBase(const std::string &_name, PortID _id) :
+IntSinkPinBase(_name, _id, _id)
+{}

-void
-raise()
-{
-_state = true;
-raiseOnDevice();
-}
-
-void
-lower()
-{
-_state = false;
-lowerOnDevice();
-}
-
-  public:
 int number() { return _number; }
-bool state() { return _state; }
-
-void bind(Port ) override;
-void unbind() override;
 };

-template 
-class IntSinkPin : public IntSinkPinBase
+template 
+using IntSinkPin = IntSinkPinBase;
+
+class IntSourcePinBase : public SignalSourcePort
 {
-  private:
-Device *device = nullptr;
-
-void raiseOnDevice() override { device->raiseInterruptPin(number()); }
-void lowerOnDevice() override { device->lowerInterruptPin(number()); }
-
   public:
-IntSinkPin(const std::string &_name, PortID _id, Device *dev, int  
num) :

-IntSinkPinBase(_name, _id, num), device(dev) {}
-IntSinkPin(const std::string &_name, PortID _id, Device *dev) :
-IntSinkPin(_name, _id, dev, _id) {}
-};
-
-class IntSourcePinBase : public Port
-{
-  private:
-IntSinkPinBase *sink = nullptr;
-
-  public:
-IntSourcePinBase(const std::string &_name, PortID _id):
-Port(_name, _id)
+template 
+IntSourcePinBase(const std::string &_name, PortID _id, Device *owner) :
+SignalSourcePort(_name, _id)
 {}

-void raise() { sink->raise(); }
-void lower() { sink->lower(); }
-
-void bind(Port ) override;
-void unbind() override;
-};
-
-template 
-class IntSourcePin : public IntSourcePinBase
-{
-  public:
-IntSourcePin(const std::string &_name, PortID _id, Device *owner) :
-IntSourcePinBase(_name, _id)
+IntSourcePinBase(const std::string &_name, PortID _id) :
+SignalSourcePort(_name, _id)
 {}
+
+void raise() { set(true); }
+void lower() { set(false); }
 };

+template 
+using IntSourcePin = IntSourcePinBase;
+
 } // namespace gem5

 #endif //__DEV_INTPIN_HH__

--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/66673?usp=email
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: I1325074d0ed1c8fc6dfece5ac1ee33872cc4f5e3
Gerrit-Change-Number: 66673
Gerrit-PatchSet: 3
Gerrit-Owner: Gabe Black 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Jui-min Lee 
Gerrit-Reviewer: Yu-hsin Wang 
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


[gem5-dev] [M] Change in gem5/gem5[develop]: dev: Implement a "Signal" port which has a templated State type.

2022-12-15 Thread Gabe Black (Gerrit) via gem5-dev
.com/c/public/gem5/+/66672?usp=email
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: I72eaf74658a2c63bece95e48c1a72694874eaad8
Gerrit-Change-Number: 66672
Gerrit-PatchSet: 3
Gerrit-Owner: Gabe Black 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Jui-min Lee 
Gerrit-Reviewer: Yu-hsin Wang 
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


[gem5-dev] [S] Change in gem5/gem5[develop]: fastmodel: Change the Signal proxies to use Signal*Port.

2022-12-15 Thread Gabe Black (Gerrit) via gem5-dev
Gabe Black has submitted this change. (  
https://gem5-review.googlesource.com/c/public/gem5/+/66674?usp=email )


 (

1 is the latest approved patch-set.
No files were changed between the latest approved patch-set and the  
submitted one.
 )Change subject: fastmodel: Change the Signal proxies to use  
Signal*Port.

..

fastmodel: Change the Signal proxies to use Signal*Port.

Change-Id: Ia1aa32d5ea50ff4cc47d1d72a9c25dabd6c30de9
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/66674
Maintainer: Gabe Black 
Tested-by: kokoro 
Reviewed-by: Yu-hsin Wang 
---
M src/arch/arm/fastmodel/common/signal_receiver.hh
M src/arch/arm/fastmodel/common/signal_sender.hh
2 files changed, 19 insertions(+), 7 deletions(-)

Approvals:
  Gabe Black: Looks good to me, approved
  Yu-hsin Wang: Looks good to me, approved
  kokoro: Regressions pass




diff --git a/src/arch/arm/fastmodel/common/signal_receiver.hh  
b/src/arch/arm/fastmodel/common/signal_receiver.hh

index 9907877..9ec760e 100644
--- a/src/arch/arm/fastmodel/common/signal_receiver.hh
+++ b/src/arch/arm/fastmodel/common/signal_receiver.hh
@@ -87,7 +87,7 @@
 class SignalReceiverInt : public SignalReceiver
 {
   public:
-using IntPin = IntSourcePin;
+using IntPin = SignalSourcePort;

 explicit SignalReceiverInt(const std::string )
 : SignalReceiver(name)
@@ -95,7 +95,7 @@
 onChange([this](bool status) {
 for (auto  : signalOut) {
 if (signal && signal->isConnected())
-status ? signal->raise() : signal->lower();
+signal->set(status);
 }
 });
 }
@@ -108,7 +108,7 @@
 }
 if (!signalOut[idx]) {
 signalOut[idx] = std::make_unique(
-csprintf("%s.signalOut[%d]", get_name(), idx), idx, this);
+csprintf("%s.signalOut[%d]", get_name(), idx), idx);
 }
 return *signalOut[idx];
 }
diff --git a/src/arch/arm/fastmodel/common/signal_sender.hh  
b/src/arch/arm/fastmodel/common/signal_sender.hh

index 812a1b9..c596ed1 100644
--- a/src/arch/arm/fastmodel/common/signal_sender.hh
+++ b/src/arch/arm/fastmodel/common/signal_sender.hh
@@ -33,7 +33,7 @@
 #include 
 #pragma GCC diagnostic pop

-#include "dev/intpin.hh"
+#include "sim/signal.hh"

 namespace gem5
 {
@@ -42,14 +42,13 @@
 namespace fastmodel
 {

-class SignalSender : public IntSinkPinBase
+class SignalSender : public SignalSinkPort
 {
   public:
 amba_pv::signal_master_port signal_out;

 SignalSender(const std::string &_name, PortID _id) :
-IntSinkPinBase(_name, _id, 0),
-signal_out((_name + ".sig").c_str())
+SignalSinkPort(_name, _id), signal_out((_name + ".sig").c_str())
 {
 onChange([this](const bool _val) {
 signal_out.set_state(id, new_val);

--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/66674?usp=email
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: Ia1aa32d5ea50ff4cc47d1d72a9c25dabd6c30de9
Gerrit-Change-Number: 66674
Gerrit-PatchSet: 3
Gerrit-Owner: Gabe Black 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Jui-min Lee 
Gerrit-Reviewer: Yu-hsin Wang 
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


[gem5-dev] [S] Change in gem5/gem5[develop]: fastmodel: Change the Signal proxies to use Signal*Port.

2022-12-14 Thread Gabe Black (Gerrit) via gem5-dev
Gabe Black has uploaded this change for review. (  
https://gem5-review.googlesource.com/c/public/gem5/+/66674?usp=email )



Change subject: fastmodel: Change the Signal proxies to use  
Signal*Port.

..

fastmodel: Change the Signal proxies to use Signal*Port.

Change-Id: Ia1aa32d5ea50ff4cc47d1d72a9c25dabd6c30de9
---
M src/arch/arm/fastmodel/common/signal_receiver.hh
M src/arch/arm/fastmodel/common/signal_sender.hh
2 files changed, 15 insertions(+), 7 deletions(-)



diff --git a/src/arch/arm/fastmodel/common/signal_receiver.hh  
b/src/arch/arm/fastmodel/common/signal_receiver.hh

index 9907877..9ec760e 100644
--- a/src/arch/arm/fastmodel/common/signal_receiver.hh
+++ b/src/arch/arm/fastmodel/common/signal_receiver.hh
@@ -87,7 +87,7 @@
 class SignalReceiverInt : public SignalReceiver
 {
   public:
-using IntPin = IntSourcePin;
+using IntPin = SignalSourcePort;

 explicit SignalReceiverInt(const std::string )
 : SignalReceiver(name)
@@ -95,7 +95,7 @@
 onChange([this](bool status) {
 for (auto  : signalOut) {
 if (signal && signal->isConnected())
-status ? signal->raise() : signal->lower();
+signal->set(status);
 }
 });
 }
@@ -108,7 +108,7 @@
 }
 if (!signalOut[idx]) {
 signalOut[idx] = std::make_unique(
-csprintf("%s.signalOut[%d]", get_name(), idx), idx, this);
+csprintf("%s.signalOut[%d]", get_name(), idx), idx);
 }
 return *signalOut[idx];
 }
diff --git a/src/arch/arm/fastmodel/common/signal_sender.hh  
b/src/arch/arm/fastmodel/common/signal_sender.hh

index 812a1b9..c596ed1 100644
--- a/src/arch/arm/fastmodel/common/signal_sender.hh
+++ b/src/arch/arm/fastmodel/common/signal_sender.hh
@@ -33,7 +33,7 @@
 #include 
 #pragma GCC diagnostic pop

-#include "dev/intpin.hh"
+#include "sim/signal.hh"

 namespace gem5
 {
@@ -42,14 +42,13 @@
 namespace fastmodel
 {

-class SignalSender : public IntSinkPinBase
+class SignalSender : public SignalSinkPort
 {
   public:
 amba_pv::signal_master_port signal_out;

 SignalSender(const std::string &_name, PortID _id) :
-IntSinkPinBase(_name, _id, 0),
-signal_out((_name + ".sig").c_str())
+SignalSinkPort(_name, _id), signal_out((_name + ".sig").c_str())
 {
 onChange([this](const bool _val) {
 signal_out.set_state(id, new_val);

--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/66674?usp=email
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: Ia1aa32d5ea50ff4cc47d1d72a9c25dabd6c30de9
Gerrit-Change-Number: 66674
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black 
Gerrit-CC: Gabe Black 
Gerrit-MessageType: newchange
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org


[gem5-dev] [M] Change in gem5/gem5[develop]: fastmodel,dev: Rework the Int*Pin classes with Signal*Port.

2022-12-14 Thread Gabe Black (Gerrit) via gem5-dev
amp;_name, PortID _id, Device *dev,
+int num) :
+SignalSinkPort(_name, _id), _number(num)
+{
+onChange([dev, num](const bool _val) {
+if (new_val)
+dev->raiseInterruptPin(num);
+else
+dev->lowerInterruptPin(num);
+});
+}
+
+template 
+IntSinkPinBase(const std::string &_name, PortID _id, Device *dev) :
+IntSinkPinBase(_name, _id, dev, _id)
+{}

 IntSinkPinBase(const std::string &_name, PortID _id, int num) :
-Port(_name, _id), _number(num)
+SignalSinkPort(_name, _id), _number(num)
 {}

-virtual void raiseOnDevice() = 0;
-virtual void lowerOnDevice() = 0;
+IntSinkPinBase(const std::string &_name, PortID _id) :
+IntSinkPinBase(_name, _id, _id)
+{}

-void
-raise()
-{
-_state = true;
-raiseOnDevice();
-}
-
-void
-lower()
-{
-_state = false;
-lowerOnDevice();
-}
-
-  public:
 int number() { return _number; }
-bool state() { return _state; }
-
-void bind(Port ) override;
-void unbind() override;
 };

-template 
-class IntSinkPin : public IntSinkPinBase
+template 
+using IntSinkPin = IntSinkPinBase;
+
+class IntSourcePinBase : public SignalSourcePort
 {
-  private:
-Device *device = nullptr;
-
-void raiseOnDevice() override { device->raiseInterruptPin(number()); }
-void lowerOnDevice() override { device->lowerInterruptPin(number()); }
-
   public:
-IntSinkPin(const std::string &_name, PortID _id, Device *dev, int  
num) :

-IntSinkPinBase(_name, _id, num), device(dev) {}
-IntSinkPin(const std::string &_name, PortID _id, Device *dev) :
-IntSinkPin(_name, _id, dev, _id) {}
-};
-
-class IntSourcePinBase : public Port
-{
-  private:
-IntSinkPinBase *sink = nullptr;
-
-  public:
-IntSourcePinBase(const std::string &_name, PortID _id):
-Port(_name, _id)
+template 
+IntSourcePinBase(const std::string &_name, PortID _id, Device *owner) :
+SignalSourcePort(_name, _id)
 {}

-void raise() { sink->raise(); }
-void lower() { sink->lower(); }
-
-void bind(Port ) override;
-void unbind() override;
-};
-
-template 
-class IntSourcePin : public IntSourcePinBase
-{
-  public:
-IntSourcePin(const std::string &_name, PortID _id, Device *owner) :
-IntSourcePinBase(_name, _id)
+IntSourcePinBase(const std::string &_name, PortID _id) :
+SignalSourcePort(_name, _id)
 {}
+
+void raise() { set(true); }
+void lower() { set(false); }
 };

+template 
+using IntSourcePin = IntSourcePinBase;
+
 } // namespace gem5

 #endif //__DEV_INTPIN_HH__

--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/66673?usp=email
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: I1325074d0ed1c8fc6dfece5ac1ee33872cc4f5e3
Gerrit-Change-Number: 66673
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black 
Gerrit-CC: Gabe Black 
Gerrit-MessageType: newchange
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org


[gem5-dev] [M] Change in gem5/gem5[develop]: dev: Introduce a reset() method on RegisterBank and Register classes.

2022-12-14 Thread Gabe Black (Gerrit) via gem5-dev
ail filters, visit  
https://gem5-review.googlesource.com/settings


Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: I73fe9874fcb69feed33611a320dcca85c0de2d0e
Gerrit-Change-Number: 66671
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black 
Gerrit-CC: Gabe Black 
Gerrit-MessageType: newchange
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org


[gem5-dev] [M] Change in gem5/gem5[develop]: fastmodel,dev: Replace the reset port with a Signal*Port.

2022-12-14 Thread Gabe Black (Gerrit) via gem5-dev
0644
--- a/src/dev/SConscript
+++ b/src/dev/SConscript
@@ -36,9 +36,7 @@
 Source('dma_virt_device.cc')

 SimObject('IntPin.py', sim_objects=[])
-
 SimObject('ResetPort.py', sim_objects=[])
-Source('reset_port.cc')

 DebugFlag('IsaFake')
 DebugFlag('DMA')
diff --git a/src/dev/reset_port.cc b/src/dev/reset_port.cc
deleted file mode 100644
index 8d32c7d..000
--- a/src/dev/reset_port.cc
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright 2022 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.
- */
-
-#include "dev/reset_port.hh"
-
-#include "base/logging.hh"
-
-namespace gem5
-{
-
-void
-ResetRequestPort::bind(Port )
-{
-peer = dynamic_cast();
-fatal_if(peer == nullptr, "Attempt to bind reset request port %s to "
-"incompatible port %s.", name(), p.name());
-Port::bind(p);
-}
-
-void
-ResetRequestPort::unbind()
-{
-peer = nullptr;
-Port::unbind();
-}
-
-void
-ResetRequestPort::requestReset()
-{
-peer->requestReset();
-}
-
-} // namespace gem5
diff --git a/src/dev/reset_port.hh b/src/dev/reset_port.hh
deleted file mode 100644
index a08db1c..000
--- a/src/dev/reset_port.hh
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright 2022 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.
- */
-
-#ifndef __DEV_RESET_PORT_HH__
-#define __DEV_RESET_PORT_HH__
-
-#include "sim/port.hh"
-
-#include 
-
-namespace gem5
-{
-
-class ResetResponsePortBase : public Port
-{
-  public:
-using Port::Port;
-virtual void requestReset() = 0;
-};
-
-template 
-class ResetResponsePort : public ResetResponsePortBase
-{
-  public:
-ResetResponsePort(const std::string , PortID id, Device *dev) :
-ResetResponsePortBase(name, id), device(dev) {}
-void requestReset() override { device->requestReset(); }
-
-  private:
-Device *device = nullptr;
-};
-
-class ResetRequestPort : public Port
-{
-  public:
-    ResetRequestPort(const std::string &_name, PortID _id)
-: Port(_name, _id) {}
-void bind(Port ) override;
-   

[gem5-dev] [M] Change in gem5/gem5[develop]: dev: Implement a "Signal" port which has a templated State type.

2022-12-14 Thread Gabe Black (Gerrit) via gem5-dev
Gabe Black has uploaded this change for review. (  
https://gem5-review.googlesource.com/c/public/gem5/+/66672?usp=email )



Change subject: dev: Implement a "Signal" port which has a templated State  
type.

..

dev: Implement a "Signal" port which has a templated State type.

This port type transmits a value of the templated State type. When the
value changes, the sink port will call the registered callback with
the new value.

Change-Id: I72eaf74658a2c63bece95e48c1a72694874eaad8
---
A src/sim/signal.hh
1 file changed, 144 insertions(+), 0 deletions(-)



diff --git a/src/sim/signal.hh b/src/sim/signal.hh
new file mode 100644
index 000..3cb3f62
--- /dev/null
+++ b/src/sim/signal.hh
@@ -0,0 +1,131 @@
+/*
+ * Copyright 2022 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.
+ */
+
+#ifndef __SIM_SIGNAL_HH__
+#define __SIM_SIGNAL_HH__
+
+#include 
+
+#include "base/logging.hh"
+#include "sim/port.hh"
+
+namespace gem5
+{
+
+template 
+class SignalSourcePort;
+
+template 
+class SignalSinkPort : public Port
+{
+  public:
+using OnChangeFunc = std::function;
+
+  private:
+friend SignalSourcePort;
+
+SignalSourcePort *_source = nullptr;
+
+State _state = {};
+OnChangeFunc _onChange;
+
+  protected:
+void
+set(const State _state)
+{
+if (new_state == _state)
+return;
+
+_state = new_state;
+if (_onChange)
+_onChange(_state);
+}
+
+  public:
+SignalSinkPort(const std::string &_name, PortID _id=InvalidPortID) :
+Port(_name, _id)
+{}
+
+const State () const { return _state; }
+void onChange(OnChangeFunc func) { _onChange = std::move(func); }
+
+void
+bind(Port ) override
+{
+_source = dynamic_cast *>();
+fatal_if(!_source, "Attempt to bind signal pin %s to "
+"incompatible pin %s", name(), peer.name());
+Port::bind(peer);
+}
+void
+unbind() override
+{
+_source = nullptr;
+Port::unbind();
+}
+};
+
+template 
+class SignalSourcePort : public Port
+{
+  private:
+SignalSinkPort *sink = nullptr;
+State _state = {};
+
+  public:
+SignalSourcePort(const std::string &_name, PortID _id=InvalidPortID) :
+Port(_name, _id)
+{}
+
+void
+set(const State _state)
+{
+_state = new_state;
+sink->set(new_state);
+}
+
+const State () const { return _state; }
+
+void
+bind(Port ) override
+{
+sink = dynamic_cast *>();
+fatal_if(!sink, "Attempt to bind signal pin %s to "
+"incompatible pin %s", name(), peer.name());
+Port::bind(peer);
+}
+void
+unbind() override
+{
+sink = nullptr;
+Port::unbind();
+}
+};
+
+} // namespace gem5
+
+#endif //__SIM_SIGNAL_HH__

--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/66672?usp=email
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: I72eaf74658a2c63bece95e48c1a72694874eaad8
Gerrit-Change-Number: 66672
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black 
Gerrit-CC: Gabe Black 
Gerrit-MessageType: newchange
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org


[gem5-dev] [S] Change in gem5/gem5[develop]: systemc: Enable DMI in the non-blocking/timing mode bridge.

2022-12-07 Thread Gabe Black (Gerrit) via gem5-dev
Gabe Black has submitted this change. (  
https://gem5-review.googlesource.com/c/public/gem5/+/65754?usp=email )


Change subject: systemc: Enable DMI in the non-blocking/timing mode bridge.
..

systemc: Enable DMI in the non-blocking/timing mode bridge.

Change-Id: Ia618081e2dbf8b49f62480ac5dc29f87100cd4f1
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/65754
Maintainer: Gabe Black 
Tested-by: kokoro 
Reviewed-by: Gabe Black 
---
M src/systemc/tlm_bridge/tlm_to_gem5.cc
1 file changed, 38 insertions(+), 2 deletions(-)

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




diff --git a/src/systemc/tlm_bridge/tlm_to_gem5.cc  
b/src/systemc/tlm_bridge/tlm_to_gem5.cc

index 47a2fba..c02efe7 100644
--- a/src/systemc/tlm_bridge/tlm_to_gem5.cc
+++ b/src/systemc/tlm_bridge/tlm_to_gem5.cc
@@ -207,6 +207,29 @@
 TlmToGem5Bridge::sendBeginResp(tlm::tlm_generic_payload ,
  sc_core::sc_time )
 {
+MemBackdoor::Flags flags;
+switch (trans.get_command()) {
+  case tlm::TLM_READ_COMMAND:
+flags = MemBackdoor::Readable;
+break;
+  case tlm::TLM_WRITE_COMMAND:
+flags = MemBackdoor::Writeable;
+break;
+  default:
+panic("TlmToGem5Bridge: "
+"received transaction with unsupported command");
+}
+Addr start_addr = trans.get_address();
+Addr length = trans.get_data_length();
+
+MemBackdoorReq req({start_addr, start_addr + length}, flags);
+MemBackdoorPtr backdoor = nullptr;
+
+bmp.sendMemBackdoorReq(req, backdoor);
+
+if (backdoor)
+trans.set_dmi_allowed(true);
+
 tlm::tlm_phase phase = tlm::BEGIN_RESP;

 auto status = socket->nb_transport_bw(trans, phase, delay);
@@ -574,12 +597,12 @@
 DPRINTF(TlmBridge, "register blocking interface");
 socket.register_b_transport(
 this, ::b_transport);
-socket.register_get_direct_mem_ptr(
-this, ::get_direct_mem_ptr);
 } else {
 panic("gem5 operates neither in Timing nor in Atomic mode");
 }

+socket.register_get_direct_mem_ptr(
+this, ::get_direct_mem_ptr);
 socket.register_transport_dbg(
 this, ::transport_dbg);


--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/65754?usp=email
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: Ia618081e2dbf8b49f62480ac5dc29f87100cd4f1
Gerrit-Change-Number: 65754
Gerrit-PatchSet: 4
Gerrit-Owner: Gabe Black 
Gerrit-Reviewer: Earl Ou 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Jui-min Lee 
Gerrit-Reviewer: Yu-hsin Wang 
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


[gem5-dev] [M] Change in gem5/gem5[develop]: dev: Add an offset checking mechanism to RegisterBank.

2022-12-06 Thread Gabe Black (Gerrit) via gem5-dev
 name(), adder.offset.value(), offset);
+}
+}
 }
 }

-void addRegister(RegisterBase ) { addRegisters({reg}); }
+void addRegister(RegisterAdder reg) { addRegisters({reg}); }

 Addr base() const { return _base; }
 Addr size() const { return _size; }
diff --git a/src/dev/reg_bank.test.cc b/src/dev/reg_bank.test.cc
index 534f862..b4bc969 100644
--- a/src/dev/reg_bank.test.cc
+++ b/src/dev/reg_bank.test.cc
@@ -55,6 +55,7 @@

 #include 

+#include "base/gtest/logging.hh"
 #include "dev/reg_bank.hh"

 using namespace gem5;
@@ -64,6 +65,9 @@
 // This version is needed with enough elements, empirically more than 10.
 using testing::ElementsAreArray;

+using testing::AllOf;
+using testing::HasSubstr;
+

 /*
  * The RegisterRaz (read as zero) type.
@@ -1011,6 +1015,41 @@
 EXPECT_EQ(emptyBank.size(), 12);
 }

+TEST_F(RegisterBankTest, AddRegistersWithOffsetChecks)
+{
+emptyBank.addRegister({0x12345});
+EXPECT_EQ(emptyBank.size(), 0);
+emptyBank.addRegister({0x12345, reg0});
+EXPECT_EQ(emptyBank.size(), 4);
+emptyBank.addRegister({0x12349});
+EXPECT_EQ(emptyBank.size(), 4);
+
+emptyBank.addRegisters({{0x12349, reg1}, {0x1234d}, {0x1234d, reg2}});
+EXPECT_EQ(emptyBank.size(), 12);
+}
+
+TEST_F(RegisterBankTest, BadRegisterOffsetDeath)
+{
+gtestLogOutput.str("");
+EXPECT_ANY_THROW(emptyBank.addRegisters({{0xabcd, reg0}, reg1}));
+
+std::string actual = gtestLogOutput.str();
+EXPECT_THAT(actual, HasSubstr("empty.reg0"));
+EXPECT_THAT(actual, HasSubstr("to be 0xabcd"));
+EXPECT_THAT(actual, HasSubstr("is 0x12345"));
+}
+
+TEST_F(RegisterBankTest, BadBankOffsetDeath)
+{
+gtestLogOutput.str("");
+EXPECT_ANY_THROW(emptyBank.addRegisters({{0xabcd}, reg0}));
+
+std::string actual = gtestLogOutput.str();
+EXPECT_THAT(actual, HasSubstr("empty "));
+EXPECT_THAT(actual, HasSubstr("to be 0xabcd"));
+EXPECT_THAT(actual, HasSubstr("is 0x12345"));
+}
+
 // Reads.

 TEST_F(RegisterBankTest, ReadOneAlignedFirst)

--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/66431?usp=email
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: Ia7e419ffb062a64a10106305f875cec6f9fe9a80
Gerrit-Change-Number: 66431
Gerrit-PatchSet: 3
Gerrit-Owner: Gabe Black 
Gerrit-Reviewer: Earl Ou 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Jui-min Lee 
Gerrit-Reviewer: Yu-hsin Wang 
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


[gem5-dev] [M] Change in gem5/gem5[develop]: dev: Add an offset checking mechanism to RegisterBank.

2022-12-05 Thread Gabe Black (Gerrit) via gem5-dev
git a/src/dev/reg_bank.test.cc b/src/dev/reg_bank.test.cc
index 534f862..b4bc969 100644
--- a/src/dev/reg_bank.test.cc
+++ b/src/dev/reg_bank.test.cc
@@ -55,6 +55,7 @@

 #include 

+#include "base/gtest/logging.hh"
 #include "dev/reg_bank.hh"

 using namespace gem5;
@@ -64,6 +65,9 @@
 // This version is needed with enough elements, empirically more than 10.
 using testing::ElementsAreArray;

+using testing::AllOf;
+using testing::HasSubstr;
+

 /*
  * The RegisterRaz (read as zero) type.
@@ -1011,6 +1015,41 @@
 EXPECT_EQ(emptyBank.size(), 12);
 }

+TEST_F(RegisterBankTest, AddRegistersWithOffsetChecks)
+{
+emptyBank.addRegister({0x12345});
+EXPECT_EQ(emptyBank.size(), 0);
+emptyBank.addRegister({0x12345, reg0});
+EXPECT_EQ(emptyBank.size(), 4);
+emptyBank.addRegister({0x12349});
+EXPECT_EQ(emptyBank.size(), 4);
+
+emptyBank.addRegisters({{0x12349, reg1}, {0x1234d}, {0x1234d, reg2}});
+EXPECT_EQ(emptyBank.size(), 12);
+}
+
+TEST_F(RegisterBankTest, BadRegisterOffsetDeath)
+{
+gtestLogOutput.str("");
+EXPECT_ANY_THROW(emptyBank.addRegisters({{0xabcd, reg0}, reg1}));
+
+std::string actual = gtestLogOutput.str();
+EXPECT_THAT(actual, HasSubstr("empty.reg0"));
+EXPECT_THAT(actual, HasSubstr("to be 0xabcd"));
+EXPECT_THAT(actual, HasSubstr("is 0x12345"));
+}
+
+TEST_F(RegisterBankTest, BadBankOffsetDeath)
+{
+gtestLogOutput.str("");
+EXPECT_ANY_THROW(emptyBank.addRegisters({{0xabcd}, reg0}));
+
+std::string actual = gtestLogOutput.str();
+EXPECT_THAT(actual, HasSubstr("empty "));
+EXPECT_THAT(actual, HasSubstr("to be 0xabcd"));
+EXPECT_THAT(actual, HasSubstr("is 0x12345"));
+}
+
 // Reads.

 TEST_F(RegisterBankTest, ReadOneAlignedFirst)

--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/66431?usp=email
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: Ia7e419ffb062a64a10106305f875cec6f9fe9a80
Gerrit-Change-Number: 66431
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black 
Gerrit-MessageType: newchange
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org


[gem5-dev] [M] Change in gem5/gem5[develop]: dev,mem,systemc: Implement and use the recvMemBackdoorReq func.

2022-11-21 Thread Gabe Black (Gerrit) via gem5-dev
data_ptr(nullptr);
+
+if (req.writeable())
+trans->set_command(tlm::TLM_WRITE_COMMAND);
+else if (req.readable())
+trans->set_command(tlm::TLM_READ_COMMAND);
+else
+trans->set_command(tlm::TLM_IGNORE_COMMAND);
+
+backdoor = getBackdoor(*trans);
+
+trans->release();
+}
+
+template 
 tlm::tlm_sync_enum
 Gem5ToTlmBridge::nb_transport_bw(tlm::tlm_generic_payload ,
 tlm::tlm_phase , sc_core::sc_time )
diff --git a/src/systemc/tlm_bridge/gem5_to_tlm.hh  
b/src/systemc/tlm_bridge/gem5_to_tlm.hh

index 0cb925e..23415b8 100644
--- a/src/systemc/tlm_bridge/gem5_to_tlm.hh
+++ b/src/systemc/tlm_bridge/gem5_to_tlm.hh
@@ -62,6 +62,7 @@
 #include 
 #include 

+#include "mem/backdoor.hh"
 #include "mem/port.hh"
 #include "params/Gem5ToTlmBridgeBase.hh"
 #include "sim/system.hh"
@@ -117,6 +118,12 @@
 {
 return bridge.recvFunctional(pkt);
 }
+void
+recvMemBackdoorReq(const gem5::MemBackdoorReq ,
+gem5::MemBackdoorPtr ) override
+{
+bridge.recvMemBackdoorReq(req, backdoor);
+}
 bool
 recvTimingReq(gem5::PacketPtr pkt) override
 {
@@ -179,6 +186,8 @@
 gem5::Tick recvAtomicBackdoor(gem5::PacketPtr pkt,
 gem5::MemBackdoorPtr );
 void recvFunctional(gem5::PacketPtr packet);
+void recvMemBackdoorReq(const gem5::MemBackdoorReq ,
+gem5::MemBackdoorPtr );
 bool recvTimingReq(gem5::PacketPtr packet);
 bool tryTiming(gem5::PacketPtr packet);
 bool recvTimingSnoopResp(gem5::PacketPtr packet);
diff --git a/src/systemc/tlm_bridge/tlm_to_gem5.cc  
b/src/systemc/tlm_bridge/tlm_to_gem5.cc

index 703e118..468ea83 100644
--- a/src/systemc/tlm_bridge/tlm_to_gem5.cc
+++ b/src/systemc/tlm_bridge/tlm_to_gem5.cc
@@ -401,13 +401,26 @@
 TlmToGem5Bridge::get_direct_mem_ptr(tlm::tlm_generic_payload  
,

   tlm::tlm_dmi _data)
 {
-auto [pkt, pkt_created] = payload2packet(_id, trans);
-pkt->pushSenderState(new Gem5SystemC::TlmSenderState(trans));
-if (pkt_created)
-pkt->req->setFlags(Request::NO_ACCESS);
+MemBackdoor::Flags flags;
+switch (trans.get_command()) {
+  case tlm::TLM_READ_COMMAND:
+flags = MemBackdoor::Readable;
+break;
+  case tlm::TLM_WRITE_COMMAND:
+flags = MemBackdoor::Writeable;
+break;
+  default:
+panic("TlmToGem5Bridge: "
+"received transaction with unsupported command");
+}
+Addr start_addr = trans.get_address();
+Addr length = trans.get_data_length();

+MemBackdoorReq req({start_addr, start_addr + length}, flags);
 MemBackdoorPtr backdoor = nullptr;
-bmp.sendAtomicBackdoor(pkt, backdoor);
+
+bmp.sendMemBackdoorReq(req, backdoor);
+
 if (backdoor) {
 trans.set_dmi_allowed(true);
 dmi_data.set_dmi_ptr(backdoor->ptr());
@@ -434,17 +447,7 @@
 }
 }

-gem5::Packet::SenderState *senderState = pkt->popSenderState();
-sc_assert(
-nullptr !=  
dynamic_cast(senderState));

-
-// clean up
-delete senderState;
-
-setPayloadResponse(trans, pkt);
-
-if (pkt_created)
-destroyPacket(pkt);
+trans.set_response_status(tlm::TLM_OK_RESPONSE);

 return backdoor != nullptr;
 }

--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/65753?usp=email
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: If6e12d4fcef0c31131a9768099a72542a8f62ab1
Gerrit-Change-Number: 65753
Gerrit-PatchSet: 2
Gerrit-Owner: Gabe Black 
Gerrit-Reviewer: Earl Ou 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Jason Lowe-Power 
Gerrit-Reviewer: Jui-min Lee 
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


[gem5-dev] [M] Change in gem5/gem5[develop]: mem: Add an API for requesting a back door without a Packet/Request.

2022-11-21 Thread Gabe Black (Gerrit) via gem5-dev
de "mem/packet.hh"

 namespace gem5
@@ -66,6 +67,16 @@
  * Receive a functional snoop request packet from the peer.
  */
 virtual void recvFunctionalSnoop(PacketPtr pkt) = 0;
+
+/**
+ * Send a request for a back door to a range of memory.
+ *
+ * @param req An object which describes what back door is being  
requested.
+ * @param backdoor Can be set to a back door pointer by the target to  
let

+ *caller have direct access to the requested range.
+ */
+void sendMemBackdoorReq(FunctionalResponseProtocol *peer,
+const MemBackdoorReq , MemBackdoorPtr );
 };

 class FunctionalResponseProtocol
@@ -86,6 +97,16 @@
  * Receive a functional request packet from the peer.
  */
 virtual void recvFunctional(PacketPtr pkt) = 0;
+
+/**
+ * Receive a request for a back door to a range of memory.
+ *
+ * @param req An object which describes what back door is being  
requested.
+ * @param backdoor Can be set to a back door pointer by the target to  
let

+ *caller have direct access to the requested range.
+ */
+virtual void recvMemBackdoorReq(const MemBackdoorReq ,
+MemBackdoorPtr ) = 0;
 };

 } // namespace gem5

--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/65752?usp=email
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: I905f13b9bc83c3fa7877b05ce932e17c308125e2
Gerrit-Change-Number: 65752
Gerrit-PatchSet: 2
Gerrit-Owner: Gabe Black 
Gerrit-Reviewer: Earl Ou 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Jason Lowe-Power 
Gerrit-Reviewer: Jui-min Lee 
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


[gem5-dev] [S] Change in gem5/gem5[develop]: mem: Add a class to describe a back door request.

2022-11-21 Thread Gabe Black (Gerrit) via gem5-dev
Gabe Black has submitted this change. (  
https://gem5-review.googlesource.com/c/public/gem5/+/65751?usp=email )


Change subject: mem: Add a class to describe a back door request.
..

mem: Add a class to describe a back door request.

In cases where a back door is not being requested alongside a packet
or request, there needs to be a structure which describes the address
range to use, and what type of access the back door should support. It
would be possible to make a Packet/Request to carry that information,
but those types are actually pretty big, and have a lot of extra
overhead which would be overkill for this purpose.

Change-Id: I3638361ffa758ee959cb3bc57f7c35f2aa34a36c
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/65751
Reviewed-by: Jason Lowe-Power 
Maintainer: Gabe Black 
Tested-by: kokoro 
---
M src/mem/backdoor.hh
1 file changed, 39 insertions(+), 0 deletions(-)

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




diff --git a/src/mem/backdoor.hh b/src/mem/backdoor.hh
index 73e6670..54fe4ac 100644
--- a/src/mem/backdoor.hh
+++ b/src/mem/backdoor.hh
@@ -126,6 +126,25 @@

 typedef MemBackdoor *MemBackdoorPtr;

+class MemBackdoorReq
+{
+  private:
+AddrRange _range;
+MemBackdoor::Flags _flags;
+
+  public:
+MemBackdoorReq(AddrRange r, MemBackdoor::Flags new_flags) :
+_range(r), _flags(new_flags)
+{}
+
+const AddrRange () const { return _range; }
+
+bool readable() const { return _flags & MemBackdoor::Readable; }
+bool writeable() const { return _flags & MemBackdoor::Writeable; }
+
+MemBackdoor::Flags flags() const { return _flags; }
+};
+
 } // namespace gem5

 #endif  //__MEM_BACKDOOR_HH__

--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/65751?usp=email
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: I3638361ffa758ee959cb3bc57f7c35f2aa34a36c
Gerrit-Change-Number: 65751
Gerrit-PatchSet: 2
Gerrit-Owner: Gabe Black 
Gerrit-Reviewer: Earl Ou 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Jason Lowe-Power 
Gerrit-Reviewer: Jui-min Lee 
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


[gem5-dev] [M] Change in gem5/gem5[develop]: mem: Add an API for requesting a back door without a Packet/Request.

2022-11-18 Thread Gabe Black (Gerrit) via gem5-dev
.
+ *
+ * @param req An object which describes what back door is being  
requested.
+ * @param backdoor Can be set to a back door pointer by the target to  
let

+ *caller have direct access to the requested range.
+ */
+void sendMemBackdoorReq(FunctionalResponseProtocol *peer,
+const MemBackdoorReq , MemBackdoorPtr );
 };

 class FunctionalResponseProtocol
@@ -86,6 +97,16 @@
  * Receive a functional request packet from the peer.
  */
 virtual void recvFunctional(PacketPtr pkt) = 0;
+
+/**
+ * Receive a request for a back door to a range of memory.
+ *
+ * @param req An object which describes what back door is being  
requested.
+ * @param backdoor Can be set to a back door pointer by the target to  
let

+ *caller have direct access to the requested range.
+ */
+virtual void recvMemBackdoorReq(const MemBackdoorReq ,
+MemBackdoorPtr ) = 0;
 };

 } // namespace gem5

--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/65752?usp=email
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: I905f13b9bc83c3fa7877b05ce932e17c308125e2
Gerrit-Change-Number: 65752
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black 
Gerrit-CC: Gabe Black 
Gerrit-MessageType: newchange
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org


[gem5-dev] [S] Change in gem5/gem5[develop]: mem: Add a class to describe a back door request.

2022-11-18 Thread Gabe Black (Gerrit) via gem5-dev
Gabe Black has uploaded this change for review. (  
https://gem5-review.googlesource.com/c/public/gem5/+/65751?usp=email )



Change subject: mem: Add a class to describe a back door request.
..

mem: Add a class to describe a back door request.

In cases where a back door is not being requested alongside a packet
or request, there needs to be a structure which describes the address
range to use, and what type of access the back door should support. It
would be possible to make a Packet/Request to carry that information,
but those types are actually pretty big, and have a lot of extra
overhead which would be overkill for this purpose.

Change-Id: I3638361ffa758ee959cb3bc57f7c35f2aa34a36c
---
M src/mem/backdoor.hh
1 file changed, 35 insertions(+), 0 deletions(-)



diff --git a/src/mem/backdoor.hh b/src/mem/backdoor.hh
index 73e6670..54fe4ac 100644
--- a/src/mem/backdoor.hh
+++ b/src/mem/backdoor.hh
@@ -126,6 +126,25 @@

 typedef MemBackdoor *MemBackdoorPtr;

+class MemBackdoorReq
+{
+  private:
+AddrRange _range;
+MemBackdoor::Flags _flags;
+
+  public:
+MemBackdoorReq(AddrRange r, MemBackdoor::Flags new_flags) :
+_range(r), _flags(new_flags)
+{}
+
+const AddrRange () const { return _range; }
+
+bool readable() const { return _flags & MemBackdoor::Readable; }
+bool writeable() const { return _flags & MemBackdoor::Writeable; }
+
+MemBackdoor::Flags flags() const { return _flags; }
+};
+
 } // namespace gem5

 #endif  //__MEM_BACKDOOR_HH__

--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/65751?usp=email
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: I3638361ffa758ee959cb3bc57f7c35f2aa34a36c
Gerrit-Change-Number: 65751
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black 
Gerrit-CC: Gabe Black 
Gerrit-MessageType: newchange
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org


[gem5-dev] [M] Change in gem5/gem5[develop]: dev,mem,systemc: Implement and use the recvMemBackdoorReq func.

2022-11-18 Thread Gabe Black (Gerrit) via gem5-dev
um
 Gem5ToTlmBridge::nb_transport_bw(tlm::tlm_generic_payload ,
 tlm::tlm_phase , sc_core::sc_time )
diff --git a/src/systemc/tlm_bridge/gem5_to_tlm.hh  
b/src/systemc/tlm_bridge/gem5_to_tlm.hh

index 0cb925e..23415b8 100644
--- a/src/systemc/tlm_bridge/gem5_to_tlm.hh
+++ b/src/systemc/tlm_bridge/gem5_to_tlm.hh
@@ -62,6 +62,7 @@
 #include 
 #include 

+#include "mem/backdoor.hh"
 #include "mem/port.hh"
 #include "params/Gem5ToTlmBridgeBase.hh"
 #include "sim/system.hh"
@@ -117,6 +118,12 @@
 {
 return bridge.recvFunctional(pkt);
 }
+void
+recvMemBackdoorReq(const gem5::MemBackdoorReq ,
+gem5::MemBackdoorPtr ) override
+{
+bridge.recvMemBackdoorReq(req, backdoor);
+}
 bool
 recvTimingReq(gem5::PacketPtr pkt) override
 {
@@ -179,6 +186,8 @@
 gem5::Tick recvAtomicBackdoor(gem5::PacketPtr pkt,
 gem5::MemBackdoorPtr );
 void recvFunctional(gem5::PacketPtr packet);
+void recvMemBackdoorReq(const gem5::MemBackdoorReq ,
+gem5::MemBackdoorPtr );
 bool recvTimingReq(gem5::PacketPtr packet);
 bool tryTiming(gem5::PacketPtr packet);
 bool recvTimingSnoopResp(gem5::PacketPtr packet);
diff --git a/src/systemc/tlm_bridge/tlm_to_gem5.cc  
b/src/systemc/tlm_bridge/tlm_to_gem5.cc

index 703e118..468ea83 100644
--- a/src/systemc/tlm_bridge/tlm_to_gem5.cc
+++ b/src/systemc/tlm_bridge/tlm_to_gem5.cc
@@ -401,13 +401,26 @@
 TlmToGem5Bridge::get_direct_mem_ptr(tlm::tlm_generic_payload  
,

   tlm::tlm_dmi _data)
 {
-auto [pkt, pkt_created] = payload2packet(_id, trans);
-pkt->pushSenderState(new Gem5SystemC::TlmSenderState(trans));
-if (pkt_created)
-pkt->req->setFlags(Request::NO_ACCESS);
+MemBackdoor::Flags flags;
+switch (trans.get_command()) {
+  case tlm::TLM_READ_COMMAND:
+flags = MemBackdoor::Readable;
+break;
+  case tlm::TLM_WRITE_COMMAND:
+flags = MemBackdoor::Writeable;
+break;
+  default:
+panic("TlmToGem5Bridge: "
+"received transaction with unsupported command");
+}
+Addr start_addr = trans.get_address();
+Addr length = trans.get_data_length();

+MemBackdoorReq req({start_addr, start_addr + length}, flags);
 MemBackdoorPtr backdoor = nullptr;
-bmp.sendAtomicBackdoor(pkt, backdoor);
+
+bmp.sendMemBackdoorReq(req, backdoor);
+
 if (backdoor) {
 trans.set_dmi_allowed(true);
 dmi_data.set_dmi_ptr(backdoor->ptr());
@@ -434,17 +447,7 @@
 }
 }

-gem5::Packet::SenderState *senderState = pkt->popSenderState();
-sc_assert(
-nullptr !=  
dynamic_cast(senderState));

-
-// clean up
-delete senderState;
-
-setPayloadResponse(trans, pkt);
-
-if (pkt_created)
-destroyPacket(pkt);
+trans.set_response_status(tlm::TLM_OK_RESPONSE);

 return backdoor != nullptr;
 }

--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/65753?usp=email
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: If6e12d4fcef0c31131a9768099a72542a8f62ab1
Gerrit-Change-Number: 65753
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black 
Gerrit-CC: Gabe Black 
Gerrit-MessageType: newchange
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org


[gem5-dev] [S] Change in gem5/gem5[develop]: systemc: Enable DMI in the non-blocking/timing mode bridge.

2022-11-18 Thread Gabe Black (Gerrit) via gem5-dev
Gabe Black has uploaded this change for review. (  
https://gem5-review.googlesource.com/c/public/gem5/+/65754?usp=email )



Change subject: systemc: Enable DMI in the non-blocking/timing mode bridge.
..

systemc: Enable DMI in the non-blocking/timing mode bridge.

Change-Id: Ia618081e2dbf8b49f62480ac5dc29f87100cd4f1
---
M src/systemc/tlm_bridge/tlm_to_gem5.cc
1 file changed, 34 insertions(+), 2 deletions(-)



diff --git a/src/systemc/tlm_bridge/tlm_to_gem5.cc  
b/src/systemc/tlm_bridge/tlm_to_gem5.cc

index 468ea83..bb8d578 100644
--- a/src/systemc/tlm_bridge/tlm_to_gem5.cc
+++ b/src/systemc/tlm_bridge/tlm_to_gem5.cc
@@ -241,6 +241,29 @@

 trans.acquire();

+MemBackdoor::Flags flags;
+switch (trans.get_command()) {
+  case tlm::TLM_READ_COMMAND:
+flags = MemBackdoor::Readable;
+break;
+  case tlm::TLM_WRITE_COMMAND:
+flags = MemBackdoor::Writeable;
+break;
+  default:
+panic("TlmToGem5Bridge: "
+"received transaction with unsupported command");
+}
+Addr start_addr = trans.get_address();
+Addr length = trans.get_data_length();
+
+MemBackdoorReq req({start_addr, start_addr + length}, flags);
+MemBackdoorPtr backdoor = nullptr;
+
+bmp.sendMemBackdoorReq(req, backdoor);
+
+if (backdoor)
+trans.set_dmi_allowed(true);
+
 auto res = payload2packet(_id, trans);
 auto pkt = res.first;
 pkt->pushSenderState(new Gem5SystemC::TlmSenderState(trans));
@@ -580,12 +603,12 @@
 DPRINTF(TlmBridge, "register blocking interface");
 socket.register_b_transport(
 this, ::b_transport);
-socket.register_get_direct_mem_ptr(
-this, ::get_direct_mem_ptr);
 } else {
 panic("gem5 operates neither in Timing nor in Atomic mode");
 }

+socket.register_get_direct_mem_ptr(
+this, ::get_direct_mem_ptr);
 socket.register_transport_dbg(
 this, ::transport_dbg);


--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/65754?usp=email
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: Ia618081e2dbf8b49f62480ac5dc29f87100cd4f1
Gerrit-Change-Number: 65754
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black 
Gerrit-CC: Gabe Black 
Gerrit-MessageType: newchange
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org


[gem5-dev] [S] Change in gem5/gem5[develop]: scons: Fix the default KVM_ISA setting.

2022-09-22 Thread Gabe Black (Gerrit)
Gabe Black has submitted this change. (  
https://gem5-review.googlesource.com/c/public/gem5/+/63752?usp=email )


Change subject: scons: Fix the default KVM_ISA setting.
..

scons: Fix the default KVM_ISA setting.

The KVM_ISA setting was moved into a CONF dict, but the code which
ensured it had a default if there was no possible KVM hosting ISA was
still setting that variable in the base environment dict. This moves
the setting into the CONF dict instead.

Change-Id: I067c969dd761b2cdb098bcba6cd6a4b643d2d427
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/63752
Reviewed-by: Earl Ou 
Tested-by: kokoro 
Maintainer: Gabe Black 
---
M src/cpu/kvm/SConsopts
1 file changed, 19 insertions(+), 1 deletion(-)

Approvals:
  kokoro: Regressions pass
  Gabe Black: Looks good to me, approved
  Earl Ou: Looks good to me, approved




diff --git a/src/cpu/kvm/SConsopts b/src/cpu/kvm/SConsopts
index e5818e0..275eeda 100644
--- a/src/cpu/kvm/SConsopts
+++ b/src/cpu/kvm/SConsopts
@@ -30,7 +30,7 @@
 import gem5_scons

 # ISA code can set this to indicate what ISA KVM can target.
-main.SetDefault(KVM_ISA='')
+main['CONF'].setdefault('KVM_ISA', '')

 with gem5_scons.Configure(main) as conf:
 # Check if we should enable KVM-based hardware virtualization. The

--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/63752?usp=email
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: I067c969dd761b2cdb098bcba6cd6a4b643d2d427
Gerrit-Change-Number: 63752
Gerrit-PatchSet: 2
Gerrit-Owner: Gabe Black 
Gerrit-Reviewer: Earl Ou 
Gerrit-Reviewer: Gabe Black 
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


[gem5-dev] [S] Change in gem5/gem5[develop]: scons: Fix the default KVM_ISA setting.

2022-09-21 Thread Gabe Black (Gerrit)
Gabe Black has uploaded this change for review. (  
https://gem5-review.googlesource.com/c/public/gem5/+/63752?usp=email )



Change subject: scons: Fix the default KVM_ISA setting.
..

scons: Fix the default KVM_ISA setting.

The KVM_ISA setting was moved into a CONF dict, but the code which
ensured it had a default if there was no possible KVM hosting ISA was
still setting that variable in the base environment dict. This moves
the setting into the CONF dict instead.

Change-Id: I067c969dd761b2cdb098bcba6cd6a4b643d2d427
---
M src/cpu/kvm/SConsopts
1 file changed, 15 insertions(+), 1 deletion(-)



diff --git a/src/cpu/kvm/SConsopts b/src/cpu/kvm/SConsopts
index e5818e0..275eeda 100644
--- a/src/cpu/kvm/SConsopts
+++ b/src/cpu/kvm/SConsopts
@@ -30,7 +30,7 @@
 import gem5_scons

 # ISA code can set this to indicate what ISA KVM can target.
-main.SetDefault(KVM_ISA='')
+main['CONF'].setdefault('KVM_ISA', '')

 with gem5_scons.Configure(main) as conf:
 # Check if we should enable KVM-based hardware virtualization. The

--
To view, visit  
https://gem5-review.googlesource.com/c/public/gem5/+/63752?usp=email
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: I067c969dd761b2cdb098bcba6cd6a4b643d2d427
Gerrit-Change-Number: 63752
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black 
Gerrit-CC: Gabe Black 
Gerrit-MessageType: newchange
___
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org


[gem5-dev] [S] Change in gem5/gem5[develop]: stdlib: Add missing ()s in get_supported_isas.

2022-04-16 Thread Gabe Black (Gerrit) via gem5-dev
Gabe Black has submitted this change. (  
https://gem5-review.googlesource.com/c/public/gem5/+/58929 )


Change subject: stdlib: Add missing ()s in get_supported_isas.
..

stdlib: Add missing ()s in get_supported_isas.

A function was used directly instead of being called when interating
through ISA names.

Change-Id: I9dc53259a766a68070e0b79bb55f721a93fcdeed
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/58929
Reviewed-by: Jason Lowe-Power 
Maintainer: Jason Lowe-Power 
Tested-by: kokoro 
---
M src/python/gem5/runtime.py
1 file changed, 17 insertions(+), 1 deletion(-)

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




diff --git a/src/python/gem5/runtime.py b/src/python/gem5/runtime.py
index 108dfc4..0984f6f 100644
--- a/src/python/gem5/runtime.py
+++ b/src/python/gem5/runtime.py
@@ -48,7 +48,7 @@
 if "TARGET_ISA" in buildEnv.keys():
 supported_isas.add(get_isa_from_str(buildEnv["TARGET_ISA"]))
 else:
-for key in get_isas_str_set:
+for key in get_isas_str_set():
 if buildEnv[f"USE_{key.upper()}_ISA"]:
 supported_isas.add(get_isa_from_str(key))
 return supported_isas

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/58929
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: I9dc53259a766a68070e0b79bb55f721a93fcdeed
Gerrit-Change-Number: 58929
Gerrit-PatchSet: 2
Gerrit-Owner: Gabe Black 
Gerrit-Reviewer: Bobby Bruce 
Gerrit-Reviewer: Gabe Black 
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] [S] Change in gem5/gem5[develop]: stdlib: Add missing ()s in get_supported_isas.

2022-04-15 Thread Gabe Black (Gerrit) via gem5-dev
Gabe Black has uploaded this change for review. (  
https://gem5-review.googlesource.com/c/public/gem5/+/58929 )



Change subject: stdlib: Add missing ()s in get_supported_isas.
..

stdlib: Add missing ()s in get_supported_isas.

A function was used directly instead of being called when interating
through ISA names.

Change-Id: I9dc53259a766a68070e0b79bb55f721a93fcdeed
---
M src/python/gem5/runtime.py
1 file changed, 13 insertions(+), 1 deletion(-)



diff --git a/src/python/gem5/runtime.py b/src/python/gem5/runtime.py
index 108dfc4..0984f6f 100644
--- a/src/python/gem5/runtime.py
+++ b/src/python/gem5/runtime.py
@@ -48,7 +48,7 @@
 if "TARGET_ISA" in buildEnv.keys():
 supported_isas.add(get_isa_from_str(buildEnv["TARGET_ISA"]))
 else:
-for key in get_isas_str_set:
+for key in get_isas_str_set():
 if buildEnv[f"USE_{key.upper()}_ISA"]:
 supported_isas.add(get_isa_from_str(key))
 return supported_isas

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/58929
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: I9dc53259a766a68070e0b79bb55f721a93fcdeed
Gerrit-Change-Number: 58929
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black 
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] [S] Change in gem5/gem5[develop]: scons: Remove old support for building with a batch processor.

2022-04-15 Thread Gabe Black (Gerrit) via gem5-dev
Gabe Black has uploaded this change for review. (  
https://gem5-review.googlesource.com/c/public/gem5/+/58891 )



Change subject: scons: Remove old support for building with a batch  
processor.

..

scons: Remove old support for building with a batch processor.

Other systems like distcc and ccache exist for this purpose. The SCons
CacheDir mechanism relies on multiple developers having read/write
access to a central caching directory, and for them to use each other's
build output. I expect there is only a relatively narrow window where
that would be useful, where there are multiple developers working on a
very similar version of gem5, and where security considerations would
still allow them to build in mostly unvalidated intermediate build
products supplied by other developers.

Change-Id: I45dc31b68c68906401fb1cd9e9ed658f2ba1dd6c
---
M SConstruct
M src/Kconfig
2 files changed, 18 insertions(+), 27 deletions(-)



diff --git a/SConstruct b/SConstruct
index 87a8b3e..6900d2f 100755
--- a/SConstruct
+++ b/SConstruct
@@ -828,20 +828,6 @@

 kconfig.update_env(env, kconfig_file.abspath, config_file.abspath)

-# Do this after we save setting back, or else we'll tack on an
-# extra 'qdo' every time we run scons.
-if env['CONF']['BATCH']:
-env['CC'] = env['CONF']['BATCH_CMD'] + ' ' + env['CC']
-env['CXX']= env['CONF']['BATCH_CMD'] + ' ' + env['CXX']
-env['AS'] = env['CONF']['BATCH_CMD'] + ' ' + env['AS']
-env['AR'] = env['CONF']['BATCH_CMD'] + ' ' + env['AR']
-env['RANLIB'] = env['CONF']['BATCH_CMD'] + ' ' + env['RANLIB']
-
-# Cache build files in the supplied directory.
-if env['CONF']['M5_BUILD_CACHE']:
-print('Using build cache located at',  
env['CONF']['M5_BUILD_CACHE'])

-CacheDir(env['CONF']['M5_BUILD_CACHE'])
-

 env.Append(CCFLAGS='$CCFLAGS_EXTRA')
 env.Append(LINKFLAGS='$LINKFLAGS_EXTRA')
diff --git a/src/Kconfig b/src/Kconfig
index fff5ea3..67089ea 100644
--- a/src/Kconfig
+++ b/src/Kconfig
@@ -25,19 +25,6 @@

 mainmenu "$(MAIN_MENU_TEXT)"

-config BATCH
-bool "Use batch pool for build and test"
-default n
-
-config BATCH_CMD
-string "Batch pool submission command name"
-default "qdo"
-depends on BATCH
-
-config M5_BUILD_CACHE
-string "Cache built objects in this directory"
-default ""
-
 config USE_EFENCE
 bool "Link with Electric Fence malloc debugger"
 default n

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/58891
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: I45dc31b68c68906401fb1cd9e9ed658f2ba1dd6c
Gerrit-Change-Number: 58891
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black 
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] [S] Change in gem5/gem5[develop]: scons: Ensure the fast model license count is always at least 1.

2022-04-12 Thread Gabe Black (Gerrit) via gem5-dev
Gabe Black has submitted this change. (  
https://gem5-review.googlesource.com/c/public/gem5/+/58490 )


Change subject: scons: Ensure the fast model license count is always at  
least 1.

..

scons: Ensure the fast model license count is always at least 1.

Even though the default value for the license count is 1, it seems that
if fast model is disabled, kconfig will set it to 0. When creating a
cycle using itertools over a list with zero elements, it will raise a
StopIteration.

Even though we don't actually try to build any fast model components
in that case, we do still set them up with a license slot. If the
cycle iterator is essentially broken, that will prevent that from
working and break the build.

This change forces the license count to be at least 1, even if fast
model is disabled and the license count may be set to 0 in the config.

Change-Id: Ia8df256a8f292deb6fb6fa3c5f9a7d58c2b7f782
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/58490
Reviewed-by: Andreas Sandberg 
Maintainer: Gabe Black 
Tested-by: kokoro 
---
M src/arch/arm/fastmodel/SConscript
1 file changed, 30 insertions(+), 1 deletion(-)

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




diff --git a/src/arch/arm/fastmodel/SConscript  
b/src/arch/arm/fastmodel/SConscript

index 23ddb84..b8ee987 100644
--- a/src/arch/arm/fastmodel/SConscript
+++ b/src/arch/arm/fastmodel/SConscript
@@ -268,7 +268,10 @@
 t[0] = t[1]


-license_count = int(env['CONF']['ARMLMD_LICENSE_COUNT'])
+# If fast model is disabled, ARMLMD_LICENSE_COUNT will be 0 which will  
break

+# the cycle() iterator below. The fast model components won't be built, but
+# they still need to be set up successfully with valid license slots.
+license_count = max(int(env['CONF']['ARMLMD_LICENSE_COUNT']), 1)
 arm_licenses = list((Value(object()) for i in range(license_count)))
 license_cycle = cycle(arm_licenses)


--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/58490
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: Ia8df256a8f292deb6fb6fa3c5f9a7d58c2b7f782
Gerrit-Change-Number: 58490
Gerrit-PatchSet: 3
Gerrit-Owner: Gabe Black 
Gerrit-Reviewer: Andreas Sandberg 
Gerrit-Reviewer: Earl Ou 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Jui-min Lee 
Gerrit-Reviewer: Sudhanshu Jha 
Gerrit-Reviewer: Yu-hsin Wang 
Gerrit-Reviewer: kokoro 
Gerrit-CC: Gabe Black 
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] [M] Change in gem5/gem5[develop]: arch: Eliminate the now unused read_code and write_code args.

2022-04-12 Thread Gabe Black (Gerrit) via gem5-dev
d_write, op_idx):
-assert(self.read_code == None)
-
 c_readw = f'\t\tauto _d{op_idx} = \n' \
   f'\t\t*({self.parser.namespace}::' \
   f'VecPredRegContainer *)xc->getWritableRegOperand(' \
@@ -472,9 +428,6 @@
 return c_readw

 def makeWrite(self, pred_write, op_idx):
-if self.write_code != None:
-return self.buildWriteCode(pred_write, op_idx)
-
 return f'''
 if (traceData) {{
 traceData->setData(tmp_d{op_idx});
@@ -516,8 +469,6 @@
 bit_select = 0
 if (self.ctype == 'float' or self.ctype == 'double'):
 error('Attempt to read control register as FP')
-if self.read_code != None:
-return self.buildReadCode(pred_read, op_idx)

 return '%s = xc->readMiscRegOperand(this, %s);\n' % \
 (self.base_name, op_idx)
@@ -525,9 +476,6 @@
 def makeWrite(self, pred_write, op_idx):
 if (self.ctype == 'float' or self.ctype == 'double'):
 error('Attempt to write control register as FP')
-if self.write_code != None:
-return self.buildWriteCode(pred_write, op_idx)
-
 wb = 'xc->setMiscRegOperand(this, %s, %s);\n' % \
  (op_idx, self.base_name)
 wb += 'if (traceData) { traceData->setData(%s); }' % \
@@ -551,13 +499,9 @@
 return '%s %s = {};\n' % (self.ctype, self.base_name)

 def makeRead(self, pred_read, op_idx):
-if self.read_code != None:
-return self.buildReadCode(pred_read, op_idx)
 return ''

 def makeWrite(self, pred_write, op_idx):
-if self.write_code != None:
-return self.buildWriteCode(pred_write, op_idx)
 return ''

 class MemOperandDesc(OperandDesc):

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/49743
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: I27b1b87ab51a44b5d7280e29e22f38d97d968a65
Gerrit-Change-Number: 49743
Gerrit-PatchSet: 67
Gerrit-Owner: Gabe Black 
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] [S] Change in gem5/gem5[develop]: arch-x86: Override make(Read|Write) instead of (read|write)_code.

2022-04-12 Thread Gabe Black (Gerrit) via gem5-dev
Gabe Black has submitted this change. (  
https://gem5-review.googlesource.com/c/public/gem5/+/49741 )


Change subject: arch-x86: Override make(Read|Write) instead of (read| 
write)_code.

..

arch-x86: Override make(Read|Write) instead of (read|write)_code.

Change-Id: Iab077f58e19aa6bfeed555caa31a4c8b3d261059
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/49741
Tested-by: kokoro 
Reviewed-by: Gabe Black 
Maintainer: Gabe Black 
---
M src/arch/x86/isa/operands.isa
1 file changed, 31 insertions(+), 9 deletions(-)

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




diff --git a/src/arch/x86/isa/operands.isa b/src/arch/x86/isa/operands.isa
index 2eaab4b..afbb8a0 100644
--- a/src/arch/x86/isa/operands.isa
+++ b/src/arch/x86/isa/operands.isa
@@ -55,20 +55,29 @@

 let {{
 class IntReg(IntRegOp):
-def __init__(self, idx, id, *args, **kwargs):
+def __init__(self, idx, id, data_size='dataSize', *args, **kwargs):
 super().__init__('uqw', idx, 'IsInteger', id, *args, **kwargs)
+self.attrs['data_size'] = data_size

 class PickedReg(IntReg):
-def __init__(self, idx, id, size='dataSize'):
-super().__init__(idx, id,
-read_code='pick(xc->getRegOperand(this, %(op_idx)s), '
-  '%(reg_idx)s, ' + size + ')')
+@overrideInOperand
+def makeRead(self, predRead, op_idx):
+return f'{self.base_name} = pick(xc->getRegOperand(' \
+f'this, {op_idx}), {self.reg_spec}, ' \
+f'{self.data_size});\n'
+
+def __init__(self, idx, id, data_size='dataSize'):
+super().__init__(idx, id, data_size)

 class SignedPickedReg(IntReg):
-def __init__(self, idx, id, size='dataSize'):
-super().__init__(idx, id,
-read_code='signedPick(xc->getRegOperand(this, '
-'%(op_idx)s), %(reg_idx)s, ' + size + ')')
+@overrideInOperand
+def makeRead(self, predRead, op_idx):
+return f'{self.base_name} = signedPick(xc->getRegOperand(' \
+f'this, {op_idx}), {self.reg_spec}, ' \
+f'{self.data_size});\n'
+
+def __init__(self, idx, id, data_size='dataSize'):
+super().__init__(idx, id, data_size)

 class FloatReg(FloatRegOp):
 def __init__(self, idx, id):

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/49741
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: Iab077f58e19aa6bfeed555caa31a4c8b3d261059
Gerrit-Change-Number: 49741
Gerrit-PatchSet: 67
Gerrit-Owner: Gabe Black 
Gerrit-Reviewer: Bradford Beckmann 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Giacomo Travaglini 
Gerrit-Reviewer: Matt Sinclair 
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] [M] Change in gem5/gem5[develop]: misc: Add KCONFIG.md file which talks about Kconfig files.

2022-04-11 Thread Gabe Black (Gerrit) via gem5-dev
ily put into environment variables. In the Kconfig  
files
+themselves, these environment variables can be accessed using $(FOO)  
syntax,

+which is described in kconfiglib's documentation.
+
+Note that this is slightly different from the kernel's Kconfig syntax,  
where

+the environment variables would have to be imported in using other keywords
+first.
+
+This is generally used to make automatic/measured settings which were
+determined in SConsopts files available in Kconfig files. They can then be  
used

+to compute dependencies, or to set default values, etc.
+
+# Structure of the Kconfig hierarchy
+
+Unlike SConscript files, gem5 does not find Kconfig files automatically,  
and

+they are only used if they are included explicitly in other Kconfig files.
+
+Kconfig options should be defined as close as possible to where they are  
used.

+This makes them easier to find, keeps related functionality grouped
+together in the source tree, and minimizes conflicts from modifying the  
same

+few, central files when changing unrelated parts of gem5.
+
+When including a Kconfig file in another, you should use the "rsource"  
keyword
+which is a kconfiglib extension. This lets you include the other file  
using a

+path which is relative to the current file, and also helps make the kconfig
+files more modular and self contained.
+
+# EXTRAS directories.
+
+The EXTRAS variable can be set to a list of directories which hold  
additional
+source that should be built into gem5. Because there's no way to know what  
(if
+any) paths will be in EXTRAS ahead of time, it is not possible to  
explicitly

+include kconfig files in those directories from a static file.
+
+Instead, gem5's real root Kconfig file, which includes the one in src, is
+automatically generated as part of the build. It uses the kconfiglib  
extension
+"osource" to optionally source a file called Kconfig in the base of each  
EXTRAS
+directory after it has sourced gem5's main Kconfig. If you want to add  
Kconfig
+options to your EXTRAS directory, you can create that file, and then  
rsource

+any additional internal Kconfig files as needed.

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/58634
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: Ib981d1e265cf466d453071b33820d6baa24e17d4
Gerrit-Change-Number: 58634
Gerrit-PatchSet: 4
Gerrit-Owner: Gabe Black 
Gerrit-Reviewer: Andreas Sandberg 
Gerrit-Reviewer: Bobby Bruce 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Jason Lowe-Power 
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] [S] Change in gem5/gem5[develop]: scons: Use the 'png' tag for the PNG library.

2022-04-07 Thread Gabe Black (Gerrit) via gem5-dev
Gabe Black has submitted this change. (  
https://gem5-review.googlesource.com/c/public/gem5/+/58709 )


Change subject: scons: Use the 'png' tag for the PNG library.
..

scons: Use the 'png' tag for the PNG library.

Use that instead of checking HAVE_PNG manually.

Change-Id: I70876982c2506bee1173341fa100f5fae2ae4302
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/58709
Maintainer: Gabe Black 
Reviewed-by: Yu-hsin Wang 
Reviewed-by: Giacomo Travaglini 
Tested-by: kokoro 
---
M src/base/SConscript
1 file changed, 17 insertions(+), 2 deletions(-)

Approvals:
  Giacomo Travaglini: Looks good to me, approved
  Yu-hsin Wang: Looks good to me, approved
  Gabe Black: Looks good to me, approved
  kokoro: Regressions pass




diff --git a/src/base/SConscript b/src/base/SConscript
index 99d4bee..1d40d79 100644
--- a/src/base/SConscript
+++ b/src/base/SConscript
@@ -43,8 +43,7 @@
 Source('debug.cc', add_tags=['gem5 trace', 'gem5 events'])
 GTest('debug.test', 'debug.test.cc', 'debug.cc')
 Source('fenv.cc', tags='fenv')
-if env['CONF']['HAVE_PNG']:
-SourceLib('png')
+SourceLib('png', tags='png')
 Source('pngwriter.cc', tags='png')
 Source('fiber.cc')
 GTest('fiber.test', 'fiber.test.cc', 'fiber.cc')

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/58709
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: I70876982c2506bee1173341fa100f5fae2ae4302
Gerrit-Change-Number: 58709
Gerrit-PatchSet: 2
Gerrit-Owner: Gabe Black 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Giacomo Travaglini 
Gerrit-Reviewer: Jui-min Lee 
Gerrit-Reviewer: Yu-hsin Wang 
Gerrit-Reviewer: kokoro 
Gerrit-CC: Earl Ou 
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] [S] Change in gem5/gem5[develop]: scons: Use the 'png' tag for the PNG library.

2022-04-06 Thread Gabe Black (Gerrit) via gem5-dev
Gabe Black has uploaded this change for review. (  
https://gem5-review.googlesource.com/c/public/gem5/+/58709 )



Change subject: scons: Use the 'png' tag for the PNG library.
..

scons: Use the 'png' tag for the PNG library.

Use that instead of checking HAVE_PNG manually.

Change-Id: I70876982c2506bee1173341fa100f5fae2ae4302
---
M src/base/SConscript
1 file changed, 12 insertions(+), 2 deletions(-)



diff --git a/src/base/SConscript b/src/base/SConscript
index 99d4bee..1d40d79 100644
--- a/src/base/SConscript
+++ b/src/base/SConscript
@@ -43,8 +43,7 @@
 Source('debug.cc', add_tags=['gem5 trace', 'gem5 events'])
 GTest('debug.test', 'debug.test.cc', 'debug.cc')
 Source('fenv.cc', tags='fenv')
-if env['CONF']['HAVE_PNG']:
-SourceLib('png')
+SourceLib('png', tags='png')
 Source('pngwriter.cc', tags='png')
 Source('fiber.cc')
 GTest('fiber.test', 'fiber.test.cc', 'fiber.cc')

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/58709
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: I70876982c2506bee1173341fa100f5fae2ae4302
Gerrit-Change-Number: 58709
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black 
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] [S] Change in gem5/gem5[develop]: scons: Monkey patch a fix from 3.0.2 into 3.0.0 and 3.0.1.

2022-04-06 Thread Gabe Black (Gerrit) via gem5-dev
Gabe Black has submitted this change. (  
https://gem5-review.googlesource.com/c/public/gem5/+/58633 )


Change subject: scons: Monkey patch a fix from 3.0.2 into 3.0.0 and 3.0.1.
..

scons: Monkey patch a fix from 3.0.2 into 3.0.0 and 3.0.1.

Ensure that SCons.Subst.Literal can be hashed.

https: //pairlist2.pair.net/pipermail/scons-dev/2018-October/004766.html
Change-Id: I5221b63a5fd63189eb690c77e780805dc6d68125
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/58633
Maintainer: Gabe Black 
Reviewed-by: Bobby Bruce 
Maintainer: Bobby Bruce 
Tested-by: kokoro 
---
M SConstruct
1 file changed, 25 insertions(+), 0 deletions(-)

Approvals:
  Bobby Bruce: Looks good to me, approved; Looks good to me, approved
  Gabe Black: Looks good to me, approved
  kokoro: Regressions pass




diff --git a/SConstruct b/SConstruct
index b170cf4..cf130c1 100755
--- a/SConstruct
+++ b/SConstruct
@@ -94,6 +94,14 @@
 import SCons.Node.FS
 import SCons.Tool

+if getattr(SCons, '__version__', None) in ('3.0.0', '3.0.1'):
+# Monkey patch a fix which appears in version 3.0.2, since we only
+# require version 3.0.0
+def __hash__(self):
+return hash(self.lstr)
+import SCons.Subst
+SCons.Subst.Literal.__hash__ = __hash__
+

 
 #

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/58633
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: I5221b63a5fd63189eb690c77e780805dc6d68125
Gerrit-Change-Number: 58633
Gerrit-PatchSet: 2
Gerrit-Owner: Gabe Black 
Gerrit-Reviewer: Bobby Bruce 
Gerrit-Reviewer: Gabe Black 
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] [M] Change in gem5/gem5[develop]: misc: Add KCONFIG.md file which talks about Kconfig files.

2022-04-05 Thread Gabe Black (Gerrit) via gem5-dev
hen be  
used

+to compute dependencies, or to set default values, etc.
+
+# Structure of the Kconfig hierarchy
+
+Unlike SConscript files, gem5 does not find Kconfig files automatically,  
and

+they are only used if they are included explicitly in other Kconfig files.
+
+Kconfig options should be defined as close as possible to where they are  
used.

+This makes them easier to find, keeps related functionality grouped
+together in the source tree, and minimizes conflicts from modifying the  
same

+few, central files when changing unrelated parts of gem5.
+
+When including a Kconfig file in another, you should use the "rsource"  
keyword
+which is a kconfiglib extension. This lets you include the other file  
using a

+path which is relative to the current file, and also helps make the kconfig
+files more modular and self contained.
+
+# EXTRAS directories.
+
+The EXTRAS variable can be set to a list of directories which hold  
additional
+source that should be built into gem5. Because there's no way to know what  
(if
+any) paths will be in EXTRAS ahead of time, it is not possible to  
explicitly

+include kconfig files in those directories from a static file.
+
+Instead, gem5's real root Kconfig file, which includes the one in src, is
+automatically generated as part of the build. It uses the kconfiglib  
extension
+"osource" to optionally source a file called Kconfig in the base of each  
EXTRAS
+directory after it has sourced gem5's main Kconfig. If you want to add  
Kconfig
+options to your EXTRAS directory, you can create that file, and then  
rsource

+any additional internal Kconfig files as needed.

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/58634
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: Ib981d1e265cf466d453071b33820d6baa24e17d4
Gerrit-Change-Number: 58634
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black 
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] [S] Change in gem5/gem5[develop]: scons: Monkey patch a fix from 3.0.2 into 3.0.0 and 3.0.1.

2022-04-05 Thread Gabe Black (Gerrit) via gem5-dev
Gabe Black has uploaded this change for review. (  
https://gem5-review.googlesource.com/c/public/gem5/+/58633 )



Change subject: scons: Monkey patch a fix from 3.0.2 into 3.0.0 and 3.0.1.
..

scons: Monkey patch a fix from 3.0.2 into 3.0.0 and 3.0.1.

Ensure that SCons.Subst.Literal can be hashed.

https: //pairlist2.pair.net/pipermail/scons-dev/2018-October/004766.html
Change-Id: I5221b63a5fd63189eb690c77e780805dc6d68125
---
M SConstruct
1 file changed, 20 insertions(+), 0 deletions(-)



diff --git a/SConstruct b/SConstruct
index b170cf4..cf130c1 100755
--- a/SConstruct
+++ b/SConstruct
@@ -94,6 +94,14 @@
 import SCons.Node.FS
 import SCons.Tool

+if getattr(SCons, '__version__', None) in ('3.0.0', '3.0.1'):
+# Monkey patch a fix which appears in version 3.0.2, since we only
+# require version 3.0.0
+def __hash__(self):
+return hash(self.lstr)
+import SCons.Subst
+SCons.Subst.Literal.__hash__ = __hash__
+

 
 #

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/58633
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: I5221b63a5fd63189eb690c77e780805dc6d68125
Gerrit-Change-Number: 58633
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black 
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] [S] Change in gem5/gem5[develop]: scons: Increase the minimum version of SCons to 3.0.2.

2022-04-05 Thread Gabe Black (Gerrit) via gem5-dev
Gabe Black has uploaded this change for review. (  
https://gem5-review.googlesource.com/c/public/gem5/+/58629 )



Change subject: scons: Increase the minimum version of SCons to 3.0.2.
..

scons: Increase the minimum version of SCons to 3.0.2.

This includes a fix for hashing the Literal type, which causes issues
on python 3 within the fast model SConscript. The old requirement was
3.0.0. It looks like there are bug fix versions up to 3.0.5, although
we don't yet have a specific reason to require those since we haven't
run into the bugs fixed in those versions (yet).

Change-Id: I429ed889791fa581693ad2dc5b597ba27b7690fc
---
M site_scons/site_init.py
1 file changed, 16 insertions(+), 1 deletion(-)



diff --git a/site_scons/site_init.py b/site_scons/site_init.py
index 5eeb290..7b96fb1 100644
--- a/site_scons/site_init.py
+++ b/site_scons/site_init.py
@@ -42,7 +42,7 @@

 # Check for recent-enough Python and SCons versions.
 try:
-EnsureSConsVersion(3, 0, 0)
+EnsureSConsVersion(3, 0, 2)
 except SystemExit as e:
 print("""
 For more details, see:

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/58629
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: I429ed889791fa581693ad2dc5b597ba27b7690fc
Gerrit-Change-Number: 58629
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black 
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: Ensure the fast model license count is always at least 1.

2022-04-01 Thread Gabe Black (Gerrit) via gem5-dev
Gabe Black has uploaded this change for review. (  
https://gem5-review.googlesource.com/c/public/gem5/+/58490 )



Change subject: scons: Ensure the fast model license count is always at  
least 1.

..

scons: Ensure the fast model license count is always at least 1.

Even though the default value for the license count is 1, it seems that
if fast model is disabled, kconfig will set it to 0. When creating a
cycle using itertools over a list with zero elements, it will raise a
StopIteration.

Even though we don't actually try to build any fast model components
in that case, we do still set them up with a license slot. If the
cycle iterator is essentially broken, that will prevent that from
working and break the build.

This change forces the license count to be at least 1, even if fast
model is disabled and the license count may be set to 0 in the config.

Change-Id: Ia8df256a8f292deb6fb6fa3c5f9a7d58c2b7f782
---
M src/arch/arm/fastmodel/SConscript
1 file changed, 23 insertions(+), 1 deletion(-)



diff --git a/src/arch/arm/fastmodel/SConscript  
b/src/arch/arm/fastmodel/SConscript

index bfe7e97..b458d0f 100644
--- a/src/arch/arm/fastmodel/SConscript
+++ b/src/arch/arm/fastmodel/SConscript
@@ -268,7 +268,7 @@
 t[0] = t[1]


-license_count = int(env['CONF']['ARMLMD_LICENSE_COUNT'])
+license_count = max(int(env['CONF']['ARMLMD_LICENSE_COUNT']), 1)
 arm_licenses = list((Value(object()) for i in range(license_count)))
 license_cycle = cycle(arm_licenses)


--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/58490
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: Ia8df256a8f292deb6fb6fa3c5f9a7d58c2b7f782
Gerrit-Change-Number: 58490
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black 
Gerrit-CC: Gabe Black 
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: Only warn about not finding fast model libs if it's enabled.

2022-03-31 Thread Gabe Black (Gerrit) via gem5-dev
Gabe Black has submitted this change. (  
https://gem5-review.googlesource.com/c/public/gem5/+/58355 )


 (

1 is the latest approved patch-set.
No files were changed between the latest approved patch-set and the  
submitted one.
 )Change subject: scons: Only warn about not finding fast model libs if  
it's enabled.

..

scons: Only warn about not finding fast model libs if it's enabled.

These warnings could be confusing and aren't useful if it's not.

Change-Id: Ie660f639a3d8ee3406153ceb771b1ba5d0df9225
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/58355
Reviewed-by: Yu-hsin Wang 
Maintainer: Gabe Black 
Tested-by: kokoro 
---
M src/arch/arm/fastmodel/SConscript
1 file changed, 17 insertions(+), 1 deletion(-)

Approvals:
  Yu-hsin Wang: Looks good to me, approved
  Gabe Black: Looks good to me, approved
  kokoro: Regressions pass




diff --git a/src/arch/arm/fastmodel/SConscript  
b/src/arch/arm/fastmodel/SConscript

index cfbe4b9..cded3cd 100644
--- a/src/arch/arm/fastmodel/SConscript
+++ b/src/arch/arm/fastmodel/SConscript
@@ -105,7 +105,8 @@
 full_name = Dir(path).File(static_name).get_abspath()
 if os.path.isfile(full_name):
 return File(full_name)
-warning("Failed to find FM static lib: " + name)
+if env['CONF']['USE_ARM_FASTMODEL']:
+warning("Failed to find FM static lib: " + name)
 return name

 # Adjust the build environment to support building in Fast Models.

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/58355
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: Ie660f639a3d8ee3406153ceb771b1ba5d0df9225
Gerrit-Change-Number: 58355
Gerrit-PatchSet: 3
Gerrit-Owner: Gabe Black 
Gerrit-Reviewer: Earl Ou 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Jui-min Lee 
Gerrit-Reviewer: Yu-hsin Wang 
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]: scons: Add a tag for arm fastmodel and use it.

2022-03-31 Thread Gabe Black (Gerrit) via gem5-dev
:
 warning('ARM Fast Models require systemc support')
 env['CONF']['USE_ARM_FASTMODEL'] = False
-Return()
-
-if not env['CONF']['USE_ARM_FASTMODEL']:
-Return()


 systemc_home = Dir('#/src/systemc/ext/systemc_home')
@@ -144,11 +142,11 @@
 'IrisSupport',
 )
 for lib in fm_static_libs:
-SourceLib(staticify(env, lib))
+SourceLib(staticify(env, lib), tags='arm fastmodel')

-SourceLib('atomic')
-SourceLib('dl')
-SourceLib('rt')
+SourceLib('atomic', tags='arm fastmodel')
+SourceLib('dl', tags='arm fastmodel')
+SourceLib('rt', tags='arm fastmodel')

 class ProjectFileParser(Grammar):
 def __init__(self):
@@ -399,7 +397,9 @@
 env.Append(LIBPATH=self.libpaths)
 env.AddLocalRPATH(*self.rpaths)
 env.Append(CPPPATH=self.headerpaths)
-env.Prepend(LIBS=self.libs)
+# Put these libraries earlier in the list by setting priority.
+for lib in self.libs:
+SourceLib(lib, priority=1, tags='arm fastmodel')

 def simgen_builder(self, target, source, env):
 cmd = self.simgen_cmd
@@ -414,10 +414,10 @@

 Export('ArmFastModelComponent')

-PySource('m5', 'arm_fast_model.py')
-Source('fastmodel.cc')
+PySource('m5', 'arm_fast_model.py', tags='arm fastmodel')
+Source('fastmodel.cc', tags='arm fastmodel')

 SimObject('FastModel.py', sim_objects=[
-'AmbaToTlmBridge64', 'AmbaFromTlmBridge64'])
-Source('amba_to_tlm_bridge.cc')
-Source('amba_from_tlm_bridge.cc')
+'AmbaToTlmBridge64', 'AmbaFromTlmBridge64'], tags='arm fastmodel')
+Source('amba_to_tlm_bridge.cc', tags='arm fastmodel')
+Source('amba_from_tlm_bridge.cc', tags='arm fastmodel')
diff --git a/src/arch/arm/fastmodel/iris/SConscript  
b/src/arch/arm/fastmodel/iris/SConscript

index 1908d72..3387719 100644
--- a/src/arch/arm/fastmodel/iris/SConscript
+++ b/src/arch/arm/fastmodel/iris/SConscript
@@ -25,14 +25,12 @@

 Import('*')

-if not env['CONF']['USE_ARM_FASTMODEL']:
-Return()
-
 SimObject('Iris.py', sim_objects=[
-'IrisTLB', 'IrisMMU', 'IrisInterrupts', 'IrisISA', 'IrisBaseCPU'])
-Source('cpu.cc')
-Source('interrupts.cc')
-Source('isa.cc')
-Source('tlb.cc')
+'IrisTLB', 'IrisMMU', 'IrisInterrupts', 'IrisISA', 'IrisBaseCPU'],
+tags='arm fastmodel')
+Source('cpu.cc', tags='arm fastmodel')
+Source('interrupts.cc', tags='arm fastmodel')
+Source('isa.cc', tags='arm fastmodel')
+Source('tlb.cc', tags='arm fastmodel')

-Source('thread_context.cc')
+Source('thread_context.cc', tags='arm fastmodel')
diff --git a/src/arch/arm/fastmodel/reset_controller/SConscript  
b/src/arch/arm/fastmodel/reset_controller/SConscript

index b6f7852..8e5de8e 100644
--- a/src/arch/arm/fastmodel/reset_controller/SConscript
+++ b/src/arch/arm/fastmodel/reset_controller/SConscript
@@ -25,10 +25,7 @@

 Import('*')

-if not env['CONF']['USE_ARM_FASTMODEL']:
-Return()
-
 SimObject('FastModelResetControllerExample.py', sim_objects=[
-'FastModelResetControllerExample'])
+'FastModelResetControllerExample'], tags='arm fastmodel')

-Source('example.cc')
+Source('example.cc', tags='arm fastmodel')

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/58356
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: If6ee61bb8c23606859e60323b8ca2c5254dbdecc
Gerrit-Change-Number: 58356
Gerrit-PatchSet: 3
Gerrit-Owner: Gabe Black 
Gerrit-Reviewer: Andreas Sandberg 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Jui-min Lee 
Gerrit-Reviewer: Yu-hsin Wang 
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]: scons: Rework the fastmodel extract_var helper.

2022-03-31 Thread Gabe Black (Gerrit) via gem5-dev
Gabe Black has submitted this change. (  
https://gem5-review.googlesource.com/c/public/gem5/+/58354 )


Change subject: scons: Rework the fastmodel extract_var helper.
..

scons: Rework the fastmodel extract_var helper.

This helper extracts config variables and sets them up for use in
fast model tools. Rework this function for two purposes. First, ensure
that the ['CONF'] subdict is used consistently. It was used in one spot
in that function, but not anywhere else. Avoid those mistakes by
accessing the configuration dict only once, and then reusing the value.

Second, only print the values of those variables if they aren't empty.
That avoids extra log output for values which aren't set up and aren't
being used, while still exposing those values if they are set up. This
will print them even if they aren't being actively used, but are set up
and could be with other changes in the config.

Change-Id: Ia3ea76e6cb6b3347fd082112a1eaa8d594e06ca2
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/58354
Reviewed-by: Gabe Black 
Maintainer: Gabe Black 
Tested-by: kokoro 
---
M src/arch/arm/fastmodel/SConscript
1 file changed, 32 insertions(+), 5 deletions(-)

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




diff --git a/src/arch/arm/fastmodel/SConscript  
b/src/arch/arm/fastmodel/SConscript

index 5c4bbf9..cfbe4b9 100644
--- a/src/arch/arm/fastmodel/SConscript
+++ b/src/arch/arm/fastmodel/SConscript
@@ -61,13 +61,15 @@
 env['ENV']['SYSTEMC_HOME'] = systemc_home.abspath

 def extract_var(name):
-if name not in env['CONF']:
-error('Error: %s is not set' % name)
-print('%s = %s' % (name, env[name]))
+val = env['CONF'].get(name, None)
+if val is None:
+error(f'{name} is not set')
+if env['CONF']['USE_ARM_FASTMODEL']:
+print(f'{name} = {val}')
 # Make sure the value of this variable shows up as an environment  
variable

 # for commands scons runs.
-env['ENV'][name] = env[name]
-return env[name]
+env['ENV'][name] = val
+return val

 pvlib_home, maxcore_home, armlmd_license_file = \
 list(map(extract_var, ('PVLIB_HOME', 'MAXCORE_HOME',

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/58354
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: Ia3ea76e6cb6b3347fd082112a1eaa8d594e06ca2
Gerrit-Change-Number: 58354
Gerrit-PatchSet: 3
Gerrit-Owner: Gabe Black 
Gerrit-Reviewer: Earl Ou 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Jui-min Lee 
Gerrit-Reviewer: Yu-hsin Wang 
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]: scons: Stop the fast model project file parser from writing files.

2022-03-31 Thread Gabe Black (Gerrit) via gem5-dev
Gabe Black has submitted this change. (  
https://gem5-review.googlesource.com/c/public/gem5/+/58353 )


Change subject: scons: Stop the fast model project file parser from writing  
files.

..

scons: Stop the fast model project file parser from writing files.

PLY tries to write these little files into the SCons installation
directory, which it shouldn't even if it was allowed to. This avoids
a bunch of annoying messages about not having enough permission.

Change-Id: Ifd4eda9dd9f8518b3fd075e8a46de1b6c12c2127
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/58353
Reviewed-by: Gabe Black 
Maintainer: Gabe Black 
Tested-by: kokoro 
Reviewed-by: Jui-min Lee 
---
M SConstruct
M src/arch/arm/fastmodel/SConscript
2 files changed, 35 insertions(+), 0 deletions(-)

Approvals:
  Gabe Black: Looks good to me, approved; Looks good to me, approved
  Jui-min Lee: Looks good to me, approved
  kokoro: Regressions pass




diff --git a/SConstruct b/SConstruct
index 684cc8c..b170cf4 100755
--- a/SConstruct
+++ b/SConstruct
@@ -85,6 +85,9 @@
 from os.path import isdir, isfile
 from os.path import join, split

+import logging
+logging.basicConfig()
+
 # SCons imports
 import SCons
 import SCons.Node
diff --git a/src/arch/arm/fastmodel/SConscript  
b/src/arch/arm/fastmodel/SConscript

index a8734cd..5c4bbf9 100644
--- a/src/arch/arm/fastmodel/SConscript
+++ b/src/arch/arm/fastmodel/SConscript
@@ -36,6 +36,7 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

 from itertools import cycle
+import logging
 import shlex

 Import('*')
@@ -147,6 +148,19 @@
 SourceLib('rt')

 class ProjectFileParser(Grammar):
+def __init__(self):
+self.log = logging.getLogger('fm_proj_ply')
+if GetOption('verbose'):
+self.log.setLevel(logging.DEBUG)
+
+self.yacc_kwargs['write_tables'] = False
+
+self.yacc_kwargs['debuglog'] = self.log
+self.yacc_kwargs['errorlog'] = self.log
+
+self.lex_kwargs['debuglog'] = self.log
+self.lex_kwargs['errorlog'] = self.log
+
 class Param(object):
 def __init__(self, is_object):
 self.is_object = is_object

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/58353
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: Ifd4eda9dd9f8518b3fd075e8a46de1b6c12c2127
Gerrit-Change-Number: 58353
Gerrit-PatchSet: 3
Gerrit-Owner: Gabe Black 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Giacomo Travaglini 
Gerrit-Reviewer: Jui-min Lee 
Gerrit-Reviewer: Yu-hsin Wang 
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]: scons: Tone down a fast model error into a warning.

2022-03-31 Thread Gabe Black (Gerrit) via gem5-dev
Gabe Black has submitted this change. (  
https://gem5-review.googlesource.com/c/public/gem5/+/58352 )


 (

1 is the latest approved patch-set.
No files were changed between the latest approved patch-set and the  
submitted one.

 )Change subject: scons: Tone down a fast model error into a warning.
..

scons: Tone down a fast model error into a warning.

If a fast model static library can't be found, we should treat that as
a warning instead of an error, and pass back the original library name
so that it can at least be added and potentially come from somewhere
else.

In practice, this is important because gem5 will be configured by SCons
indirectly in the future, using kconfig based tools that SCons runs on
the user's behalf. If SCons is misconfigured or not configured, this
error can trip, preventing those tools from starting. That creates a
catch 22, since you'd need SCons to fix the config, and SCons can't
run because of the config.

We can avoid that problem by making SCons more lenient, so that it can
still run even if it doesn't find static libraries where it might have
expected to.

Change-Id: Iadfd823b61fe96b937c2650250487d290492f265
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/58352
Maintainer: Gabe Black 
Reviewed-by: Yu-hsin Wang 
Tested-by: kokoro 
---
M src/arch/arm/fastmodel/SConscript
1 file changed, 31 insertions(+), 1 deletion(-)

Approvals:
  Yu-hsin Wang: Looks good to me, approved
  Gabe Black: Looks good to me, approved
  kokoro: Regressions pass




diff --git a/src/arch/arm/fastmodel/SConscript  
b/src/arch/arm/fastmodel/SConscript

index a7f6e17..a8734cd 100644
--- a/src/arch/arm/fastmodel/SConscript
+++ b/src/arch/arm/fastmodel/SConscript
@@ -102,7 +102,8 @@
 full_name = Dir(path).File(static_name).get_abspath()
 if os.path.isfile(full_name):
 return File(full_name)
-error("Failed to find FM static lib: " + name)
+warning("Failed to find FM static lib: " + name)
+return name

 # Adjust the build environment to support building in Fast Models.


--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/58352
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: Iadfd823b61fe96b937c2650250487d290492f265
Gerrit-Change-Number: 58352
Gerrit-PatchSet: 3
Gerrit-Owner: Gabe Black 
Gerrit-Reviewer: Earl Ou 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Jui-min Lee 
Gerrit-Reviewer: Yu-hsin Wang 
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]: scons: Add a priority field to the SourceLib construct.

2022-03-31 Thread Gabe Black (Gerrit) via gem5-dev
Gabe Black has submitted this change. (  
https://gem5-review.googlesource.com/c/public/gem5/+/58350 )


Change subject: scons: Add a priority field to the SourceLib construct.
..

scons: Add a priority field to the SourceLib construct.

This helps specify ordering for libraries that need it. Libraries with
a higher priority will be sorted earlier in the list, which can be
necessary when working with static libraries/archives.

The default value for "priority" is zero. It's only really necessary
to ensure relative ordering of particular pairings of libraries, so
it should be ok to use an absolute integer value for this. If you
need to order relative to a library, there is a good chance you're
adding it, or the place it's added is well known and you can easily
find its priority value. It's also unlikely that there would be a
complex series of interactions between libraries that would make a
more complicated system warranted.

Change-Id: Ie94a35e6563c07f8d462a4a52d0173ea3cf4f8de
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/58350
Maintainer: Gabe Black 
Reviewed-by: Jui-min Lee 
Tested-by: kokoro 
Reviewed-by: Yu-hsin Wang 
---
M src/SConscript
1 file changed, 32 insertions(+), 1 deletion(-)

Approvals:
  Jui-min Lee: Looks good to me, but someone else must approve
  Yu-hsin Wang: Looks good to me, approved
  Gabe Black: Looks good to me, approved
  kokoro: Regressions pass




diff --git a/src/SConscript b/src/SConscript
index 746d3f1..a7b6cec 100644
--- a/src/SConscript
+++ b/src/SConscript
@@ -76,7 +76,9 @@
 pass

 class SourceLib(SourceItem):
-pass
+def __init__(self, *args, **kwargs):
+self.priority = kwargs.pop('priority', 0)
+super().__init__(*args, **kwargs)

 build_tools = Dir('#build_tools')

@@ -388,6 +390,8 @@
 env['BUILDDIR'], self.path(env).dir.abspath)

 libs = self.libs(env)
+# Higher priority libraries should be earlier in the list.
+libs.sort(key=lambda l: l.priority, reverse=True)
 if libs:
 env.Append(LIBS=list(lib.source for lib in libs))


--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/58350
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: Ie94a35e6563c07f8d462a4a52d0173ea3cf4f8de
Gerrit-Change-Number: 58350
Gerrit-PatchSet: 3
Gerrit-Owner: Gabe Black 
Gerrit-Reviewer: Andreas Sandberg 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Jui-min Lee 
Gerrit-Reviewer: Yu-hsin Wang 
Gerrit-Reviewer: kokoro 
Gerrit-CC: Gabe Black 
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: Get rid of an unused fast model variable.

2022-03-31 Thread Gabe Black (Gerrit) via gem5-dev
Gabe Black has submitted this change. (  
https://gem5-review.googlesource.com/c/public/gem5/+/58351 )


 (

1 is the latest approved patch-set.
No files were changed between the latest approved patch-set and the  
submitted one.

 )Change subject: scons: Get rid of an unused fast model variable.
..

scons: Get rid of an unused fast model variable.

This held the location of the license file, assuming it actually was a
license file and not a license server URL. If this variable was unset
because the fast model configuration parameters hadn't been set, then
the "File" would resolve to the local directory, and SCons would get
upset that you'd called the same path a directory and a file.

We can avoid this problem by just getting rid of this variable, since
it isn't used anyway.

Change-Id: I2ccda90b85f2c83c73816967d145e6bf45733f89
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/58351
Maintainer: Gabe Black 
Reviewed-by: Yu-hsin Wang 
Tested-by: kokoro 
---
M src/arch/arm/fastmodel/SConscript
1 file changed, 22 insertions(+), 2 deletions(-)

Approvals:
  Yu-hsin Wang: Looks good to me, approved
  Gabe Black: Looks good to me, approved
  kokoro: Regressions pass




diff --git a/src/arch/arm/fastmodel/SConscript  
b/src/arch/arm/fastmodel/SConscript

index cbb2c15..a7f6e17 100644
--- a/src/arch/arm/fastmodel/SConscript
+++ b/src/arch/arm/fastmodel/SConscript
@@ -74,8 +74,6 @@

 pvlib_home = Dir(pvlib_home)
 maxcore_home = Dir(maxcore_home)
-armlmd_license_file = File(armlmd_license_file)
-

 pvlib_flavor = env['CONF']['PVLIB_FLAVOR']
 pvlib_lib_dir = pvlib_home.Dir('lib').Dir(pvlib_flavor)

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/58351
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: I2ccda90b85f2c83c73816967d145e6bf45733f89
Gerrit-Change-Number: 58351
Gerrit-PatchSet: 3
Gerrit-Owner: Gabe Black 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Giacomo Travaglini 
Gerrit-Reviewer: Jui-min Lee 
Gerrit-Reviewer: Yu-hsin Wang 
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]: scons: Remove an error check from the ProtoBuf declare-er.

2022-03-30 Thread Gabe Black (Gerrit) via gem5-dev
Gabe Black has submitted this change. (  
https://gem5-review.googlesource.com/c/public/gem5/+/58349 )


Change subject: scons: Remove an error check from the ProtoBuf declare-er.
..

scons: Remove an error check from the ProtoBuf declare-er.

ProtoBuf files can (and should) be declared to SCons unconditionally,
but then also use a "protobuf" tag. This lets SCons still include them
conditionally when it gathers sources to build certain binaries without
having additional python logic in SConscripts, or manually interpreting
config state.

Change-Id: I9426d647bc2d6c9d7eee7dadba77f75ed83bcaad
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/58349
Maintainer: Giacomo Travaglini 
Reviewed-by: Jason Lowe-Power 
Reviewed-by: Bobby Bruce 
Tested-by: kokoro 
---
M src/SConscript
1 file changed, 20 insertions(+), 5 deletions(-)

Approvals:
  Jason Lowe-Power: Looks good to me, approved
  Bobby Bruce: Looks good to me, approved
  Giacomo Travaglini: Looks good to me, approved
  kokoro: Regressions pass




diff --git a/src/SConscript b/src/SConscript
index c1b00f0..d55520b 100644
--- a/src/SConscript
+++ b/src/SConscript
@@ -259,11 +259,6 @@

 def ProtoBuf(source, tags=None, add_tags=None):
 '''Add a Protocol Buffer to build'''
-
-if not env['HAVE_PROTOC'] or not env['CONF']['HAVE_PROTOBUF']:
-error('Got protobuf to build, but lacks support!')
-
-'''Specify the source file, and any tags'''
 Source(source, tags, add_tags,  
append={'CXXFLAGS': '-Wno-array-bounds'})


 env['PROTOC_GRPC'] = distutils.spawn.find_executable('grpc_cpp_plugin')

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/58349
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: I9426d647bc2d6c9d7eee7dadba77f75ed83bcaad
Gerrit-Change-Number: 58349
Gerrit-PatchSet: 2
Gerrit-Owner: Gabe Black 
Gerrit-Reviewer: Bobby Bruce 
Gerrit-Reviewer: Gabe Black 
Gerrit-Reviewer: Giacomo Travaglini 
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]: scons: Stop the fast model project file parser from writing files.

2022-03-30 Thread Gabe Black (Gerrit) via gem5-dev
Gabe Black has uploaded this change for review. (  
https://gem5-review.googlesource.com/c/public/gem5/+/58353 )



Change subject: scons: Stop the fast model project file parser from writing  
files.

..

scons: Stop the fast model project file parser from writing files.

PLY tries to write these little files into the SCons installation
directory, which it shouldn't even if it was allowed to. This avoids
a bunch of annoying messages about not having enough permission.

Change-Id: Ifd4eda9dd9f8518b3fd075e8a46de1b6c12c2127
---
M src/arch/arm/fastmodel/SConscript
1 file changed, 25 insertions(+), 0 deletions(-)



diff --git a/src/arch/arm/fastmodel/SConscript  
b/src/arch/arm/fastmodel/SConscript

index a8734cd..884f970 100644
--- a/src/arch/arm/fastmodel/SConscript
+++ b/src/arch/arm/fastmodel/SConscript
@@ -36,6 +36,7 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

 from itertools import cycle
+import logging
 import shlex

 Import('*')
@@ -147,6 +148,17 @@
 SourceLib('rt')

 class ProjectFileParser(Grammar):
+def __init__(self):
+self.log = logging.getLogger()
+
+self.yacc_kwargs['write_tables'] = False
+
+self.yacc_kwargs['debuglog'] = self.log
+self.yacc_kwargs['errorlog'] = self.log
+
+self.lex_kwargs['debuglog'] = self.log
+self.lex_kwargs['errorlog'] = self.log
+
 class Param(object):
 def __init__(self, is_object):
 self.is_object = is_object

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/58353
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: Ifd4eda9dd9f8518b3fd075e8a46de1b6c12c2127
Gerrit-Change-Number: 58353
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black 
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: Add a tag for arm fastmodel and use it.

2022-03-30 Thread Gabe Black (Gerrit) via gem5-dev
 fastmodel')

-SourceLib('atomic')
-SourceLib('dl')
-SourceLib('rt')
+SourceLib('atomic', tags='arm fastmodel')
+SourceLib('dl', tags='arm fastmodel')
+SourceLib('rt', tags='arm fastmodel')

 class ProjectFileParser(Grammar):
 def __init__(self):
@@ -397,7 +395,9 @@
 env.Append(LIBPATH=self.libpaths)
 env.AddLocalRPATH(*self.rpaths)
 env.Append(CPPPATH=self.headerpaths)
-env.Prepend(LIBS=self.libs)
+# Put these libraries earlier in the list by setting priority.
+for lib in self.libs:
+SourceLib(lib, priority=1, tags='arm fastmodel')

 def simgen_builder(self, target, source, env):
 cmd = self.simgen_cmd
@@ -412,10 +412,10 @@

 Export('ArmFastModelComponent')

-PySource('m5', 'arm_fast_model.py')
-Source('fastmodel.cc')
+PySource('m5', 'arm_fast_model.py', tags='arm fastmodel')
+Source('fastmodel.cc', tags='arm fastmodel')

 SimObject('FastModel.py', sim_objects=[
-'AmbaToTlmBridge64', 'AmbaFromTlmBridge64'])
-Source('amba_to_tlm_bridge.cc')
-Source('amba_from_tlm_bridge.cc')
+'AmbaToTlmBridge64', 'AmbaFromTlmBridge64'], tags='arm fastmodel')
+Source('amba_to_tlm_bridge.cc', tags='arm fastmodel')
+Source('amba_from_tlm_bridge.cc', tags='arm fastmodel')
diff --git a/src/arch/arm/fastmodel/iris/SConscript  
b/src/arch/arm/fastmodel/iris/SConscript

index 1908d72..3387719 100644
--- a/src/arch/arm/fastmodel/iris/SConscript
+++ b/src/arch/arm/fastmodel/iris/SConscript
@@ -25,14 +25,12 @@

 Import('*')

-if not env['CONF']['USE_ARM_FASTMODEL']:
-Return()
-
 SimObject('Iris.py', sim_objects=[
-'IrisTLB', 'IrisMMU', 'IrisInterrupts', 'IrisISA', 'IrisBaseCPU'])
-Source('cpu.cc')
-Source('interrupts.cc')
-Source('isa.cc')
-Source('tlb.cc')
+'IrisTLB', 'IrisMMU', 'IrisInterrupts', 'IrisISA', 'IrisBaseCPU'],
+tags='arm fastmodel')
+Source('cpu.cc', tags='arm fastmodel')
+Source('interrupts.cc', tags='arm fastmodel')
+Source('isa.cc', tags='arm fastmodel')
+Source('tlb.cc', tags='arm fastmodel')

-Source('thread_context.cc')
+Source('thread_context.cc', tags='arm fastmodel')
diff --git a/src/arch/arm/fastmodel/reset_controller/SConscript  
b/src/arch/arm/fastmodel/reset_controller/SConscript

index b6f7852..8e5de8e 100644
--- a/src/arch/arm/fastmodel/reset_controller/SConscript
+++ b/src/arch/arm/fastmodel/reset_controller/SConscript
@@ -25,10 +25,7 @@

 Import('*')

-if not env['CONF']['USE_ARM_FASTMODEL']:
-Return()
-
 SimObject('FastModelResetControllerExample.py', sim_objects=[
-'FastModelResetControllerExample'])
+'FastModelResetControllerExample'], tags='arm fastmodel')

-Source('example.cc')
+Source('example.cc', tags='arm fastmodel')

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/58356
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: If6ee61bb8c23606859e60323b8ca2c5254dbdecc
Gerrit-Change-Number: 58356
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black 
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: Get rid of an unused fast model variable.

2022-03-30 Thread Gabe Black (Gerrit) via gem5-dev
Gabe Black has uploaded this change for review. (  
https://gem5-review.googlesource.com/c/public/gem5/+/58351 )



Change subject: scons: Get rid of an unused fast model variable.
..

scons: Get rid of an unused fast model variable.

This held the location of the license file, assuming it actually was a
license file and not a license server URL. If this variable was unset
because the fast model configuration parameters hadn't been set, then
the "File" would resolve to the local directory, and SCons would get
upset that you'd called the same path a directory and a file.

We can avoid this problem by just getting rid of this variable, since
it isn't used anyway.

Change-Id: I2ccda90b85f2c83c73816967d145e6bf45733f89
---
M src/arch/arm/fastmodel/SConscript
1 file changed, 18 insertions(+), 2 deletions(-)



diff --git a/src/arch/arm/fastmodel/SConscript  
b/src/arch/arm/fastmodel/SConscript

index cbb2c15..a7f6e17 100644
--- a/src/arch/arm/fastmodel/SConscript
+++ b/src/arch/arm/fastmodel/SConscript
@@ -74,8 +74,6 @@

 pvlib_home = Dir(pvlib_home)
 maxcore_home = Dir(maxcore_home)
-armlmd_license_file = File(armlmd_license_file)
-

 pvlib_flavor = env['CONF']['PVLIB_FLAVOR']
 pvlib_lib_dir = pvlib_home.Dir('lib').Dir(pvlib_flavor)

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/58351
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: I2ccda90b85f2c83c73816967d145e6bf45733f89
Gerrit-Change-Number: 58351
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black 
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: Tone down a fast model error into a warning.

2022-03-30 Thread Gabe Black (Gerrit) via gem5-dev
Gabe Black has uploaded this change for review. (  
https://gem5-review.googlesource.com/c/public/gem5/+/58352 )



Change subject: scons: Tone down a fast model error into a warning.
..

scons: Tone down a fast model error into a warning.

If a fast model static library can't be found, we should treat that as
a warning instead of an error, and pass back the original library name
so that it can at least be added and potentially come from somewhere
else.

In practice, this is important because gem5 will be configured by SCons
indirectly in the future, using kconfig based tools that SCons runs on
the user's behalf. If SCons is misconfigured or not configured, this
error can trip, preventing those tools from starting. That creates a
catch 22, since you'd need SCons to fix the config, and SCons can't
run because of the config.

We can avoid that problem by making SCons more lenient, so that it can
still run even if it doesn't find static libraries where it might have
expected to.

Change-Id: Iadfd823b61fe96b937c2650250487d290492f265
---
M src/arch/arm/fastmodel/SConscript
1 file changed, 27 insertions(+), 1 deletion(-)



diff --git a/src/arch/arm/fastmodel/SConscript  
b/src/arch/arm/fastmodel/SConscript

index a7f6e17..a8734cd 100644
--- a/src/arch/arm/fastmodel/SConscript
+++ b/src/arch/arm/fastmodel/SConscript
@@ -102,7 +102,8 @@
 full_name = Dir(path).File(static_name).get_abspath()
 if os.path.isfile(full_name):
 return File(full_name)
-error("Failed to find FM static lib: " + name)
+warning("Failed to find FM static lib: " + name)
+return name

 # Adjust the build environment to support building in Fast Models.


--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/58352
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: Iadfd823b61fe96b937c2650250487d290492f265
Gerrit-Change-Number: 58352
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black 
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

  1   2   3   4   5   6   7   8   9   10   >