diff options
| author | Patrick Williams <iawillia@us.ibm.com> | 2012-06-14 16:24:56 -0500 |
|---|---|---|
| committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2012-06-18 16:25:59 -0500 |
| commit | e14f34f3648159c2fd5d62900ee5568ca2b78af3 (patch) | |
| tree | 7efc0c551ee63363136f9cd8bc1e314807c499ca /src/kernel/syscall.C | |
| parent | 0cf879912d04e5c81ec49502fa792c70f6c3f7d3 (diff) | |
| download | talos-hostboot-e14f34f3648159c2fd5d62900ee5568ca2b78af3.tar.gz talos-hostboot-e14f34f3648159c2fd5d62900ee5568ca2b78af3.zip | |
Fix task deadlock in VMM flush operation.
Change-Id: I6f5f44009f8b6e76ac660977c567b35400980b22
Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/1204
Tested-by: Jenkins Server
Reviewed-by: Douglas R. Gilbert <dgilbert@us.ibm.com>
Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/kernel/syscall.C')
| -rw-r--r-- | src/kernel/syscall.C | 56 |
1 files changed, 31 insertions, 25 deletions
diff --git a/src/kernel/syscall.C b/src/kernel/syscall.C index cfcbed860..dd3d10949 100644 --- a/src/kernel/syscall.C +++ b/src/kernel/syscall.C @@ -1,25 +1,26 @@ -// IBM_PROLOG_BEGIN_TAG -// This is an automatically generated prolog. -// -// $Source: src/kernel/syscall.C $ -// -// IBM CONFIDENTIAL -// -// COPYRIGHT International Business Machines Corp. 2010 - 2011 -// -// p1 -// -// Object Code Only (OCO) source materials -// Licensed Internal Code Source Materials -// IBM HostBoot Licensed Internal Code -// -// The source code for this program is not published or other- -// wise divested of its trade secrets, irrespective of what has -// been deposited with the U.S. Copyright Office. -// -// Origin: 30 -// -// IBM_PROLOG_END +/* IBM_PROLOG_BEGIN_TAG + * This is an automatically generated prolog. + * + * $Source: src/kernel/syscall.C $ + * + * IBM CONFIDENTIAL + * + * COPYRIGHT International Business Machines Corp. 2010-2012 + * + * p1 + * + * Object Code Only (OCO) source materials + * Licensed Internal Code Source Materials + * IBM HostBoot Licensed Internal Code + * + * The source code for this program is not published or other- + * wise divested of its trade secrets, irrespective of what has + * been deposited with the U.S. Copyright Office. + * + * Origin: 30 + * + * IBM_PROLOG_END_TAG + */ #include <assert.h> #include <errno.h> #include <kernel/cpu.H> @@ -48,7 +49,8 @@ void kernel_execute_decrementer() cpu_t* c = CpuManager::getCurrentCPU(); Scheduler* s = c->scheduler; TimeManager::checkReleaseTasks(s); - s->returnRunnable(); + + task_t* current_task = TaskManager::getCurrentTask(); CpuManager::executePeriodics(c);//TODO is there still a potential deadlock? @@ -63,8 +65,12 @@ void kernel_execute_decrementer() #endif KernelMisc::shutdown(); } - CpuManager::executePeriodics(c); - s->setNextRunnable(); + + if (current_task == TaskManager::getCurrentTask()) + { + s->returnRunnable(); + s->setNextRunnable(); + } } namespace Systemcalls |

