summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libc/src/__support/RPC/rpc.h18
-rw-r--r--libc/startup/gpu/amdgpu/start.cpp6
-rw-r--r--libc/startup/gpu/nvptx/start.cpp6
-rw-r--r--libc/utils/gpu/loader/Server.h3
-rw-r--r--libc/utils/gpu/loader/amdgpu/Loader.cpp3
-rw-r--r--libc/utils/gpu/loader/nvptx/Loader.cpp3
6 files changed, 15 insertions, 24 deletions
diff --git a/libc/src/__support/RPC/rpc.h b/libc/src/__support/RPC/rpc.h
index ae905bccbc65..d448e190214f 100644
--- a/libc/src/__support/RPC/rpc.h
+++ b/libc/src/__support/RPC/rpc.h
@@ -106,20 +106,20 @@ template <bool InvertInbox> struct Process {
uint64_t port_count;
uint32_t lane_size;
- cpp::Atomic<uint32_t> *lock;
cpp::Atomic<uint32_t> *inbox;
cpp::Atomic<uint32_t> *outbox;
Packet *packet;
+ cpp::Atomic<uint32_t> lock[default_port_count] = {0};
+
/// Initialize the communication channels.
- LIBC_INLINE void reset(uint64_t port_count, uint32_t lane_size, void *lock,
- void *inbox, void *outbox, void *packet) {
- *this = {port_count,
- lane_size,
- reinterpret_cast<cpp::Atomic<uint32_t> *>(lock),
- reinterpret_cast<cpp::Atomic<uint32_t> *>(inbox),
- reinterpret_cast<cpp::Atomic<uint32_t> *>(outbox),
- reinterpret_cast<Packet *>(packet)};
+ LIBC_INLINE void reset(uint64_t port_count, uint32_t lane_size, void *inbox,
+ void *outbox, void *packet) {
+ this->port_count = port_count;
+ this->lane_size = lane_size;
+ this->inbox = reinterpret_cast<cpp::Atomic<uint32_t> *>(inbox);
+ this->outbox = reinterpret_cast<cpp::Atomic<uint32_t> *>(outbox);
+ this->packet = reinterpret_cast<Packet *>(packet);
}
/// The length of the packet is flexible because the server needs to look up
diff --git a/libc/startup/gpu/amdgpu/start.cpp b/libc/startup/gpu/amdgpu/start.cpp
index 84adb3b97527..9761c64cb318 100644
--- a/libc/startup/gpu/amdgpu/start.cpp
+++ b/libc/startup/gpu/amdgpu/start.cpp
@@ -15,8 +15,6 @@ extern "C" int main(int argc, char **argv, char **envp);
namespace __llvm_libc {
-static cpp::Atomic<uint32_t> lock[rpc::default_port_count] = {0};
-
extern "C" uintptr_t __init_array_start[];
extern "C" uintptr_t __init_array_end[];
extern "C" uintptr_t __fini_array_start[];
@@ -44,8 +42,8 @@ _begin(int argc, char **argv, char **env, void *in, void *out, void *buffer) {
// We need to set up the RPC client first in case any of the constructors
// require it.
__llvm_libc::rpc::client.reset(__llvm_libc::rpc::default_port_count,
- __llvm_libc::gpu::get_lane_size(),
- &__llvm_libc::lock, in, out, buffer);
+ __llvm_libc::gpu::get_lane_size(), in, out,
+ buffer);
// We want the fini array callbacks to be run after other atexit
// callbacks are run. So, we register them before running the init
diff --git a/libc/startup/gpu/nvptx/start.cpp b/libc/startup/gpu/nvptx/start.cpp
index 1d366dc829df..78cdc64ed967 100644
--- a/libc/startup/gpu/nvptx/start.cpp
+++ b/libc/startup/gpu/nvptx/start.cpp
@@ -15,8 +15,6 @@ extern "C" int main(int argc, char **argv, char **envp);
namespace __llvm_libc {
-static cpp::Atomic<uint32_t> lock[rpc::default_port_count] = {0};
-
extern "C" {
// Nvidia's 'nvlink' linker does not provide these symbols. We instead need
// to manually create them and update the globals in the loader implememtation.
@@ -48,8 +46,8 @@ _begin(int argc, char **argv, char **env, void *in, void *out, void *buffer) {
// We need to set up the RPC client first in case any of the constructors
// require it.
__llvm_libc::rpc::client.reset(__llvm_libc::rpc::default_port_count,
- __llvm_libc::gpu::get_lane_size(),
- &__llvm_libc::lock, in, out, buffer);
+ __llvm_libc::gpu::get_lane_size(), in, out,
+ buffer);
// We want the fini array callbacks to be run after other atexit
// callbacks are run. So, we register them before running the init
diff --git a/libc/utils/gpu/loader/Server.h b/libc/utils/gpu/loader/Server.h
index f77bf256618a..89ef712e8596 100644
--- a/libc/utils/gpu/loader/Server.h
+++ b/libc/utils/gpu/loader/Server.h
@@ -19,9 +19,6 @@
static __llvm_libc::rpc::Server server;
-static __llvm_libc::cpp::Atomic<uint32_t>
- lock[__llvm_libc::rpc::default_port_count] = {0};
-
/// Queries the RPC client at least once and performs server-side work if there
/// are any active requests.
void handle_server() {
diff --git a/libc/utils/gpu/loader/amdgpu/Loader.cpp b/libc/utils/gpu/loader/amdgpu/Loader.cpp
index 07fa1ae7fe16..ad5e02116918 100644
--- a/libc/utils/gpu/loader/amdgpu/Loader.cpp
+++ b/libc/utils/gpu/loader/amdgpu/Loader.cpp
@@ -359,8 +359,7 @@ int load(int argc, char **argv, char **envp, void *image, size_t size,
hsa_amd_agents_allow_access(1, &dev_agent, nullptr, buffer);
// Initialize the RPC server's buffer for host-device communication.
- server.reset(port_size, wavefront_size, &lock, server_inbox, server_outbox,
- buffer);
+ server.reset(port_size, wavefront_size, server_inbox, server_outbox, buffer);
// Obtain a queue with the minimum (power of two) size, used to send commands
// to the HSA runtime and launch execution on the device.
diff --git a/libc/utils/gpu/loader/nvptx/Loader.cpp b/libc/utils/gpu/loader/nvptx/Loader.cpp
index 314f5a8055fb..2230f55ea24e 100644
--- a/libc/utils/gpu/loader/nvptx/Loader.cpp
+++ b/libc/utils/gpu/loader/nvptx/Loader.cpp
@@ -260,8 +260,7 @@ int load(int argc, char **argv, char **envp, void *image, size_t size,
handle_error("Failed to allocate memory the RPC client / server.");
// Initialize the RPC server's buffer for host-device communication.
- server.reset(port_size, warp_size, &lock, server_inbox, server_outbox,
- buffer);
+ server.reset(port_size, warp_size, server_inbox, server_outbox, buffer);
LaunchParameters single_threaded_params = {1, 1, 1, 1, 1, 1};
// Call the kernel to