Skip to content

Commit 817406d

Browse files
committed
Reduce the size of tcb by four bytes.
Signed-off-by: wangzhi16 <[email protected]>
1 parent 12ddf5d commit 817406d

File tree

70 files changed

+295
-230
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

70 files changed

+295
-230
lines changed

arch/arm/src/arm/arm_schedulesigaction.c

+3-2
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535

3636
#include "arm.h"
3737
#include "sched/sched.h"
38+
#include "signal/signal.h"
3839
#include "arm_internal.h"
3940

4041
/****************************************************************************
@@ -90,8 +91,8 @@ void up_schedule_sigaction(struct tcb_s *tcb)
9091
{
9192
/* In this case just deliver the signal now. */
9293

93-
(tcb->sigdeliver)(tcb);
94-
tcb->sigdeliver = NULL;
94+
nxsig_deliver(tcb);
95+
tcb->flags &= ~TCB_FLAG_SIGDELIVER;
9596
}
9697

9798
/* Otherwise, we are (1) signaling a task is not running

arch/arm/src/arm/arm_sigdeliver.c

+6-5
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
#include <arch/board/board.h>
3838

3939
#include "sched/sched.h"
40+
#include "signal/signal.h"
4041
#include "arm_internal.h"
4142

4243
/****************************************************************************
@@ -59,9 +60,9 @@ void arm_sigdeliver(void)
5960

6061
board_autoled_on(LED_SIGNAL);
6162

62-
sinfo("rtcb=%p sigdeliver=%p sigpendactionq.head=%p\n",
63-
rtcb, rtcb->sigdeliver, rtcb->sigpendactionq.head);
64-
DEBUGASSERT(rtcb->sigdeliver != NULL);
63+
sinfo("rtcb=%p sigpendactionq.head=%p\n",
64+
rtcb, rtcb->sigpendactionq.head);
65+
DEBUGASSERT((rtcb->flags & TCB_FLAG_SIGDELIVER) != 0);
6566

6667
#ifndef CONFIG_SUPPRESS_INTERRUPTS
6768
/* Then make sure that interrupts are enabled. Signal handlers must always
@@ -73,7 +74,7 @@ void arm_sigdeliver(void)
7374

7475
/* Deliver the signal */
7576

76-
(rtcb->sigdeliver)(rtcb);
77+
nxsig_deliver(rtcb);
7778

7879
/* Output any debug messages BEFORE restoring errno (because they may
7980
* alter errno), then disable interrupts again and restore the original
@@ -93,7 +94,7 @@ void arm_sigdeliver(void)
9394
* could be modified by a hostile program.
9495
*/
9596

96-
rtcb->sigdeliver = NULL; /* Allows next handler to be scheduled */
97+
rtcb->flags &= ~TCB_FLAG_SIGDELIVER; /* Allows next handler to be scheduled */
9798

9899
/* Then restore the correct state for this thread of execution. */
99100

arch/arm/src/armv6-m/arm_doirq.c

+2-1
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
#include <nuttx/board.h>
3535
#include <arch/board/board.h>
3636
#include <sched/sched.h>
37+
#include <signal/signal.h>
3738

3839
#include "arm_internal.h"
3940
#include "exc_return.h"
@@ -86,7 +87,7 @@ uint32_t *arm_doirq(int irq, uint32_t *regs)
8687

