[gem5-dev] [S] Change in gem5/gem5[develop]: base: fatal() if a socket path doesn't fit in sockaddr_un.sun_path.
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 &original, size_t max_len) +void +ListenSocketUnix::checkPathLength(const std::string &original, 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 &addr) const = 0; -std::string truncate(const std::string &original, size_t max_len); +void checkPathLength(const std::string &original, 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.
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 &original, size_t max_len) +void +ListenSocketUnix::checkPathLength(const std::string &original, 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 &addr) const = 0; -std::string truncate(const std::string &original, size_t max_len); +void checkPathLength(const std::string &original, 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.
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 &p) : 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 &p) : 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.
it a/src/base/socket.test.cc b/src/base/socket.test.cc index 7bf9e18..5fd0f3f 100644 --- a/src/base/socket.test.cc +++ b/src/base/socket.test.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.
=1): bytes = [int(x, 16) for x in addr.split(":")] bytes[5] += val diff --git a/src/python/pybind11/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", &loader::setInterpDir); } +static void +init_socket(py::module_ &m_native) +{ +py::module_ m_socket = m_native.def_submodule("socket"); +m_socket +.def("listenSocketEmptyConfig", &listenSocketEmptyConfig) +.def("listenSocketInetConfig", &listenSocketInetConfig) +.def("listenSocketUnixFileConfig", &listenSocketUnixFileConfig) +.def("listenSocketUnixAbstractConfig", +&listenSocketUnixAbstractConfig); + +py::class_(m_socket, "ListenSocketConfig"); +} + void pybind_init_core(py::module_ &m_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.
; inform("%s: accept new connection %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.
dir, std::string fname) +{ +return ListenSocketConfig([dir, fname](const std::string &name) { +return std::make_unique(name, dir, fname); +}); +} + +size_t +ListenSocketUnixAbstract::prepSockaddrUn(sockaddr_un &addr) const +{ +addr.sun_family = AF_UNIX; +addr.sun_path[0] = '\0'; +std::memcpy(&addr.sun_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 &os) const +{ +os << "abstract socket \"" << path << "\""; +} + +ListenSocketConfig +listenSocketUnixAbstractConfig(std::string path) +{ +return ListenSocketConfig([path](const std::string &name) { +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 &addr) const = 0; + +std::string truncate(const std::string &original, 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 &addr) const override; + + public: +ListenSocketUnixFile(const std::string &_name, const std::string &_dir, +const std::string &_fname); +~ListenSocketUnixFile(); + +void listen() override; +void output(std::ostream &os) const override; +}; + +ListenSocketConfig listenSocketUnixFileConfig( +std::string dir, std::string fname); + +class ListenSocketUnixAbstract : public ListenSocketUnix +{ + protected: +std::string path; + +size_t prepSockaddrUn(sockaddr_un &addr) const override; + + public: +ListenSocketUnixAbstract( +const std::string &_name, const std::string &_path); + +void output(std::ostream &os) 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.
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.
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.
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.
ATH_MAX); +if (!cwd) +errx(1, "Failed to allocate %d byte buffer.", PATH_MAX); +if (!getcwd(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 *)&addr; + +// Actually connect to the socket. +if (connect(s, (struct sockaddr *)&addr, 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, &read_fds, NULL, NULL, &timeout); 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.
, 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 +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.
&socket) +{ +socket.output(os); +return os; +} + using ListenSocketPtr = std::unique_ptr; class ListenSocketConfig @@ -155,14 +165,24 @@ static inline ListenSocketConfig listenSocketEmptyConfig() { return {}; } -ListenSocketConfig listenSocketInetConfig(int port); +// AF_INET based sockets. -inline static std::ostream & -operator << (std::ostream &os, const ListenSocket &socket) +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 &os) 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.
message, sizeof(message)); diff --git a/src/dev/serial/terminal.hh b/src/dev/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 &p); 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().
return; } -while (!listener.listen(port)) { -DPRINTF(Terminal, -": 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.
EXPECT_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().
; @@ -185,7 +172,9 @@ */ gtestLogOutput.str(""); 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.
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 *)&sockaddr, &slen); -if (sfd != -1 && nodelay) { -int i = 1; -if (::setsockopt(sfd, IPPROTO_TCP, TCP_NODELAY, (char *)&i, - 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, &i, 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).
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.
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: 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.
amespace { - -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: 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.
ct_len = (char *)sun_path + path_size - (char *)&addr; + +// Actually connect to the socket. +if (connect(s, (struct sockaddr *)&addr, 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.
4e5c951..f342419 100644 --- a/src/base/vnc/vncserver.cc +++ b/src/base/vnc/vncserver.cc @@ -117,7 +117,7 @@ */ VncServer::VncServer(const Params &p) : 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 &p) : 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.
/settings 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.
{ +addr.sun_family = AF_UNIX; +addr.sun_path[0] = '\0'; +std::memcpy(&addr.sun_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 &os) const +{ +os << "abstract socket \"" << path << "\""; +} + +ListenSocketConfig +listenSocketUnixAbstractConfig(std::string path) +{ +return ListenSocketConfig([path](const std::string &name) { +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 &addr) const = 0; + +std::string truncate(const std::string &original, 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 &addr) const; + + public: +ListenSocketUnixFile(const std::string &_name, const std::string &_dir, +const std::string &_fname); +~ListenSocketUnixFile(); + +void listen() override; +void output(std::ostream &os) const override; +}; + +ListenSocketConfig listenSocketUnixFileConfig( +std::string dir, std::string fname); + +class ListenSocketUnixAbstract : public ListenSocketUnix +{ + protected: +std::string path; + +size_t prepSockaddrUn(sockaddr_un &addr) const; + + public: +ListenSocketUnixAbstract( +const std::string &_name, const std::string &_path); + +void output(std::ostream &os) 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.
nd11/core.cc @@ -223,6 +223,20 @@ m.def("setInterpDir", &loader::setInterpDir); } +static void +init_socket(py::module_ &m_native) +{ +py::module_ m_socket = m_native.def_submodule("socket"); +m_socket +.def("listenSocketEmptyConfig", &listenSocketEmptyConfig) +.def("listenSocketInetConfig", &listenSocketInetConfig) +.def("listenSocketUnixFileConfig", &listenSocketUnixFileConfig) +.def("listenSocketUnixAbstractConfig", +&listenSocketUnixAbstractConfig); + +py::class_(m_socket, "ListenSocketConfig"); +} + void pybind_init_core(py::module_ &m_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.
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 *)&sockaddr, &slen); -if (sfd != -1 && nodelay) { -int i = 1; -if (::setsockopt(sfd, IPPROTO_TCP, TCP_NODELAY, (char *)&i, - 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, &i, 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().
"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: 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().
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: 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).
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.
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: 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.
tInet(const std::string &_name, int port); + +int accept() override; +void listen() override; +void output(std::ostream &os) 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: 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.
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 &p) : 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 &req = 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.
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 &p) : 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 &req = 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.
thread_num]->contextId()); +return; +} + 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(&oldCPU->getInstPort()); getDataPort().takeOverFrom(&oldCPU->getDataPort()); + +// Switch over the reset line as well, if necessary. +if (oldCPU->modelResetPort.isConnected()) +modelResetPort.takeOverFrom(&oldCPU->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.
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.
p, p.name.c_str()) {} SCGIC(const SCFastModelGICParams ¶ms, sc_core::sc_module_name _name); +Port &gem5_getPort(const std::string &if_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.
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.
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 ®Classes() 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.
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.
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.
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: 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.
Port()); getDataPort().takeOverFrom(&oldCPU->getDataPort()); + +// Switch over the reset line as well. +modelResetPort.takeOverFrom(&oldCPU->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.
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.
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.
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 ®Classes() 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.
Port.compat(source_role, sink_role) + +class SignalSinkPort(Port): +def __init__(self, desc): +super().__init__(sink_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.
OURCE_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: 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.
il 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: 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.
s://gem5-review.googlesource.com/c/public/gem5/+/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.
BackingType initial_value = reg.get(); + +reg.get() = initial_value + 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 &r) { +reg_ptr = &r; +}); + +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 &r) +{ +reg_ptr = &r; +} +} reset_struct; + +reg.resetter(&reset_struct, &ResetStruct::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.
initial_value = reg.get(); + +reg.get() = initial_value + 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 &r) { +reg_ptr = &r; +}); + +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 &r) +{ +reg_ptr = &r; +} +} reset_struct; + +reg.resetter(&reset_struct, &ResetStruct::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.
virtual void requestReset() = 0; -}; - -template -class ResetResponsePort : public ResetResponsePortBase -{ - public: -ResetResponsePort(const std::string &name, 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 &p) 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.
erial/uart8250.hh +++ b/src/dev/serial/uart8250.hh @@ -113,6 +113,13 @@ void serialize(std::ostream &os) const override {} bool unserialize(const std::string &s) 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.
N_HH__ -#include "sim/port.hh" +#include + +#include "sim/signal.hh" 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 &new_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 &peer) 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 &peer) 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.
M_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: 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.
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 &name) : SignalReceiver(name) @@ -95,7 +95,7 @@ onChange([this](bool status) { for (auto &signal : 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 &new_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.
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 &name) : SignalReceiver(name) @@ -95,7 +95,7 @@ onChange([this](bool status) { for (auto &signal : 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 &new_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.
ool _state = false; +template +IntSinkPinBase(const std::string &_name, PortID _id, Device *dev, +int num) : +SignalSinkPort(_name, _id), _number(num) +{ +onChange([dev, num](const bool &new_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 &peer) 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 &peer) 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.
view.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: 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.
&); }; diff --git a/src/dev/SConscript b/src/dev/SConscript index d991ed5..a7714a2 100644 --- 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 &p) -{ -peer = dynamic_cast(&p); -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 &name, PortID id, Device *dev) : -ResetResponsePortBase(name, id), device(dev) {} -void requestReset() override { device->requestReset(); } - - private: -Device *de
[gem5-dev] [M] Change in gem5/gem5[develop]: dev: Implement a "Signal" port which has a templated State type.
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 &new_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 &state() const { return _state; } +void onChange(OnChangeFunc func) { _onChange = std::move(func); } + +void +bind(Port &peer) override +{ +_source = dynamic_cast *>(&peer); +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 &new_state) +{ +_state = new_state; +sink->set(new_state); +} + +const State &state() const { return _state; } + +void +bind(Port &peer) override +{ +sink = dynamic_cast *>(&peer); +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.
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 &trans, sc_core::sc_time &delay) { +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, &TlmToGem5Bridge::b_transport); -socket.register_get_direct_mem_ptr( -this, &TlmToGem5Bridge::get_direct_mem_ptr); } else { panic("gem5 operates neither in Timing nor in Atomic mode"); } +socket.register_get_direct_mem_ptr( +this, &TlmToGem5Bridge::get_direct_mem_ptr); socket.register_transport_dbg( this, &TlmToGem5Bridge::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.
s to be %#x, is %#x.", +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.
rn _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: 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.
oorReq(const MemBackdoorReq &req, +MemBackdoorPtr &backdoor) +{ +// Create a transaction to send along to TLM's get_direct_mem_ptr. +tlm::tlm_generic_payload *trans = mm.allocate(); +trans->acquire(); +trans->set_address(req.range().start()); +trans->set_data_length(req.range().size()); +trans->set_streaming_width(req.range().size()); +trans->set_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 &trans, tlm::tlm_phase &phase, sc_core::sc_time &delay) 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 &req, +gem5::MemBackdoorPtr &backdoor) override +{ +bridge.recvMemBackdoorReq(req, backdoor); +} bool recvTimingReq(gem5::PacketPtr pkt) override { @@ -179,6 +186,8 @@ gem5::Tick recvAtomicBackdoor(gem5::PacketPtr pkt, gem5::MemBackdoorPtr &backdoor); void recvFunctional(gem5::PacketPtr packet); +void recvMemBackdoorReq(const gem5::MemBackdoorReq &req, +gem5::MemBackdoorPtr &backdoor); 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 &trans, tlm::tlm_dmi &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.
M5_PROTOCOL_FUNCTIONAL_HH__ #define __MEM_GEM5_PROTOCOL_FUNCTIONAL_HH__ +#include "mem/backdoor.hh" #include "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 &req, MemBackdoorPtr &backdoor); }; 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 &req, +MemBackdoorPtr &backdoor) = 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.
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 &range() 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.
rtual 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 &req, MemBackdoorPtr &backdoor); }; 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 &req, +MemBackdoorPtr &backdoor) = 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.
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 &range() 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.
eaming_width(req.range().size()); +trans->set_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 &trans, tlm::tlm_phase &phase, sc_core::sc_time &delay) 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 &req, +gem5::MemBackdoorPtr &backdoor) override +{ +bridge.recvMemBackdoorReq(req, backdoor); +} bool recvTimingReq(gem5::PacketPtr pkt) override { @@ -179,6 +186,8 @@ gem5::Tick recvAtomicBackdoor(gem5::PacketPtr pkt, gem5::MemBackdoorPtr &backdoor); void recvFunctional(gem5::PacketPtr packet); +void recvMemBackdoorReq(const gem5::MemBackdoorReq &req, +gem5::MemBackdoorPtr &backdoor); 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 &trans, tlm::tlm_dmi &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.
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, &TlmToGem5Bridge::b_transport); -socket.register_get_direct_mem_ptr( -this, &TlmToGem5Bridge::get_direct_mem_ptr); } else { panic("gem5 operates neither in Timing nor in Atomic mode"); } +socket.register_get_direct_mem_ptr( +this, &TlmToGem5Bridge::get_direct_mem_ptr); socket.register_transport_dbg( this, &TlmToGem5Bridge::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.
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.
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.
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.
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.
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.
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.
self.parser.namespace}::VecPredRegContainer ' \ f'\t\ttmp_s{op_idx}; ' \ f'xc->getRegOperand(this, {op_idx}, &tmp_s{op_idx});\n' @@ -459,8 +417,6 @@ return c_read def makeReadW(self, pred_write, op_idx): -assert(self.read_code == None) - c_readw = f'\t\tauto &tmp_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.
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.
gh a tool, or to apply a configuration to the gem5 build, all the values +in 'CONF' are temporarily 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.
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.
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.
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.
lly 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: 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.
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.
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.
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.
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.
protocol_dir.File('SignalInterruptProtocol.lisa') ).prepare_env(env) -SimObject('FastModelPL330.py', sim_objects=['FastModelPL330']) -Source('pl330.cc') +SimObject('FastModelPL330.py', sim_objects=['FastModelPL330'], +tags='arm fastmodel') +Source('pl330.cc', tags='arm fastmodel') diff --git a/src/arch/arm/fastmodel/SConscript b/src/arch/arm/fastmodel/SConscript index cded3cd..bfe7e97 100644 --- a/src/arch/arm/fastmodel/SConscript +++ b/src/arch/arm/fastmodel/SConscript @@ -48,13 +48,11 @@ import os.path if env['CONF']['USE_ARM_FASTMODEL']: -if not env['CONF']['USE_SYSTEMC']: +if env['CONF']['USE_SYSTEMC']: +env.TagImplies('arm fastmodel', 'arm isa') +else: 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.
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.
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.
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.
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.
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.
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.
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.
tmodel') diff --git a/src/arch/arm/fastmodel/SConscript b/src/arch/arm/fastmodel/SConscript index b176dbf..7f04e12 100644 --- a/src/arch/arm/fastmodel/SConscript +++ b/src/arch/arm/fastmodel/SConscript @@ -48,13 +48,11 @@ import os.path if env['CONF']['USE_ARM_FASTMODEL']: -if not env['CONF']['USE_SYSTEMC']: +if env['CONF']['USE_SYSTEMC']: +env.TagImplies('arm fastmodel', 'arm isa') +else: 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): @@ -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.
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.
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