Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 2 additions & 5 deletions arch/avr/src/avr/avr_doirq.c
Original file line number Diff line number Diff line change
Expand Up @@ -61,10 +61,7 @@ uint8_t *avr_doirq(uint8_t irq, uint8_t *regs)
{
struct tcb_s **running_task = &g_running_tasks[this_cpu()];

if (*running_task != NULL)
{
avr_copystate((*running_task)->xcp.regs, regs);
}
avr_copystate((*running_task)->xcp.regs, regs);

board_autoled_on(LED_INIRQ);
#ifdef CONFIG_SUPPRESS_INTERRUPTS
Expand Down Expand Up @@ -104,7 +101,7 @@ uint8_t *avr_doirq(uint8_t irq, uint8_t *regs)
* crashes.
*/

g_running_tasks[this_cpu()] = this_task();
*running_task = this_task();
}

regs = up_current_regs(); /* Cast removes volatile attribute */
Expand Down
7 changes: 2 additions & 5 deletions arch/avr/src/avr32/avr_doirq.c
Original file line number Diff line number Diff line change
Expand Up @@ -63,10 +63,7 @@ uint32_t *avr_doirq(int irq, uint32_t *regs)
struct tcb_s **running_task = &g_running_tasks[this_cpu()];
struct tcb_s *tcb;

if (*running_task != NULL)
{
avr_copystate((*running_task)->xcp.regs, regs);
}
avr_copystate((*running_task)->xcp.regs, regs);

board_autoled_on(LED_INIRQ);
#ifdef CONFIG_SUPPRESS_INTERRUPTS
Expand Down Expand Up @@ -117,7 +114,7 @@ uint32_t *avr_doirq(int irq, uint32_t *regs)
* crashes.
*/

g_running_tasks[this_cpu()] = tcb;
*running_task = tcb;
}

/* If a context switch occurred while processing the interrupt then
Expand Down
7 changes: 2 additions & 5 deletions arch/hc/src/common/hc_doirq.c
Original file line number Diff line number Diff line change
Expand Up @@ -63,10 +63,7 @@ uint8_t *hc_doirq(int irq, uint8_t *regs)
struct tcb_s **running_task = &g_running_tasks[this_cpu()];
struct tcb_s *tcb;

if (*running_task != NULL)
{
hc_copystate((*running_task)->xcp.regs);
}
hc_copystate((*running_task)->xcp.regs);

board_autoled_on(LED_INIRQ);
#ifdef CONFIG_SUPPRESS_INTERRUPTS
Expand Down Expand Up @@ -117,7 +114,7 @@ uint8_t *hc_doirq(int irq, uint8_t *regs)
* crashes.
*/

g_running_tasks[this_cpu()] = tcb;
*running_task = tcb;
}

/* If a context switch occurred while processing the interrupt then
Expand Down
7 changes: 2 additions & 5 deletions arch/or1k/src/common/or1k_doirq.c
Original file line number Diff line number Diff line change
Expand Up @@ -45,10 +45,7 @@ uint32_t *or1k_doirq(int irq, uint32_t *regs)
{
struct tcb_s **running_task = &g_running_tasks[this_cpu()];

if (*running_task != NULL)
{
or1k_copyfullstate((*running_task)->xcp.regs, regs);
}
or1k_copyfullstate((*running_task)->xcp.regs, regs);

board_autoled_on(LED_INIRQ);
#ifdef CONFIG_SUPPRESS_INTERRUPTS
Expand Down Expand Up @@ -86,7 +83,7 @@ uint32_t *or1k_doirq(int irq, uint32_t *regs)
* crashes.
*/

g_running_tasks[this_cpu()] = this_task();
*running_task = this_task();
}

regs = up_current_regs();
Expand Down
7 changes: 2 additions & 5 deletions arch/renesas/src/common/renesas_doirq.c
Original file line number Diff line number Diff line change
Expand Up @@ -63,10 +63,7 @@ uint32_t *renesas_doirq(int irq, uint32_t * regs)
struct tcb_s **running_task = &g_running_tasks[this_cpu()];
struct tcb_s *tcb;

if (*running_task != NULL)
{
renesas_copystate((*running_task)->xcp.regs, regs);
}
renesas_copystate((*running_task)->xcp.regs, regs);

board_autoled_on(LED_INIRQ);
#ifdef CONFIG_SUPPRESS_INTERRUPTS
Expand Down Expand Up @@ -120,7 +117,7 @@ uint32_t *renesas_doirq(int irq, uint32_t * regs)
* crashes.
*/

g_running_tasks[this_cpu()] = tcb;
*running_task = tcb;
}

/* Get the current value of regs... it may have changed because
Expand Down
7 changes: 2 additions & 5 deletions arch/sim/src/sim/sim_doirq.c
Original file line number Diff line number Diff line change
Expand Up @@ -67,10 +67,7 @@ void *sim_doirq(int irq, void *context)
{
struct tcb_s **running_task = &g_running_tasks[this_cpu()];

if (*running_task != NULL)
{
sim_copyfullstate((*running_task)->xcp.regs, regs);
}
sim_copyfullstate((*running_task)->xcp.regs, regs);

up_set_current_regs(regs);

Expand All @@ -91,7 +88,7 @@ void *sim_doirq(int irq, void *context)
* crashes.
*/

