gem5  v22.1.0.0
Public Member Functions | Private Attributes | List of all members
gem5::FutexMap Class Reference

FutexMap class holds a map of all futexes used in the system. More...

#include <futex_map.hh>

Inheritance diagram for gem5::FutexMap:

Public Member Functions

void suspend (Addr addr, uint64_t tgid, ThreadContext *tc)
 Inserts a futex into the map with one waiting TC. More...
 
int wakeup (Addr addr, uint64_t tgid, int count)
 Wakes up at most count waiting threads on a futex. More...
 
void suspend_bitset (Addr addr, uint64_t tgid, ThreadContext *tc, int bitmask)
 
int wakeup_bitset (Addr addr, uint64_t tgid, int bitmask)
 
int requeue (Addr addr1, uint64_t tgid, int count, int count2, Addr addr2)
 This operation wakes a given number (val) of waiters. More...
 
bool is_waiting (ThreadContext *tc)
 Determine if the given thread context is currently waiting on a futex wait operation on any of the futexes tracked by this FutexMap. More...
 

Private Attributes

std::unordered_set< ThreadContext * > waitingTcs
 

Detailed Description

FutexMap class holds a map of all futexes used in the system.

Definition at line 109 of file futex_map.hh.

Member Function Documentation

◆ is_waiting()

bool gem5::FutexMap::is_waiting ( ThreadContext tc)

Determine if the given thread context is currently waiting on a futex wait operation on any of the futexes tracked by this FutexMap.

Definition at line 185 of file futex_map.cc.

References waitingTcs.

Referenced by gem5::BaseCPU::postInterrupt().

◆ requeue()

int gem5::FutexMap::requeue ( Addr  addr1,
uint64_t  tgid,
int  count,
int  count2,
Addr  addr2 
)

This operation wakes a given number (val) of waiters.

If there are more threads waiting than woken, they are removed from the wait queue of the futex pointed to by addr1 and added to the wait queue of the futex pointed to by addr2. The number of waiter moved is capped by count2 (misused timeout parameter).

The return value is the number of waiters that are woken or requeued.

Definition at line 141 of file futex_map.cc.

References gem5::X86ISA::count, gem5::ArmISA::it1, gem5::ArmISA::it2, and gem5::VegaISA::w.

Referenced by gem5::futexFunc().

◆ suspend()

void gem5::FutexMap::suspend ( Addr  addr,
uint64_t  tgid,
ThreadContext tc 
)

Inserts a futex into the map with one waiting TC.

Definition at line 53 of file futex_map.cc.

References gem5::X86ISA::addr, and suspend_bitset().

Referenced by gem5::futexFunc().

◆ suspend_bitset()

void gem5::FutexMap::suspend_bitset ( Addr  addr,
uint64_t  tgid,
ThreadContext tc,
int  bitmask 
)

Suspend the thread context

Definition at line 89 of file futex_map.cc.

References gem5::X86ISA::addr, gem5::ThreadContext::suspend(), and waitingTcs.

Referenced by gem5::futexFunc(), and suspend().

◆ wakeup()

int gem5::FutexMap::wakeup ( Addr  addr,
uint64_t  tgid,
int  count 
)

Wakes up at most count waiting threads on a futex.

Definition at line 59 of file futex_map.cc.

References gem5::X86ISA::addr, gem5::X86ISA::count, and waitingTcs.

Referenced by gem5::exitFutexWake(), and gem5::futexFunc().

◆ wakeup_bitset()

int gem5::FutexMap::wakeup_bitset ( Addr  addr,
uint64_t  tgid,
int  bitmask 
)

Member Data Documentation

◆ waitingTcs

std::unordered_set<ThreadContext *> gem5::FutexMap::waitingTcs
private

Definition at line 143 of file futex_map.hh.

Referenced by is_waiting(), suspend_bitset(), wakeup(), and wakeup_bitset().


The documentation for this class was generated from the following files:

Generated on Wed Dec 21 2022 10:23:29 for gem5 by doxygen 1.9.1