4 #include "mapping_tree.h"
5 #include "obj_helping_lock.h"
10 class U_lock : public Kobject
12 FIASCO_DECLARE_KOBJ();
15 typedef slab_cache_anon Allocator;
19 mutable Obj_helping_lock _l;
30 FIASCO_DEFINE_KOBJ(U_lock);
33 U_lock::U_lock(Ram_quota *q) : _q(q), _cnt(0), lockers(0) {}
36 Obj_helping_lock::Status
49 Lock_guard<Cpu_lock> guard(&cpu_lock);
51 if (_cnt == 0 && Mappable::no_mappings())
64 U_lock::no_mappings() const
66 Lock_guard<Cpu_lock> guard(&cpu_lock);
67 if (Mappable::no_mappings())
79 U_lock::alloc(Ram_quota *q)
82 if (q->alloc(sizeof(U_lock)) && (nq = allocator()->alloc()))
83 return new (nq) U_lock(q);
90 U_lock::operator new (size_t, void *p)
95 U_lock::operator delete (void *_l)
97 U_lock *l = reinterpret_cast<U_lock*>(_l);
99 l->_q->free(sizeof(U_lock));
101 allocator()->free(l);
104 static Kmem_slab_t<U_lock> _ulock_allocator("U_lock");
109 { return &_ulock_allocator; }
113 U_lock::invoke(Syscall_frame *, Utcb *)