From b228c2260faba9c2c8b9aca7eea2dee14ee8f9d3 Mon Sep 17 00:00:00 2001 From: Stefan Lankes Date: Thu, 21 Jul 2011 09:58:42 +0200 Subject: [PATCH] reduce the number of per_core calls --- include/metalsvm/spinlock.h | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/include/metalsvm/spinlock.h b/include/metalsvm/spinlock.h index 701762aa..50909bf8 100644 --- a/include/metalsvm/spinlock.h +++ b/include/metalsvm/spinlock.h @@ -81,11 +81,13 @@ inline static int spinlock_destroy(spinlock_t* s) { */ inline static int spinlock_lock(spinlock_t* s) { int32_t ticket; + task_t* curr_task; if (BUILTIN_EXPECT(!s, 0)) return -EINVAL; - if (s->owner == per_core(current_task)->id) { + curr_task = per_core(current_task); + if (s->owner == curr_task->id) { s->counter++; return 0; } @@ -94,7 +96,7 @@ inline static int spinlock_lock(spinlock_t* s) { while(atomic_int32_read(&s->dequeue) != ticket) { NOP1; } - s->owner = per_core(current_task)->id; + s->owner = curr_task->id; s->counter = 1; return 0; @@ -181,7 +183,7 @@ inline static int spinlock_irqsave_lock(spinlock_irqsave_t* s) { s->coreid = CORE_ID; s->flags = flags; s->counter = 1; - + return 0; }