From bb7bfcbe83cf76dd3f3e0a20b29b60c5934e6104 Mon Sep 17 00:00:00 2001 From: Oliver Brunner Date: Fri, 25 Oct 2013 10:04:32 +0200 Subject: [PATCH] adapted to new ResetSpin parameter --- AROS/rom/exec/prepareexecbase.c | 4 ++-- AROS/rom/exec/wait.c | 12 +++++++++--- AROS/rom/kernel/scheduling.c | 2 +- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/AROS/rom/exec/prepareexecbase.c b/AROS/rom/exec/prepareexecbase.c index 41f54c8..fb98faf 100644 --- a/AROS/rom/exec/prepareexecbase.c +++ b/AROS/rom/exec/prepareexecbase.c @@ -262,8 +262,8 @@ struct ExecBase *PrepareExecBase(struct MemHeader *mh, struct TagItem *msg) InitSemaphore(&PrivExecBase(SysBase)->LowMemSem); /* No need to initialize those locks. Just a reminder, if it becomes necessary in the future */ - ResetSpin(&PrivExecBase(SysBase)->semaphore_spinlock); - ResetSpin(&PrivExecBase(SysBase)->LibList_spinlock); + //ResetSpin(&PrivExecBase(SysBase)->semaphore_spinlock, 1); + //ResetSpin(&PrivExecBase(SysBase)->LibList_spinlock, 1); SysBase->SoftVer = VERSION_NUMBER; SysBase->Quantum = 4; diff --git a/AROS/rom/exec/wait.c b/AROS/rom/exec/wait.c index b94820e..219839a 100644 --- a/AROS/rom/exec/wait.c +++ b/AROS/rom/exec/wait.c @@ -82,9 +82,10 @@ me->tc_State=TS_WAIT; Enqueue(&SysBase->TaskWait,&me->tc_Node); - spincount=ResetSpin(&(PrivExecBase(SysBase)->LibList_spinlock)); + /* temporarly release all our spinlocks */ + spincount=ResetSpin(&(PrivExecBase(SysBase)->LibList_spinlock), 0); if(spincount) - D(bug("[Exec] Wait() released %d spinlocks\n", spincount)); + D(bug("[Exec] Wait() task %p released %d %p spinlocks\n", FindTask(NULL), spincount, &(PrivExecBase(SysBase)->LibList_spinlock))); /* And switch to the next ready task. */ KrnSwitch(); @@ -101,13 +102,18 @@ /* And clear them. */ me->tc_SigRecvd&=~signalSet; + if(spincount) + D(bug("[Exec] Wait() needs back spinlock %p %d times for task %p.\n", &(PrivExecBase(SysBase)->LibList_spinlock), spincount), FindTask(NULL)); /* All done. */ Enable(); + /* get our locks back ! */ - while(spincount--) + while(spincount) { LockSpin(&(PrivExecBase(SysBase)->LibList_spinlock)); + D(bug("[Exec] Wait() aquired back spinlock %p number %d\n", &(PrivExecBase(SysBase)->LibList_spinlock), spincount, FindTask(NULL))); + spincount--; } return rcvd; diff --git a/AROS/rom/kernel/scheduling.c b/AROS/rom/kernel/scheduling.c index 1d5e484..b08d629 100644 --- a/AROS/rom/kernel/scheduling.c +++ b/AROS/rom/kernel/scheduling.c @@ -65,7 +65,7 @@ D(bug("[SCHEDULE] force TDNestCnt to %d\n", trigger)); if(trigger==-1) { - ResetSpin(&(PrivExecBase(SysBase)->LibList_spinlock)); + ResetSpin(&(PrivExecBase(SysBase)->LibList_spinlock), 1); } else { -- 2.1.4