kernel: Add CPUSet::{Clear, Set}BitAtomic() functions

This commit is contained in:
Pawel Dziepak
2014-01-24 13:59:58 +01:00
parent 03451e4cc1
commit 82bcd89b92
3 changed files with 39 additions and 22 deletions
+20 -1
View File
@@ -50,6 +50,9 @@ public:
inline void SetBit(int32 cpu);
inline void ClearBit(int32 cpu);
inline void SetBitAtomic(int32 cpu);
inline void ClearBitAtomic(int32 cpu);
inline bool GetBit(int32 cpu) const;
inline bool IsEmpty() const;
@@ -118,12 +121,28 @@ inline void
CPUSet::SetBit(int32 cpu)
{
int32* element = (int32*)&fBitmap[cpu % kArraySize];
atomic_or(element, 1u << (cpu / kArraySize));
*element |= 1u << (cpu / kArraySize);
}
inline void
CPUSet::ClearBit(int32 cpu)
{
int32* element = (int32*)&fBitmap[cpu % kArraySize];
*element &= ~uint32(1u << (cpu / kArraySize));
}
inline void
CPUSet::SetBitAtomic(int32 cpu)
{
int32* element = (int32*)&fBitmap[cpu % kArraySize];
atomic_or(element, 1u << (cpu / kArraySize));
}
inline void
CPUSet::ClearBitAtomic(int32 cpu)
{
int32* element = (int32*)&fBitmap[cpu % kArraySize];
atomic_and(element, ~uint32(1u << (cpu / kArraySize)));