sim-se: factor out FutexMap::suspend and FutexMap::suspend_bitset
Both methods do basically the same, especially since they don't handle the timeout which is basically the only difference between both modes of the syscall (one uses absolute and the other relative time). Remove the WaiterState::WaiterState(ThreadContext* _tc) constructor, since the only calls were from FutexMap::suspend which does not use them anymore. Instead, set the magic 0xffffffff constant as a parameter to suspend_bitset. Change-Id: I69d86bad31d63604657a3c71cf07e5623f0ea639 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/29776 Reviewed-by: Brandon Potter <Brandon.Potter@amd.com> Maintainer: Brandon Potter <Brandon.Potter@amd.com> Tested-by: kokoro <noreply+kokoro@google.com>
This commit is contained in:
@@ -26,7 +26,6 @@
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <debug/Thread.hh>
|
||||
#include <sim/futex_map.hh>
|
||||
|
||||
FutexKey::FutexKey(uint64_t addr_in, uint64_t tgid_in)
|
||||
@@ -53,9 +52,6 @@ namespace std {
|
||||
WaiterState::WaiterState(ThreadContext* _tc, int _bitmask)
|
||||
: tc(_tc), bitmask(_bitmask) { }
|
||||
|
||||
WaiterState::WaiterState(ThreadContext* _tc)
|
||||
: tc(_tc), bitmask(0xffffffff) { }
|
||||
|
||||
bool
|
||||
WaiterState::checkMask(int wakeup_bitmask) const
|
||||
{
|
||||
@@ -65,18 +61,7 @@ WaiterState::checkMask(int wakeup_bitmask) const
|
||||
void
|
||||
FutexMap::suspend(Addr addr, uint64_t tgid, ThreadContext *tc)
|
||||
{
|
||||
FutexKey key(addr, tgid);
|
||||
auto it = find(key);
|
||||
|
||||
if (it == end()) {
|
||||
WaiterList waiterList {WaiterState(tc)};
|
||||
insert({key, waiterList});
|
||||
} else {
|
||||
it->second.push_back(WaiterState(tc));
|
||||
}
|
||||
|
||||
/** Suspend the thread context */
|
||||
tc->suspend();
|
||||
suspend_bitset(addr, tgid, tc, 0xffffffff);
|
||||
}
|
||||
|
||||
int
|
||||
|
||||
@@ -74,11 +74,6 @@ class WaiterState {
|
||||
*/
|
||||
WaiterState(ThreadContext* _tc, int _bitmask);
|
||||
|
||||
/**
|
||||
* if bitset is not defined, just set bitmask to 0xffffffff
|
||||
*/
|
||||
WaiterState(ThreadContext* _tc);
|
||||
|
||||
/**
|
||||
* return true if the bit-wise AND of the wakeup_bitmask given by
|
||||
* a waking thread and this thread's internal bitmask is non-zero
|
||||
|
||||
Reference in New Issue
Block a user