-
Notifications
You must be signed in to change notification settings - Fork 1.5k
xtensa: g_current_regs is only used to determine if we are in irq, #13623
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
|
[Experimental Bot, please feedback here] NuttX PR Requirements ReviewOverall: The PR description mostly meets NuttX requirements but has some areas for improvement. Strengths:
Areas for Improvement:
Recommendation: Address the missing information and clarify the points mentioned above. Providing concrete testing logs demonstrating the improvement (e.g., reduced context switch time) would significantly strengthen the PR. |
|
I will test it in our internal CI. Please don't merge it yet. |
|
@hujun260 please rebase the change to fix the conflict. |
@tmedicci do you have test result? |
with other functionalities removed. reason: by doing this we can reduce context switch time, When we exit from an interrupt handler, we directly use tcb->xcp.regs before text data bss dec hex filename 178368 876 130604 309848 4ba58 nuttx after text data bss dec hex filename 178120 876 130212 309208 4b7d8 nuttx szie change -248 Signed-off-by: hujun5 <hujun5@xiaomi.com>
I'm sorry. I let it testing during the night. Everything seems to be fine. Please, go ahead! |
Summary
Why
When a context switch occurs currently, the context before the interrupt is fetched from the global variable g_current_regs and then stored in the corresponding tcb->xcp.regs. Subsequently, the new context is assigned to g_current_regs. When returning from the interrupt context, the context is retrieved from g_current_regs and used.
In reality, we do not necessarily require this intermediate variable g_current_regs to accomplish a context switch. Eliminating it avoids multiple assignments, especially during multiple context switches within interrupts, which can lead to repeated assignments.
All we need is to work directly with the context of the currently running task. This approach enhances the speed of context switching, reduces the code base, and optimizes signal handling logic. By simply leveraging the context of the active task, we can streamline the process and improve overall efficiency.
reason:
by doing this we can reduce context switch time,
When we exit from an interrupt handler, we directly use tcb->xcp.regs
Missing Information:
Related Issues: none
NuttX Apps Impact: none
Impact
Is a new feature added? NO
Is an existing feature changed? yes
g_current_regs is only used to determine if we are in irq with other functionalities removed.
We need to use up_interrupt_context for interrupt identification instead of relying on up_current_regs for that purpose.
before
text data bss dec hex filename
178368 876 130604 309848 4ba58 nuttx
after
text data bss dec hex filename
178120 876 130212 309208 4b7d8 nuttx
szie change -248
Testing
Build Host:
OS: Ubuntu 20.04
CPU: x86_64
Compiler: GCC 9.4.0
Target:
Arch: xtensa(./tools/configure.sh -E esp32s3-devkit:smp)