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
commit 901361be4816591af9917ef62f9805a8bc9773a4 Author: Huang Qi <huang...@xiaomi.com> AuthorDate: Wed Dec 29 11:25:53 2021 +0800 arch/risc-v: Move more files to common Signed-off-by: Huang Qi <huang...@xiaomi.com> --- .../src/{rv64gc => common}/riscv_releasepending.c | 2 +- .../src/{rv64gc => common}/riscv_reprioritizertr.c | 2 +- .../src/{rv64gc => common}/riscv_unblocktask.c | 2 +- arch/risc-v/src/rv32im/riscv_releasepending.c | 134 --------------- arch/risc-v/src/rv32im/riscv_reprioritizertr.c | 188 --------------------- arch/risc-v/src/rv32im/riscv_unblocktask.c | 149 ---------------- 6 files changed, 3 insertions(+), 474 deletions(-) diff --git a/arch/risc-v/src/rv64gc/riscv_releasepending.c b/arch/risc-v/src/common/riscv_releasepending.c similarity index 98% rename from arch/risc-v/src/rv64gc/riscv_releasepending.c rename to arch/risc-v/src/common/riscv_releasepending.c index 20cdc27..18f7915 100644 --- a/arch/risc-v/src/rv64gc/riscv_releasepending.c +++ b/arch/risc-v/src/common/riscv_releasepending.c @@ -1,5 +1,5 @@ /**************************************************************************** - * arch/risc-v/src/rv64gc/riscv_releasepending.c + * arch/risc-v/src/common/riscv_releasepending.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/rv64gc/riscv_reprioritizertr.c b/arch/risc-v/src/common/riscv_reprioritizertr.c similarity index 99% rename from arch/risc-v/src/rv64gc/riscv_reprioritizertr.c rename to arch/risc-v/src/common/riscv_reprioritizertr.c index 8cf0b82..8cb46f4 100644 --- a/arch/risc-v/src/rv64gc/riscv_reprioritizertr.c +++ b/arch/risc-v/src/common/riscv_reprioritizertr.c @@ -1,5 +1,5 @@ /**************************************************************************** - * arch/risc-v/src/rv64gc/riscv_reprioritizertr.c + * arch/risc-v/src/common/riscv_reprioritizertr.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/rv64gc/riscv_unblocktask.c b/arch/risc-v/src/common/riscv_unblocktask.c similarity index 99% rename from arch/risc-v/src/rv64gc/riscv_unblocktask.c rename to arch/risc-v/src/common/riscv_unblocktask.c index 2e9bb04..6aa94c9 100644 --- a/arch/risc-v/src/rv64gc/riscv_unblocktask.c +++ b/arch/risc-v/src/common/riscv_unblocktask.c @@ -1,5 +1,5 @@ /**************************************************************************** - * arch/risc-v/src/rv64gc/riscv_unblocktask.c + * arch/risc-v/src/common/riscv_unblocktask.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_releasepending.c b/arch/risc-v/src/rv32im/riscv_releasepending.c deleted file mode 100644 index bf3e8f2..0000000 --- a/arch/risc-v/src/rv32im/riscv_releasepending.c +++ /dev/null @@ -1,134 +0,0 @@ -/**************************************************************************** - * arch/risc-v/src/rv32im/riscv_releasepending.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 <sched.h> -#include <syscall.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_release_pending - * - * Description: - * Release and ready-to-run tasks that have - * collected in the pending task list. This can call a - * context switch if a new task is placed at the head of - * the ready to run list. - * - ****************************************************************************/ - -void up_release_pending(void) -{ - struct tcb_s *rtcb = this_task(); - - sinfo("From TCB=%p\n", rtcb); - - /* Merge the g_pendingtasks list into the ready-to-run task list */ - - /* sched_lock(); */ - - if (nxsched_merge_pending()) - { - /* The currently active task has changed! We will need to switch - * contexts. - * - * Update scheduler parameters. - */ - - nxsched_suspend_scheduler(rtcb); - - /* Are we operating in interrupt context? */ - - 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(); - - /* Update 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 - { - /* Switch context to 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 - /* Update 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. - */ - } - } -} diff --git a/arch/risc-v/src/rv32im/riscv_reprioritizertr.c b/arch/risc-v/src/rv32im/riscv_reprioritizertr.c deleted file mode 100644 index 3b2d4c8..0000000 --- a/arch/risc-v/src/rv32im/riscv_reprioritizertr.c +++ /dev/null @@ -1,188 +0,0 @@ -/**************************************************************************** - * arch/risc-v/src/rv32im/riscv_reprioritizertr.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 <stdint.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_reprioritize_rtr - * - * Description: - * Called when the priority of a running or - * ready-to-run task changes and the reprioritization will - * cause a context switch. Two cases: - * - * 1) The priority of the currently running task drops and the next - * task in the ready to run list has priority. - * 2) An idle, ready to run task's priority has been raised above the - * priority of the current, running task and it now has the priority. - * - * Input Parameters: - * tcb: The TCB of the task that has been reprioritized - * priority: The new task priority - * - ****************************************************************************/ - -void up_reprioritize_rtr(struct tcb_s *tcb, uint8_t priority) -{ - /* Verify that the caller is sane */ - - if (tcb->task_state < FIRST_READY_TO_RUN_STATE || - tcb->task_state > LAST_READY_TO_RUN_STATE -#if SCHED_PRIORITY_MIN > 0 - || priority < SCHED_PRIORITY_MIN -#endif -#if SCHED_PRIORITY_MAX < UINT8_MAX - || priority > SCHED_PRIORITY_MAX -#endif - ) - { - DEBUGPANIC(); - } - else - { - struct tcb_s *rtcb = this_task(); - bool switch_needed; - - sinfo("TCB=%p PRI=%d\n", tcb, priority); - - /* Remove the tcb task from the ready-to-run list. - * nxsched_remove_readytorun will return true if we just - * remove the head of the ready to run list. - */ - - switch_needed = nxsched_remove_readytorun(tcb); - - /* Setup up the new task priority */ - - tcb->sched_priority = (uint8_t)priority; - - /* Return the task to the specified blocked task list. - * nxsched_add_readytorun will return true if the task was - * added to the new list. We will need to perform a context - * switch only if the EXCLUSIVE or of the two calls is non-zero - * (i.e., one and only one the calls changes the head of the - * ready-to-run list). - */ - - switch_needed ^= nxsched_add_readytorun(tcb); - - /* Now, perform the context switch if one is needed */ - - if (switch_needed) - { - /* If we are going to do a context switch, then now is the right - * time to add any pending tasks back into the ready-to-run list. - */ - - if (g_pendingtasks.head) - { - nxsched_merge_pending(); - } - - /* 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(); - - /* Update 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 - { - /* Switch context to 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 - /* Update 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. - */ - } - } - } -} diff --git a/arch/risc-v/src/rv32im/riscv_unblocktask.c b/arch/risc-v/src/rv32im/riscv_unblocktask.c deleted file mode 100644 index 57b9160..0000000 --- a/arch/risc-v/src/rv32im/riscv_unblocktask.c +++ /dev/null @@ -1,149 +0,0 @@ -/**************************************************************************** - * arch/risc-v/src/rv32im/riscv_unblocktask.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 <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 "clock/clock.h" -#include "riscv_internal.h" - -/**************************************************************************** - * Public Functions - ****************************************************************************/ - -/**************************************************************************** - * Name: up_unblock_task - * - * Description: - * A task is currently in an inactive task list - * but has been prepped to execute. Move the TCB to the - * ready-to-run list, restore its context, and start execution. - * - * Input Parameters: - * tcb: Refers to the tcb to be unblocked. This tcb is - * in one of the waiting tasks lists. It must be moved to - * the ready-to-run list and, if it is the highest priority - * ready to run task, executed. - * - ****************************************************************************/ - -void up_unblock_task(struct tcb_s *tcb) -{ - struct tcb_s *rtcb = this_task(); - - /* Verify that the context switch can be performed */ - - DEBUGASSERT((tcb->task_state >= FIRST_BLOCKED_STATE) && - (tcb->task_state <= LAST_BLOCKED_STATE)); - - /* Remove the task from the blocked task list */ - - nxsched_remove_blocked(tcb); - - /* Add the task in the correct location in the prioritized - * ready-to-run task list - */ - - if (nxsched_add_readytorun(tcb)) - { - /* The currently active task has changed! We need to do - * a context switch to the new task. - */ - - /* 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(); - - /* Update 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 - { - /* Restore the exception context of the new task that is ready to - * run (probably tcb). This is the new rtcb at the head of the - * ready-to-run task 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 - /* Update 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. - */ - } - } -}