]> rtime.felk.cvut.cz Git - l4.git/blob - kernel/fiasco/src/kern/cpu_mask.cpp
238bd26d78c0f6bf5e220cda333b0f46f8540775
[l4.git] / kernel / fiasco / src / kern / cpu_mask.cpp
1 INTERFACE:
2
3 #include "bitmap.h"
4 #include "config.h"
5
6 template<unsigned MAX_NUM_CPUS>
7 class Cpu_mask_t
8 {
9 public:
10   enum { Max_num_cpus = MAX_NUM_CPUS };
11   enum class Init { Bss };
12   Cpu_mask_t(Init) {}
13   Cpu_mask_t() { _b.clear_all(); }
14
15   Cpu_mask_t(Cpu_mask_t const &) = default;
16   Cpu_mask_t &operator = (Cpu_mask_t const &) = default;
17
18   bool empty() const { return _b.is_empty(); }
19   bool get(unsigned cpu) const { return _b[cpu]; }
20   void clear(unsigned cpu) { return _b.clear_bit(cpu); }
21   void set(unsigned cpu) { _b.set_bit(cpu); };
22   void atomic_set(unsigned cpu) {_b.atomic_set_bit(cpu); }
23   void atomic_clear(unsigned cpu) {_b.atomic_clear_bit(cpu); }
24   bool atomic_get_and_clear(unsigned cpu)
25   { return _b.atomic_get_and_clear(cpu); }
26
27 private:
28   Bitmap<Max_num_cpus> _b;
29 };
30
31 typedef Cpu_mask_t<Config::Max_num_cpus> Cpu_mask;