Nucleus
Barry Per-CPU Scheduler bb0cb77 (3 years, 2 months ago)
diff --git a/object/list.c b/object/list.c
index 6745f28..a4e2f17 100644
--- a/object/list.c
+++ b/object/list.c
@@ -72,7 +72,8 @@ add(ObjectList *list, void *addr)
if (list->type && obj->type != list->type)
return;
- acquire(&list->lock);
+ if (list->mode != LIST_LOCKLESS)
+ acquire(&list->lock);
struct ListEntry *entry, *next;
entry = kmalloc(sizeof(struct ListEntry));
@@ -106,7 +107,8 @@ end:
list->end = entry;
}
- release(&list->lock);
+ if (list->mode != LIST_LOCKLESS)
+ release(&list->lock);
}
/* Remove an Object from a List */
@@ -119,7 +121,8 @@ remove(ObjectList *list, void *addr)
return;
if (list->type && obj->type != list->type)
return;
- acquire(&list->lock);
+ if (list->mode != LIST_LOCKLESS)
+ acquire(&list->lock);
/* Search for object */
struct ListEntry *entry;
@@ -148,7 +151,8 @@ remove(ObjectList *list, void *addr)
put(obj);
list->entries--;
kfree(entry);
- release(&list->lock);
+ if (list->mode != LIST_LOCKLESS)
+ release(&list->lock);
}
/* Pop the first Object in a List */
@@ -157,10 +161,12 @@ pop_from_start(ObjectList *list)
{
if (!list->start)
return NULL;
- acquire(&list->lock);
+ if (list->mode != LIST_LOCKLESS)
+ acquire(&list->lock);
Object *head = get(list->start->obj);
remove(list, head);
- release(&list->lock);
+ if (list->mode != LIST_LOCKLESS)
+ release(&list->lock);
return head;
}
@@ -170,10 +176,12 @@ pop_from_end(ObjectList *list)
{
if (!list->end)
return NULL;
- acquire(&list->lock);
+ if (list->mode != LIST_LOCKLESS)
+ acquire(&list->lock);
Object *tail = get(list->end->obj);
remove(list, tail);
- release(&list->lock);
+ if (list->mode != LIST_LOCKLESS)
+ release(&list->lock);
return tail;
}
@@ -211,11 +219,13 @@ copy_list(ObjectList *list)
{
ObjectList *newlist = create_list(list->type, list->mode,
list->compare);
- acquire(&list->lock);
+ if (list->mode != LIST_LOCKLESS)
+ acquire(&list->lock);
struct ListEntry *entry;
for (entry = list->start; entry; entry = entry->next)
add(newlist, entry->obj);
- release(&list->lock);
+ if (list->mode != LIST_LOCKLESS)
+ release(&list->lock);
return newlist;
}
@@ -223,11 +233,13 @@ copy_list(ObjectList *list)
void
concat_list(ObjectList *src, ObjectList *dest)
{
- acquire(&src->lock);
+ if (src->mode != LIST_LOCKLESS)
+ acquire(&src->lock);
struct ListEntry *entry;
for (entry = src->start; entry; entry = entry->next)
add(dest, entry->obj);
- release(&src->lock);
+ if (src->mode != LIST_LOCKLESS)
+ release(&src->lock);
}
/* Iterate a List */