diff --git a/common/kernel/CMakeLists.txt b/common/kernel/CMakeLists.txt index 3341d10a..1f8d53c2 100644 --- a/common/kernel/CMakeLists.txt +++ b/common/kernel/CMakeLists.txt @@ -47,7 +47,6 @@ target_sources(nextpnr_kernel PUBLIC pywrappers.h relptr.h report.cc - scope_lock.h sdc.cc sdf.cc sso_array.h diff --git a/common/kernel/scope_lock.h b/common/kernel/scope_lock.h deleted file mode 100644 index 2f0f767c..00000000 --- a/common/kernel/scope_lock.h +++ /dev/null @@ -1,67 +0,0 @@ -/* - * nextpnr -- Next Generation Place and Route - * - * Copyright (C) 2021 Symbiflow Authors. - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - */ - -#ifndef SCOPE_LOCK_H -#define SCOPE_LOCK_H - -#include - -#include "nextpnr_namespaces.h" - -NEXTPNR_NAMESPACE_BEGIN - -// Provides a simple RAII locking object. ScopeLock takes a lock when -// constructed, and releases the lock on destruction or if "unlock_early" is -// called. -// -// LockingObject must have a method "void lock(void)" and "void unlock(void)". -template class ScopeLock -{ - public: - ScopeLock(LockingObject *obj) : obj_(obj), locked_(false) - { - obj_->lock(); - locked_ = true; - } - ScopeLock(const ScopeLock &other) = delete; - ScopeLock(const ScopeLock &&other) = delete; - - ~ScopeLock() - { - if (locked_) { - obj_->unlock(); - } - } - void unlock_early() - { - if (!locked_) { - throw std::runtime_error("Lock already released?"); - } - locked_ = false; - obj_->unlock(); - } - - private: - LockingObject *obj_; - bool locked_; -}; - -NEXTPNR_NAMESPACE_END - -#endif /* SCOPE_LOCK_H */ diff --git a/common/place/parallel_refine.cc b/common/place/parallel_refine.cc index 24591ce1..8dc360fc 100644 --- a/common/place/parallel_refine.cc +++ b/common/place/parallel_refine.cc @@ -23,7 +23,6 @@ #if !defined(NPNR_DISABLE_THREADS) #include "detail_place_core.h" -#include "scope_lock.h" #include #include @@ -450,7 +449,7 @@ struct ParallelRefine void run() { - ScopeLock lock(ctx); + std::lock_guard lock{*ctx}; auto refine_start = std::chrono::high_resolution_clock::now(); g.tmg.setup_only = true; diff --git a/common/place/placer1.cc b/common/place/placer1.cc index 73ece301..ddd5090c 100644 --- a/common/place/placer1.cc +++ b/common/place/placer1.cc @@ -31,6 +31,7 @@ #include #include #include +#include #include #include #include @@ -42,7 +43,6 @@ #include "fast_bels.h" #include "log.h" #include "place_common.h" -#include "scope_lock.h" #include "timing.h" #include "util.h" @@ -138,7 +138,7 @@ class SAPlacer { log_break(); - ScopeLock lock(ctx); + std::lock_guard lock{*ctx}; size_t placed_cells = 0; std::vector autoplaced; diff --git a/common/place/placer_heap.cc b/common/place/placer_heap.cc index c274b30b..fa71c796 100644 --- a/common/place/placer_heap.cc +++ b/common/place/placer_heap.cc @@ -38,6 +38,7 @@ #include #include #include +#include #include #include #include @@ -48,7 +49,6 @@ #include "parallel_refine.h" #include "place_common.h" #include "placer1.h" -#include "scope_lock.h" #include "timing.h" #include "util.h" @@ -177,7 +177,7 @@ class HeAPPlacer { auto startt = std::chrono::high_resolution_clock::now(); - ScopeLock lock(ctx); + std::lock_guard lock{*ctx}; place_constraints(); build_fast_bels(); alloc_control_sets(); diff --git a/common/place/placer_static.cc b/common/place/placer_static.cc index a26e4e26..66c045b7 100644 --- a/common/place/placer_static.cc +++ b/common/place/placer_static.cc @@ -34,7 +34,6 @@ #include "parallel_refine.h" #include "place_common.h" #include "placer1.h" -#include "scope_lock.h" #include "timing.h" #include "util.h" diff --git a/common/route/router1.cc b/common/route/router1.cc index 510065f6..c1e0925e 100644 --- a/common/route/router1.cc +++ b/common/route/router1.cc @@ -20,10 +20,10 @@ #include #include #include +#include #include "log.h" #include "router1.h" -#include "scope_lock.h" #include "timing.h" namespace { @@ -1163,7 +1163,7 @@ bool router1(Context *ctx, const Router1Cfg &cfg) try { log_break(); log_info("Routing..\n"); - ScopeLock lock(ctx); + std::lock_guard lock{*ctx}; auto rstart = std::chrono::high_resolution_clock::now(); log_info("Setting up routing queue.\n"); diff --git a/common/route/router2.cc b/common/route/router2.cc index 21f2c1fe..e3e553c0 100644 --- a/common/route/router2.cc +++ b/common/route/router2.cc @@ -34,6 +34,7 @@ #include #include #include +#include #include #include @@ -41,7 +42,6 @@ #include "nextpnr.h" #include "nextpnr_assertions.h" #include "router1.h" -#include "scope_lock.h" #include "timing.h" #include "util.h" @@ -1680,7 +1680,7 @@ struct Router2 ThreadContext st; int iter = 1; - ScopeLock lock(ctx); + std::lock_guard lock{*ctx}; for (size_t i = 0; i < nets_by_udata.size(); i++) route_queue.push_back(i);