You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by xi...@apache.org on 2021/12/28 17:32:23 UTC
[incubator-nuttx] branch master updated: arch/risc-v: Move riscv_blocktask.c to common
This is an automated email from the ASF dual-hosted git repository.
xiaoxiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git
The following commit(s) were added to refs/heads/master by this push:
new e75321e arch/risc-v: Move riscv_blocktask.c to common
e75321e is described below
commit e75321e61cbfb6489779a190391668187a4f9642
Author: Huang Qi <hu...@xiaomi.com>
AuthorDate: Tue Dec 28 23:27:56 2021 +0800
arch/risc-v: Move riscv_blocktask.c to common
Signed-off-by: Huang Qi <hu...@xiaomi.com>
---
.../src/{rv64gc => common}/riscv_blocktask.c | 2 +-
arch/risc-v/src/rv32im/riscv_blocktask.c | 163 ---------------------
2 files changed, 1 insertion(+), 164 deletions(-)
diff --git a/arch/risc-v/src/rv64gc/riscv_blocktask.c b/arch/risc-v/src/common/riscv_blocktask.c
similarity index 99%
rename from arch/risc-v/src/rv64gc/riscv_blocktask.c
rename to arch/risc-v/src/common/riscv_blocktask.c
index 6e67368..45aa779 100644
--- a/arch/risc-v/src/rv64gc/riscv_blocktask.c
+++ b/arch/risc-v/src/common/riscv_blocktask.c
@@ -1,5 +1,5 @@
/****************************************************************************
- * arch/risc-v/src/rv64gc/riscv_blocktask.c
+ * arch/risc-v/src/common/riscv_blocktask.c
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
diff --git a/arch/risc-v/src/rv32im/riscv_blocktask.c b/arch/risc-v/src/rv32im/riscv_blocktask.c
deleted file mode 100644
index c7d65e7..0000000
--- a/arch/risc-v/src/rv32im/riscv_blocktask.c
+++ /dev/null
@@ -1,163 +0,0 @@
-/****************************************************************************
- * arch/risc-v/src/rv32im/riscv_blocktask.c
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership. The
- * ASF licenses this file to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the
- * License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations
- * under the License.
- *
- ****************************************************************************/
-
-/****************************************************************************
- * Included Files
- ****************************************************************************/
-
-#include <nuttx/config.h>
-
-#include <stdbool.h>
-#include <sched.h>
-#include <syscall.h>
-#include <assert.h>
-#include <debug.h>
-
-#include <nuttx/arch.h>
-#include <nuttx/sched.h>
-
-#include "sched/sched.h"
-#include "group/group.h"
-#include "riscv_internal.h"
-
-/****************************************************************************
- * Public Functions
- ****************************************************************************/
-
-/****************************************************************************
- * Name: up_block_task
- *
- * Description:
- * The currently executing task at the head of the ready to run list must
- * be stopped. Save its context and move it to the inactive list
- * specified by task_state.
- *
- * Input Parameters:
- * tcb: Refers to a task in the ready-to-run list (normally the task at
- * the head of the list). It must be stopped, its context saved and
- * moved into one of the waiting task lists. If it was the task at the
- * head of the ready-to-run list, then a context switch to the new
- * ready to run task must be performed.
- * task_state: Specifies which waiting task list should hold the blocked
- * task TCB.
- *
- ****************************************************************************/
-
-void up_block_task(struct tcb_s *tcb, tstate_t task_state)
-{
- struct tcb_s *rtcb = this_task();
- bool switch_needed;
-
- /* Verify that the context switch can be performed */
-
- DEBUGASSERT((tcb->task_state >= FIRST_READY_TO_RUN_STATE) &&
- (tcb->task_state <= LAST_READY_TO_RUN_STATE));
-
- /* Remove the tcb task from the ready-to-run list. If we are blocking the
- * task at the head of the task list (the most likely case), then a
- * context switch to the next ready-to-run task is needed. In this case,
- * it should also be true that rtcb == tcb.
- */
-
- switch_needed = nxsched_remove_readytorun(tcb);
-
- /* Add the task to the specified blocked task list */
-
- nxsched_add_blocked(tcb, (tstate_t)task_state);
-
- /* If there are any pending tasks, then add them to the ready-to-run
- * task list now
- */
-
- if (g_pendingtasks.head)
- {
- switch_needed |= nxsched_merge_pending();
- }
-
- /* Now, perform the context switch if one is needed */
-
- if (switch_needed)
- {
- /* Update scheduler parameters */
-
- nxsched_suspend_scheduler(rtcb);
-
- /* Are we in an interrupt handler? */
-
- if (g_current_regs)
- {
- /* Yes, then we have to do things differently.
- * Just copy the g_current_regs into the OLD rtcb.
- */
-
- riscv_savestate(rtcb->xcp.regs);
-
- /* Restore the exception context of the rtcb at the (new) head
- * of the ready-to-run task list.
- */
-
- rtcb = this_task();
-
- /* Reset scheduler parameters */
-
- nxsched_resume_scheduler(rtcb);
-
- /* Then switch contexts. Any necessary address environment
- * changes will be made when the interrupt returns.
- */
-
- riscv_restorestate(rtcb->xcp.regs);
- }
-
- /* No, then we will need to perform the user context switch */
-
- else
- {
- /* Get the context of the task at the head of the ready to
- * run list.
- */
-
- struct tcb_s *nexttcb = this_task();
-
-#ifdef CONFIG_ARCH_ADDRENV
- /* Make sure that the address environment for the previously
- * running task is closed down gracefully (data caches dump,
- * MMU flushed) and set up the address environment for the new
- * thread at the head of the ready-to-run list.
- */
-
- group_addrenv(nexttcb);
-#endif
- /* Reset scheduler parameters */
-
- nxsched_resume_scheduler(nexttcb);
-
- /* Then switch contexts */
-
- riscv_switchcontext(rtcb->xcp.regs, nexttcb->xcp.regs);
-
- /* riscv_switchcontext forces a context switch to the task at the
- * head of the ready-to-run list. It does not 'return' in the
- * normal sense. When it does return, it is because the blocked
- * task is again ready to run and has execution priority.
- */
- }
- }
-}