g_running_tasks[this_cpu()] = this_task();
*running_task = this_task();
}

regs = up_current_regs();
Expand Down
5 changes: 1 addition & 4 deletions arch/x86/src/qemu/qemu_handlers.c
Original file line number Diff line number Diff line change
Expand Up @@ -91,10 +91,7 @@ static uint32_t *common_handler(int irq, uint32_t *regs)
DEBUGASSERT(up_current_regs() == NULL);
up_set_current_regs(regs);

if (*running_task != NULL)
{
x86_savestate((*running_task)->xcp.regs);
}
x86_savestate((*running_task)->xcp.regs);

/* Deliver the IRQ */

Expand Down
11 changes: 3 additions & 8 deletions arch/x86_64/src/intel64/intel64_handlers.c
Original file line number Diff line number Diff line change
Expand Up @@ -66,12 +66,8 @@ static uint64_t *common_handler(int irq, uint64_t *regs)
{
struct tcb_s **running_task = &g_running_tasks[this_cpu()];
struct tcb_s *tcb;
int cpu;

if (*running_task != NULL)
{
(*running_task)->xcp.regs = regs;
}
(*running_task)->xcp.regs = regs;

/* Current regs non-zero indicates that we are processing an interrupt;
* g_current_regs is also used to manage interrupt level context switches.
Expand Down Expand Up @@ -108,7 +104,6 @@ static uint64_t *common_handler(int irq, uint64_t *regs)

/* Update scheduler parameters */

cpu = this_cpu();
nxsched_suspend_scheduler(*running_task);
nxsched_resume_scheduler(tcb);

Expand All @@ -117,11 +112,11 @@ static uint64_t *common_handler(int irq, uint64_t *regs)
* crashes.
*/

g_running_tasks[cpu] = tcb;
*running_task = tcb;

/* Restore the cpu lock */

restore_critical_section(tcb, cpu);
restore_critical_section(tcb, this_cpu());
}

/* If a context switch occurred while processing the interrupt then
Expand Down
10 changes: 2 additions & 8 deletions arch/xtensa/src/common/xtensa_assert.c
Original file line number Diff line number Diff line change
Expand Up @@ -69,10 +69,7 @@ void xtensa_panic(int xptcode, uint32_t *regs)
{
struct tcb_s **running_task = &g_running_tasks[this_cpu()];

if (*running_task != NULL)
{
(*running_task)->xcp.regs = regs;
}
(*running_task)->xcp.regs = regs;

up_set_interrupt_context(true);

Expand Down Expand Up @@ -175,10 +172,7 @@ void xtensa_user_panic(int exccause, uint32_t *regs)
{
struct tcb_s **running_task = &g_running_tasks[this_cpu()];

if (*running_task != NULL)
{
(*running_task)->xcp.regs = regs;
}
(*running_task)->xcp.regs = regs;

up_set_interrupt_context(true);

Expand Down
7 changes: 2 additions & 5 deletions arch/z16/src/common/z16_doirq.c
Original file line number Diff line number Diff line change
Expand Up @@ -63,10 +63,7 @@ FAR chipreg_t *z16_doirq(int irq, FAR chipreg_t *regs)
struct tcb_s **running_task = &g_running_tasks[this_cpu()];
FAR chipreg_t *savestate;

if (*running_task != NULL)
{
z16_copystate((*running_task)->xcp.regs, regs)
}
z16_copystate((*running_task)->xcp.regs, regs)

/* Nested interrupts are not supported in this implementation. If
* you want to implement nested interrupts, you would have to (1)
Expand Down Expand Up @@ -100,7 +97,7 @@ FAR chipreg_t *z16_doirq(int irq, FAR chipreg_t *regs)
* crashes.
*/

g_running_tasks[this_cpu()] = this_task();
*running_task = this_task();
}

/* Restore the previous value of g_current_regs. NULL would indicate
Expand Down
5 changes: 1 addition & 4 deletions arch/z16/src/z16f/z16f_sysexec.c
Original file line number Diff line number Diff line change
Expand Up @@ -52,10 +52,7 @@ void z16f_sysexec(FAR chipreg_t *regs)
struct tcb_s **running_task = &g_running_tasks[this_cpu()];
uint16_t excp;

if (*running_task != NULL)
{
z16_copystate((*running_task)->xcp.regs, regs)
}
z16_copystate((*running_task)->xcp.regs, regs)

/* Save that register reference so that it can be used for built-in
* diagnostics.
Expand Down
7 changes: 2 additions & 5 deletions arch/z80/src/common/z80_doirq.c
Original file line number Diff line number Diff line change
Expand Up @@ -49,10 +49,7 @@ FAR chipreg_t *z80_doirq(uint8_t irq, FAR chipreg_t *regs)
struct tcb_s **running_task = &g_running_tasks[this_cpu()];
struct tcb_s *tcb;

if (*running_task != NULL)
{
z80_copystate((*running_task)->xcp.regs, regs)
}
z80_copystate((*running_task)->xcp.regs, regs)

board_autoled_on(LED_INIRQ);

Expand Down Expand Up @@ -103,7 +100,7 @@ FAR chipreg_t *z80_doirq(uint8_t irq, FAR chipreg_t *regs)
* crashes.
*/

g_running_tasks[this_cpu()] = tcb;
*running_task = tcb;
}

regs = newregs;
Expand Down
Loading