8788
irq_dispatch(irq, regs);
8889
#endif
89-
if (tcb->sigdeliver)
90+
if ((tcb->flags & TCB_FLAG_SIGDELIVER) != 0)
9091
{
9192
/* Pendsv able to access running tcb with no critical section */
9293

arch/arm/src/armv6-m/arm_schedulesigaction.c

+3-2
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
#include "psr.h"
3838
#include "exc_return.h"
3939
#include "sched/sched.h"
40+
#include "signal/signal.h"
4041
#include "arm_internal.h"
4142
#include "irq/irq.h"
4243
#include "nvic.h"
@@ -96,8 +97,8 @@ void up_schedule_sigaction(struct tcb_s *tcb)
9697
* REVISIT: Signal handle will run in a critical section!
9798
*/
9899

99-
(tcb->sigdeliver)(tcb);
100-
tcb->sigdeliver = NULL;
100+
nxsig_deliver(tcb);
101+
tcb->flags &= ~TCB_FLAG_SIGDELIVER;
101102
}
102103
else if (tcb == rtcb && ipsr != NVIC_IRQ_PENDSV)
103104
{

arch/arm/src/armv6-m/arm_sigdeliver.c

+6-5
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
#include <arch/board/board.h>
3838

3939
#include "sched/sched.h"
40+
#include "signal/signal.h"
4041
#include "arm_internal.h"
4142

4243
/****************************************************************************
@@ -69,9 +70,9 @@ void arm_sigdeliver(void)
6970

7071
board_autoled_on(LED_SIGNAL);
7172

72-
sinfo("rtcb=%p sigdeliver=%p sigpendactionq.head=%p\n",
73-
rtcb, rtcb->sigdeliver, rtcb->sigpendactionq.head);
74-
DEBUGASSERT(rtcb->sigdeliver != NULL);
73+
sinfo("rtcb=%p sigpendactionq.head=%p\n",
74+
rtcb, rtcb->sigpendactionq.head);
75+
DEBUGASSERT((rtcb->flags & TCB_FLAG_SIGDELIVER) != 0);
7576

7677
retry:
7778
#ifdef CONFIG_SMP
@@ -103,7 +104,7 @@ void arm_sigdeliver(void)
103104

104105
/* Deliver the signal */
105106

106-
(rtcb->sigdeliver)(rtcb);
107+
nxsig_deliver(rtcb);
107108

108109
/* Output any debug messages BEFORE restoring errno (because they may
109110
* alter errno), then disable interrupts again and restore the original
@@ -150,7 +151,7 @@ void arm_sigdeliver(void)
150151
* could be modified by a hostile program.
151152
*/
152153

153-
rtcb->sigdeliver = NULL; /* Allows next handler to be scheduled */
154+
rtcb->flags &= ~TCB_FLAG_SIGDELIVER; /* Allows next handler to be scheduled */
154155

155156
/* Then restore the correct state for this thread of
156157
* execution.

arch/arm/src/armv7-a/arm_schedulesigaction.c

+3-2
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636

3737
#include "arm.h"
3838
#include "sched/sched.h"
39+
#include "signal/signal.h"
3940
#include "arm_internal.h"
4041
#include "irq/irq.h"
4142

@@ -94,8 +95,8 @@ void up_schedule_sigaction(struct tcb_s *tcb)
9495
* REVISIT: Signal handler will run in a critical section!
9596
*/
9697

97-
(tcb->sigdeliver)(tcb);
98-
tcb->sigdeliver = NULL;
98+
nxsig_deliver(tcb);
99+
tcb->flags &= ~TCB_FLAG_SIGDELIVER;
99100
}
100101
else
101102
{

arch/arm/src/armv7-a/arm_sigdeliver.c

+6-5
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
#include <arch/board/board.h>
3838

3939
#include "sched/sched.h"
40+
#include "signal/signal.h"
4041
#include "arm_internal.h"
4142

4243
/****************************************************************************
@@ -69,9 +70,9 @@ void arm_sigdeliver(void)
6970

7071
board_autoled_on(LED_SIGNAL);
7172

72-
sinfo("rtcb=%p sigdeliver=%p sigpendactionq.head=%p\n",
73-
rtcb, rtcb->sigdeliver, rtcb->sigpendactionq.head);
74-
DEBUGASSERT(rtcb->sigdeliver != NULL);
73+
sinfo("rtcb=%p sigpendactionq.head=%p\n",
74+
rtcb, rtcb->sigpendactionq.head);
75+
DEBUGASSERT((rtcb->flags & TCB_FLAG_SIGDELIVER) != 0);
7576

7677
retry:
7778
#ifdef CONFIG_SMP
@@ -103,7 +104,7 @@ void arm_sigdeliver(void)
103104

104105
/* Deliver the signal */
105106

106-
(rtcb->sigdeliver)(rtcb);
107+
nxsig_deliver(rtcb);
107108

108109
/* Output any debug messages BEFORE restoring errno (because they may
109110
* alter errno), then disable interrupts again and restore the original
@@ -150,7 +151,7 @@ void arm_sigdeliver(void)
150151
* could be modified by a hostile program.
151152
*/
152153

153-
rtcb->sigdeliver = NULL; /* Allows next handler to be scheduled */
154+
rtcb->flags &= ~TCB_FLAG_SIGDELIVER; /* Allows next handler to be scheduled */
154155

155156
/* Then restore the correct state for this thread of execution. */
156157

arch/arm/src/armv7-a/arm_syscall.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -410,7 +410,7 @@ uint32_t *arm_syscall(uint32_t *regs)
410410

411411
/* Copy "info" into user stack */
412412

413-
if (rtcb->sigdeliver)
413+
if ((rtcb->flags & TCB_FLAG_SIGDELIVER) != 0)
414414
{
415415
usp = rtcb->xcp.saved_regs[REG_SP];
416416
}

arch/arm/src/armv7-m/arm_doirq.c

+2-1
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
#include <nuttx/board.h>
3535
#include <arch/board/board.h>
3636
#include <sched/sched.h>
37+
#include <signal/signal.h>
3738

3839
#include "arm_internal.h"
3940
#include "exc_return.h"
@@ -86,7 +87,7 @@ uint32_t *arm_doirq(int irq, uint32_t *regs)
8687

8788
irq_dispatch(irq, regs);
8889
#endif
89-
if (tcb->sigdeliver)
90+
if ((tcb->flags & TCB_FLAG_SIGDELIVER) != 0)
9091
{
9192
/* Pendsv able to access running tcb with no critical section */
9293

arch/arm/src/armv7-m/arm_schedulesigaction.c

+3-2
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
#include "psr.h"
3939
#include "exc_return.h"
4040
#include "sched/sched.h"
41+
#include "signal/signal.h"
4142
#include "arm_internal.h"
4243
#include "irq/irq.h"
4344
#include "nvic.h"
@@ -97,8 +98,8 @@ void up_schedule_sigaction(struct tcb_s *tcb)
9798
* REVISIT: Signal handle will run in a critical section!
9899
*/
99100

100-
(tcb->sigdeliver)(tcb);
101-
tcb->sigdeliver = NULL;
101+
nxsig_deliver(tcb);
102+
tcb->flags &= ~TCB_FLAG_SIGDELIVER;
102103
}
103104
else if (tcb == rtcb && ipsr != NVIC_IRQ_PENDSV)
104105
{

arch/arm/src/armv7-m/arm_sigdeliver.c

+6-5
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
#include <arch/board/board.h>
3838

3939
#include "sched/sched.h"
40+
#include "signal/signal.h"
4041
#include "arm_internal.h"
4142

4243
/****************************************************************************
@@ -69,9 +70,9 @@ void arm_sigdeliver(void)
6970

7071
board_autoled_on(LED_SIGNAL);
7172

72-
sinfo("rtcb=%p sigdeliver=%p sigpendactionq.head=%p\n",
73-
rtcb, rtcb->sigdeliver, rtcb->sigpendactionq.head);
74-
DEBUGASSERT(rtcb->sigdeliver != NULL);
73+
sinfo("rtcb=%p sigpendactionq.head=%p\n",
74+
rtcb, rtcb->sigpendactionq.head);
75+
DEBUGASSERT((rtcb->flags & TCB_FLAG_SIGDELIVER) != 0);
7576

7677
retry:
7778
#ifdef CONFIG_SMP
@@ -103,7 +104,7 @@ void arm_sigdeliver(void)
103104

104105
/* Deliver the signal */
105106

106-
(rtcb->sigdeliver)(rtcb);
107+
nxsig_deliver(rtcb);
107108

108109
/* Output any debug messages BEFORE restoring errno (because they may
109110
* alter errno), then disable interrupts again and restore the original
@@ -150,7 +151,7 @@ void arm_sigdeliver(void)
150151
* could be modified by a hostile program.
151152
*/
152153

153-
rtcb->sigdeliver = NULL; /* Allows next handler to be scheduled */
154+
rtcb->flags &= ~TCB_FLAG_SIGDELIVER; /* Allows next handler to be scheduled */
154155

155156
/* Then restore the correct state for this thread of
156157
* execution.

arch/arm/src/armv7-r/arm_schedulesigaction.c

+3-2
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535

3636
#include "arm.h"
3737
#include "sched/sched.h"
38+
#include "signal/signal.h"
3839
#include "arm_internal.h"
3940

4041
/****************************************************************************
@@ -92,8 +93,8 @@ void up_schedule_sigaction(struct tcb_s *tcb)
9293
* REVISIT: Signal handler will run in a critical section!
9394
*/
9495

95-
(tcb->sigdeliver)(tcb);
96-
tcb->sigdeliver = NULL;
96+
nxsig_deliver(tcb);
97+
tcb->flags &= ~TCB_FLAG_SIGDELIVER;
9798
}
9899
else
99100
{

arch/arm/src/armv7-r/arm_sigdeliver.c

+6-5
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
#include <arch/board/board.h>
3838

3939
#include "sched/sched.h"
40+
#include "signal/signal.h"
4041
#include "arm_internal.h"
4142

4243
/****************************************************************************
@@ -69,9 +70,9 @@ void arm_sigdeliver(void)
6970

7071
board_autoled_on(LED_SIGNAL);
7172

72-
sinfo("rtcb=%p sigdeliver=%p sigpendactionq.head=%p\n",
73-
rtcb, rtcb->sigdeliver, rtcb->sigpendactionq.head);
74-
DEBUGASSERT(rtcb->sigdeliver != NULL);
73+
sinfo("rtcb=%p sigpendactionq.head=%p\n",
74+
rtcb, rtcb->sigpendactionq.head);
75+
DEBUGASSERT((rtcb->flags & TCB_FLAG_SIGDELIVER) != 0);
7576

7677
retry:
7778
#ifdef CONFIG_SMP
@@ -103,7 +104,7 @@ void arm_sigdeliver(void)
103104

104105
/* Deliver the signal */
105106

106-
(rtcb->sigdeliver)(rtcb);
107+
nxsig_deliver(rtcb);
107108

108109
/* Output any debug messages BEFORE restoring errno (because they may
109110
* alter errno), then disable interrupts again and restore the original
@@ -147,7 +148,7 @@ void arm_sigdeliver(void)
147148
* could be modified by a hostile program.
148149
*/
149150

150-
rtcb->sigdeliver = NULL; /* Allows next handler to be scheduled */
151+
rtcb->flags &= ~TCB_FLAG_SIGDELIVER; /* Allows next handler to be scheduled */
151152

152153
/* Then restore the correct state for this thread of execution. */
153154

arch/arm/src/armv7-r/arm_syscall.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -407,7 +407,7 @@ uint32_t *arm_syscall(uint32_t *regs)
407407

408408
/* Copy "info" into user stack */
409409

410-
if (rtcb->sigdeliver)
410+
if ((rtcb->flags & TCB_FLAG_SIGDELIVER) != 0)
411411
{
412412
usp = rtcb->xcp.saved_regs[REG_SP];
413413
}

arch/arm/src/armv8-m/arm_doirq.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ uint32_t *arm_doirq(int irq, uint32_t *regs)
9797

9898
irq_dispatch(irq, regs);
9999
#endif
100-
if (tcb->sigdeliver)
100+
if ((tcb->flags & TCB_FLAG_SIGDELIVER) != 0)
101101
{
102102
/* Pendsv able to access running tcb with no critical section */
103103

arch/arm/src/armv8-m/arm_schedulesigaction.c

+3-2
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
#include "psr.h"
3939
#include "exc_return.h"
4040
#include "sched/sched.h"
41+
#include "signal/signal.h"
4142
#include "arm_internal.h"
4243
#include "irq/irq.h"
4344
#include "nvic.h"
@@ -97,8 +98,8 @@ void up_schedule_sigaction(struct tcb_s *tcb)
9798
* REVISIT: Signal handle will run in a critical section!
9899
*/
99100

100-
(tcb->sigdeliver)(tcb);
101-
tcb->sigdeliver = NULL;
101+
nxsig_deliver(tcb);
102+
tcb->flags &= ~TCB_FLAG_SIGDELIVER;
102103
}
103104
else if (tcb == rtcb && ipsr != NVIC_IRQ_PENDSV)
104105
{

0 commit comments

Comments
 (0)