Skip to content
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

arm: g_current_regs is only used to determine if we are in irq, #13444

Open
wants to merge 3 commits into
base: master
Choose a base branch
from

Conversation

hujun260
Copy link
Contributor

@hujun260 hujun260 commented Sep 14, 2024

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
size nuttx
text data bss dec hex filename
225920 409 30925 257254 3ece6 nuttx

after
text data bss dec hex filename
225604 409 30925 256938 3ebaa nuttx

szie change -316

Testing

Build Host:

  • OS: Ubuntu 20.04
  • CPU: x86_64
  • Compiler: GCC 9.4.0

Target:

  • Arch: ARM ARM64

logs:
NO change

@hujun260 hujun260 force-pushed the apache_7 branch 2 times, most recently from f63fe3e to b996852 Compare September 18, 2024 09:52
@lupyuen
Copy link
Member

lupyuen commented Sep 18, 2024

[Experimental Bot, please feedback here]

NuttX PR Requirements Review

While the provided summary gives a high-level idea of the change, it lacks some important details.

Here's a breakdown of what's missing and how to improve the PR:

Summary:

  • Clarity on the "Why": Instead of just stating functionalities were removed, explain the benefit of removing them. Why is reducing context switch time important? What kind of performance improvement does it bring?
  • Specificity on "What": Which functionalities were removed exactly? This needs to be crystal clear.
  • Missing Information:
    • Related Issues: Are there any related NuttX issues this PR addresses? If so, provide links.
    • NuttX Apps Impact: Does this change impact any NuttX Apps? Be specific.

Impact:

  • Incomplete: You need to address all the impact points listed in the requirements. Even if the answer is "NO," state it explicitly. Don't leave any section blank. For example:
    • Is a new feature added? NO
    • Is an existing feature changed? YES (Please describe how the removal of g_current_regs functionality impacts existing features)
    • Impact on the user: NO (or YES if users need to be aware of anything)
    • ...and so on for all the impact points.

Testing:

  • Insufficient Information:
    • Build Hosts: Specify the operating system, CPU architecture, and compiler used for testing.
    • Targets: Be specific about the architecture (e.g., ARM Cortex-M4) and board configuration used.
  • Missing Logs:
    • Provide actual testing logs from before and after the change. This helps reviewers understand how the code behaved before and after your changes. Include relevant logs that demonstrate the performance improvement (context switch time).

Overall:

The PR is incomplete and needs more details to meet the NuttX requirements. Provide the missing information and address all the impact points clearly. Detailed testing information, including logs, is crucial for reviewers to evaluate your changes effectively.

@hujun260
Copy link
Contributor Author

[Experimental Bot, please feedback here]

NuttX PR Requirements Review

While the provided summary gives a high-level idea of the change, it lacks some important details.

Here's a breakdown of what's missing and how to improve the PR:

Summary:

  • Clarity on the "Why": Instead of just stating functionalities were removed, explain the benefit of removing them. Why is reducing context switch time important? What kind of performance improvement does it bring?

  • Specificity on "What": Which functionalities were removed exactly? This needs to be crystal clear.

  • Missing Information:

    • Related Issues: Are there any related NuttX issues this PR addresses? If so, provide links.
    • NuttX Apps Impact: Does this change impact any NuttX Apps? Be specific.

Impact:

  • Incomplete: You need to address all the impact points listed in the requirements. Even if the answer is "NO," state it explicitly. Don't leave any section blank. For example:

    • Is a new feature added? NO
    • Is an existing feature changed? YES (Please describe how the removal of g_current_regs functionality impacts existing features)
    • Impact on the user: NO (or YES if users need to be aware of anything)
    • ...and so on for all the impact points.

Testing:

  • Insufficient Information:

    • Build Hosts: Specify the operating system, CPU architecture, and compiler used for testing.
    • Targets: Be specific about the architecture (e.g., ARM Cortex-M4) and board configuration used.
  • Missing Logs:

    • Provide actual testing logs from before and after the change. This helps reviewers understand how the code behaved before and after your changes. Include relevant logs that demonstrate the performance improvement (context switch time).

Overall:

The PR is incomplete and needs more details to meet the NuttX requirements. Provide the missing information and address all the impact points clearly. Detailed testing information, including logs, is crucial for reviewers to evaluate your changes effectively.

i update the pr

@github-actions github-actions bot added the Size: XL The size of the change in this PR is very large. Consider breaking down the PR into smaller pieces. label Sep 19, 2024
@@ -94,11 +101,9 @@ uint32_t *arm_doirq(int irq, uint32_t *regs)

if (regs == NULL)
{
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why still keep this if statement?

arch/arm/src/tlsr82/tc32/tc32_doirq.c Outdated Show resolved Hide resolved
arch/arm/src/armv8-m/arm_schedulesigaction.c Show resolved Hide resolved
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
size nuttx
   text    data     bss     dec     hex filename
 225920     409   30925  257254   3ece6 nuttx

after
   text    data     bss     dec     hex filename
 225604     409   30925  256938   3ebaa nuttx

 szie change -316

Signed-off-by: hujun5 <[email protected]>
with other functionalities removed.

Signed-off-by: hujun5 <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Size: XL The size of the change in this PR is very large. Consider breaking down the PR into smaller pieces.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants