7 class Fpu_alloc : public Fpu
13 #include "fpu_state.h"
14 #include "kmem_slab.h"
15 #include "ram_quota.h"
16 #include "slab_cache_anon.h"
18 static Kmem_slab _fpu_state_allocator(Fpu::state_size() + sizeof(Ram_quota*),
19 Fpu::state_align(), "Fpu state");
23 Fpu_alloc::slab_alloc()
25 return &_fpu_state_allocator;
30 Fpu_alloc::alloc_state(Ram_quota *q, Fpu_state *s)
32 unsigned long sz = Fpu::state_size();
34 if (!(b = slab_alloc()->q_alloc(q)))
37 *((Ram_quota **)((char*)b + sz)) = q;
46 Fpu_alloc::free_state(Fpu_state *s)
50 unsigned long sz = Fpu::state_size();
51 Ram_quota *q = *((Ram_quota **)((char*)(s->_state_buffer) + sz));
52 slab_alloc()->q_free (q, s->_state_buffer);
55 // transferred FPU state may leed to quotas w/o a task but only FPU