X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/8357bda627bdf02c1b69eecf27993182239fb463..a5338b60e111972364a8bc6f07011c6defd213d2:/lunaix-os/kernel/time/timer.c diff --git a/lunaix-os/kernel/time/timer.c b/lunaix-os/kernel/time/timer.c index b9d333b..f479f58 100644 --- a/lunaix-os/kernel/time/timer.c +++ b/lunaix-os/kernel/time/timer.c @@ -13,7 +13,8 @@ #include #include -#include +#include +#include #include #include #include @@ -42,18 +43,20 @@ static volatile uint8_t apic_timer_done = 0; static volatile uint32_t sched_ticks = 0; static volatile uint32_t sched_ticks_counter = 0; +static struct cake_pile* timer_pile; + #define APIC_CALIBRATION_CONST 0x100000 void timer_init_context() { + timer_pile = cake_new_pile("timer", sizeof(struct lx_timer), 1, 0); timer_ctx = - (struct lx_timer_context*)lxmalloc(sizeof(struct lx_timer_context)); + (struct lx_timer_context*)valloc(sizeof(struct lx_timer_context)); assert_msg(timer_ctx, "Fail to initialize timer contex"); - timer_ctx->active_timers = - (struct lx_timer*)lxmalloc(sizeof(struct lx_timer)); + timer_ctx->active_timers = (struct lx_timer*)cake_grab(timer_pile); llist_init_head(timer_ctx->active_timers); } @@ -164,8 +167,7 @@ timer_run_ms(uint32_t millisecond, struct lx_timer* timer_run(ticks_t ticks, void (*callback)(void*), void* payload, uint8_t flags) { - struct lx_timer* timer = - (struct lx_timer*)lxmalloc(sizeof(struct lx_timer)); + struct lx_timer* timer = (struct lx_timer*)cake_grab(timer_pile); if (!timer) return NULL; @@ -199,7 +201,7 @@ timer_update(const isr_param* param) pos->counter = pos->deadline; } else { llist_delete(&pos->link); - lxfree(pos); + cake_release(timer_pile, pos); } }