mirror of
https://github.com/drasko/codezero.git
synced 2026-01-21 07:13:15 +01:00
Removed linux linked list dependency.
This commit is contained in:
@@ -159,7 +159,7 @@ struct mem_cache *mem_cache_init(void *start,
|
||||
area_start = addr_aligned;
|
||||
}
|
||||
|
||||
INIT_LIST_HEAD(&cache->list);
|
||||
link_init(&cache->list);
|
||||
cache->start = area_start;
|
||||
cache->end = area_start + cache_size;
|
||||
cache->total = total;
|
||||
|
||||
@@ -37,8 +37,8 @@ void sem_up(struct mutex *mutex)
|
||||
/* Each producer wakes one consumer in queue. */
|
||||
mutex->sleepers--;
|
||||
BUG_ON(list_empty(&mutex->wq.task_list));
|
||||
list_for_each_entry(wq, &mutex->wq.task_list, task_list) {
|
||||
list_del_init(&wq->task_list);
|
||||
list_foreach_struct(wq, &mutex->wq.task_list, task_list) {
|
||||
list_remove_init(&wq->task_list);
|
||||
spin_unlock(&mutex->slock);
|
||||
sleeper = wq->task;
|
||||
printk("(%d) Waking up consumer (%d)\n", current->tid,
|
||||
@@ -48,8 +48,8 @@ void sem_up(struct mutex *mutex)
|
||||
}
|
||||
} else if (cnt > 0) {
|
||||
DECLARE_WAITQUEUE(wq, current);
|
||||
INIT_LIST_HEAD(&wq.task_list);
|
||||
list_add_tail(&wq.task_list, &mutex->wq.task_list);
|
||||
link_init(&wq.task_list);
|
||||
list_insert_tail(&wq.task_list, &mutex->wq.task_list);
|
||||
mutex->sleepers++;
|
||||
sched_prepare_sleep();
|
||||
printk("(%d) produced, now sleeping...\n", current->tid);
|
||||
@@ -75,8 +75,8 @@ void sem_down(struct mutex *mutex)
|
||||
/* Each consumer wakes one producer in queue. */
|
||||
mutex->sleepers--;
|
||||
BUG_ON(list_empty(&mutex->wq.task_list));
|
||||
list_for_each_entry(wq, &mutex->wq.task_list, task_list) {
|
||||
list_del_init(&wq->task_list);
|
||||
list_foreach_struct(wq, &mutex->wq.task_list, task_list) {
|
||||
list_remove_init(&wq->task_list);
|
||||
spin_unlock(&mutex->slock);
|
||||
sleeper = wq->task;
|
||||
printk("(%d) Waking up producer (%d)\n", current->tid,
|
||||
@@ -86,8 +86,8 @@ void sem_down(struct mutex *mutex)
|
||||
}
|
||||
} else if (cnt < 0) {
|
||||
DECLARE_WAITQUEUE(wq, current);
|
||||
INIT_LIST_HEAD(&wq.task_list);
|
||||
list_add_tail(&wq.task_list, &mutex->wq.task_list);
|
||||
link_init(&wq.task_list);
|
||||
list_insert_tail(&wq.task_list, &mutex->wq.task_list);
|
||||
mutex->sleepers++;
|
||||
sched_prepare_sleep();
|
||||
printk("(%d) Waiting to consume, now sleeping...\n", current->tid);
|
||||
@@ -122,7 +122,7 @@ int mutex_lock(struct mutex *mutex)
|
||||
if (!__mutex_lock(&mutex->lock)) { /* Could not lock, sleep. */
|
||||
CREATE_WAITQUEUE_ON_STACK(wq, current);
|
||||
task_set_wqh(current, &mutex->wqh, &wq);
|
||||
list_add_tail(&wq.task_list, &mutex->wqh.task_list);
|
||||
list_insert_tail(&wq.task_list, &mutex->wqh.task_list);
|
||||
mutex->wqh.sleepers++;
|
||||
sched_prepare_sleep();
|
||||
spin_unlock(&mutex->wqh.slock);
|
||||
@@ -151,14 +151,14 @@ void mutex_unlock(struct mutex *mutex)
|
||||
BUG_ON(current->nlocks < 0);
|
||||
BUG_ON(mutex->wqh.sleepers < 0);
|
||||
if (mutex->wqh.sleepers > 0) {
|
||||
struct waitqueue *wq = list_entry(mutex->wqh.task_list.next,
|
||||
struct waitqueue *wq = link_to_struct(mutex->wqh.task_list.next,
|
||||
struct waitqueue,
|
||||
task_list);
|
||||
struct ktcb *sleeper = wq->task;
|
||||
|
||||
task_unset_wqh(sleeper);
|
||||
BUG_ON(list_empty(&mutex->wqh.task_list));
|
||||
list_del_init(&wq->task_list);
|
||||
list_remove_init(&wq->task_list);
|
||||
mutex->wqh.sleepers--;
|
||||
spin_unlock(&mutex->wqh.slock);
|
||||
|
||||
|
||||
@@ -62,7 +62,7 @@ int wait_on_prepare(struct waitqueue_head *wqh, struct waitqueue *wq)
|
||||
{
|
||||
spin_lock(&wqh->slock);
|
||||
wqh->sleepers++;
|
||||
list_add_tail(&wq->task_list, &wqh->task_list);
|
||||
list_insert_tail(&wq->task_list, &wqh->task_list);
|
||||
task_set_wqh(current, wqh, wq);
|
||||
sched_prepare_sleep();
|
||||
//printk("(%d) waiting on wqh at: 0x%p\n",
|
||||
@@ -78,7 +78,7 @@ int wait_on(struct waitqueue_head *wqh)
|
||||
CREATE_WAITQUEUE_ON_STACK(wq, current);
|
||||
spin_lock(&wqh->slock);
|
||||
wqh->sleepers++;
|
||||
list_add_tail(&wq.task_list, &wqh->task_list);
|
||||
list_insert_tail(&wq.task_list, &wqh->task_list);
|
||||
task_set_wqh(current, wqh, &wq);
|
||||
sched_prepare_sleep();
|
||||
//printk("(%d) waiting on wqh at: 0x%p\n",
|
||||
@@ -101,13 +101,13 @@ void wake_up_all(struct waitqueue_head *wqh, unsigned int flags)
|
||||
BUG_ON(wqh->sleepers < 0);
|
||||
spin_lock(&wqh->slock);
|
||||
while (wqh->sleepers > 0) {
|
||||
struct waitqueue *wq = list_entry(wqh->task_list.next,
|
||||
struct waitqueue *wq = link_to_struct(wqh->task_list.next,
|
||||
struct waitqueue,
|
||||
task_list);
|
||||
struct ktcb *sleeper = wq->task;
|
||||
task_unset_wqh(sleeper);
|
||||
BUG_ON(list_empty(&wqh->task_list));
|
||||
list_del_init(&wq->task_list);
|
||||
list_remove_init(&wq->task_list);
|
||||
wqh->sleepers--;
|
||||
if (flags & WAKEUP_INTERRUPT)
|
||||
sleeper->flags |= TASK_INTERRUPTED;
|
||||
@@ -128,12 +128,12 @@ void wake_up(struct waitqueue_head *wqh, unsigned int flags)
|
||||
BUG_ON(wqh->sleepers < 0);
|
||||
spin_lock(&wqh->slock);
|
||||
if (wqh->sleepers > 0) {
|
||||
struct waitqueue *wq = list_entry(wqh->task_list.next,
|
||||
struct waitqueue *wq = link_to_struct(wqh->task_list.next,
|
||||
struct waitqueue,
|
||||
task_list);
|
||||
struct ktcb *sleeper = wq->task;
|
||||
BUG_ON(list_empty(&wqh->task_list));
|
||||
list_del_init(&wq->task_list);
|
||||
list_remove_init(&wq->task_list);
|
||||
wqh->sleepers--;
|
||||
task_unset_wqh(sleeper);
|
||||
if (flags & WAKEUP_INTERRUPT)
|
||||
@@ -193,7 +193,7 @@ int wake_up_task(struct ktcb *task, unsigned int flags)
|
||||
}
|
||||
|
||||
/* Now we can remove the task from its waitqueue */
|
||||
list_del_init(&wq->task_list);
|
||||
list_remove_init(&wq->task_list);
|
||||
wqh->sleepers--;
|
||||
task->waiting_on = 0;
|
||||
task->wq = 0;
|
||||
|
||||
Reference in New Issue
Block a user