Gregory Nutt
efb86382c3
SMP: Back out deferred IRQ locking. This was accidentally merged into master and it looks like it is going to be more work than I thought to get it working again. Changes will go to the irqlock branch.
2016-12-24 19:53:37 -06:00
Gregory Nutt
3af6b2a9a6
Update a comment
2016-12-24 19:01:07 -06:00
Gregory Nutt
f55bad863b
SMP: Fix logic error in last change: Deferred restoration of IRQ lock only applies if the context switch was on this CPU.
2016-12-24 18:52:58 -06:00
Gregory Nutt
36b676eea6
SMP sched_unlock: Should merging depend on g_cpu_irqlock or not? Let's at least be consistent. And don't use irqcount; use g_cpu_irqlock.
2016-12-24 13:45:11 -06:00
Gregory Nutt
d75a7643d0
Fix a trivial typo
2016-12-23 13:01:20 -06:00
Gregory Nutt
e6fff09ef8
Implement deferred IRQ locking. So far only form ARMv7-M.
2016-12-23 07:55:41 -06:00
Gregory Nutt
d648f9c8b4
Add task_testcancel()
2016-12-10 16:34:14 -06:00
Gregory Nutt
f132960789
Add task_setcanceltype()
2016-12-10 16:06:14 -06:00
Gregory Nutt
5fb207eb36
Add task_setcancelstate()
2016-12-10 15:16:46 -06:00
Gregory Nutt
698597a838
task_delete() now obeys all cancellation point semantics.
2016-12-10 14:39:19 -06:00
Gregory Nutt
6997cda1b5
Grrr... cloned typos!
2016-12-10 09:45:55 -06:00
Gregory Nutt
842ec7e612
ifdef out some non-reachable code
2016-12-10 09:43:04 -06:00
Gregory Nutt
b52e4e5ecd
Move cancellation point definitions to their own header file.
2016-12-10 09:08:26 -06:00
Gregory Nutt
bc3ca25cc7
Cancellation points: Close up some logic to eliminte some race conditions.
2016-12-10 08:36:58 -06:00
Gregory Nutt
e62b3bccd3
pthread_setcanceltype() and pthread_testcancel() do not have to be system calls if cancellation points are not enabled.
2016-12-10 07:40:48 -06:00
Gregory Nutt
a0f567f4a3
Update TODO, cosmetic changes, spelling -- US English spells it canceled and canceling vs cancelled and cancelling. No idea why.
2016-12-09 18:39:40 -06:00
Gregory Nutt
018eb7c1d2
Cancellation points no longer depend on EXPERIMENTAL
2016-12-09 17:44:37 -06:00
Gregory Nutt
a76e729b0d
Trivial, cosmetic
2016-12-09 17:27:57 -06:00
Gregory Nutt
113d8bdcca
Fix some SMP-related compilation errors
2016-12-09 17:10:59 -06:00
Gregory Nutt
78cdc9f113
Fix a typo in a debug assertion.
2016-12-09 16:59:10 -06:00
Gregory Nutt
7ee0862e67
Merge remote-tracking branch 'origin/master' into cancelpt
2016-12-09 16:54:15 -06:00
Gregory Nutt
b07964461e
pthread_mutex_destroy(): Fix an error in destorynig a mutex which can occur after a pthread has been canceled while holding the mutex.
2016-12-09 16:53:29 -06:00
Gregory Nutt
7fce8022c6
Finishes all cancellation point logic
2016-12-09 16:50:34 -06:00
Gregory Nutt
d8783a7345
Update Documentation
2016-12-09 14:41:54 -06:00
Gregory Nutt
3eba0acb1c
More cancellation points.
2016-12-09 13:49:36 -06:00
Gregory Nutt
c9ca97b4b5
cancellation points are basically function. More tested is needed and additional cancellation points must be implemented before this can be merged back to master.
2016-12-09 12:01:18 -06:00
Gregory Nutt
018db84567
Flesh out more cancellation point logic.
2016-12-09 10:31:40 -06:00
Gregory Nutt
d35e589d56
Flesh basic cancellation point support
2016-12-09 09:44:23 -06:00
Gregory Nutt
82a79b9c1b
Add framework for cancellation point support.
2016-12-09 08:13:28 -06:00
Gregory Nutt
acaae12e8b
Add pthread_testcancel(), pthread_testcancel(), and definitiions for cancellation types.
2016-12-09 07:23:00 -06:00
Gregory Nutt
6224e47533
pthread cleanup stack: Replace critical section with sched_lock/unlock(). The cleanup stack modification only needs to have the TCB stationary. The stack is never modified from interrupt level logic
2016-12-08 14:33:02 -06:00
Gregory Nutt
ab43681f15
Update TODO and some comments.
2016-12-08 10:24:40 -06:00
Gregory Nutt
a1fbc2ad0d
pthreads: Add pthread_cleanup_push() and pthread_cleanup_pop()
2016-12-08 09:27:13 -06:00
Gregory Nutt
7632dfd6c7
Update some comments.
2016-12-08 07:52:02 -06:00
Gregory Nutt
a7b688e87b
sched notes: Add additional note to see if/when CPU is started in SMP mode.
2016-12-07 09:08:20 -06:00
Gregory Nutt
9ed0387379
Olimex-LPC1766-STK: Enable procfs in NSH configuration. Automount /proc on startup.
2016-12-05 08:52:40 -06:00
Masayuki Ishikawa
13c9031a8d
Fix DEBUGASSERT() in group_signal.c
2016-12-04 06:52:08 -06:00
Gregory Nutt
b78c3fcc30
Finish backing out previous change
2016-11-30 08:13:43 -06:00
Gregory Nutt
e6eb2e8bfa
Back out the last change. I just noticed some complexities that need to be verified before this is released onto the world.
2016-11-30 07:41:48 -06:00
Gregory Nutt
8453343426
scheduler instrumentation: Add a little more protection for the SMP case
2016-11-30 07:24:15 -06:00
Gregory Nutt
9ee3f3b933
sched_note: Permit spinlock and critical section notes in in-memory buffer iff sched_not_get() interfaces is disabled.
2016-11-28 18:36:26 -06:00
Gregory Nutt
00215fbc98
sched_note: Add spinlock instrumentation; In SMP configurations, select to log only notes from certain CPUs
2016-11-28 10:33:46 -06:00
Gregory Nutt
d65be718c2
sched_note: Extend OS instrumentation to include some SMP events.
2016-11-27 17:14:57 -06:00
Gregory Nutt
e3fe320e08
SMP: Add support for linking spinlocks into a special, non-cached memory region.
2016-11-26 08:47:03 -06:00
Gregory Nutt
1d06e786e1
SMP: Clean-up and simplication of logic that I implemented late last night.
2016-11-26 07:05:27 -06:00
Gregory Nutt
a0e1af2614
SMP: Fix yet another potential deadlock
2016-11-25 23:04:27 -06:00
Gregory Nutt
eb9f8074c0
Update comments
2016-11-24 09:56:43 -06:00
Gregory Nutt
7bec4ffeec
Update some comments
2016-11-23 17:40:01 -06:00
Gregory Nutt
d4037a30aa
Update some comments
2016-11-23 13:20:18 -06:00
Gregory Nutt
f90525a5d1
SMP: Update some comments; trivial improvement by inlining static function.
2016-11-22 16:48:57 -06:00
Gregory Nutt
bac7153609
SMP: Add logic to avoid a deadlock condition when CPU1 is hung waiting for g_cpu_irqlock and CPU0 is waitin for g_cpu_paused
2016-11-22 11:34:16 -06:00
Gregory Nutt
130bfa3f6b
Remove a assertion condition that appears to rarely cause false-alarm assertions. Teported by Petteri Aimonen
2016-11-21 14:43:56 -06:00
Gregory Nutt
558784d06f
Spinlocks: Added capability to provide architecture-specific memory barriers. This was for i.MX6 but does not help with the SMP problems. It is still a good feature.
2016-11-21 11:55:59 -06:00
Gregory Nutt
2d1765a014
Remove more of those annoying empty comment blocks.
2016-11-21 07:34:27 -06:00
Gregory Nutt
0029c04dad
task_restart: Make sure new task starts with pre-emption disabled and not in a critical section.
2016-11-21 07:33:23 -06:00
Gregory Nutt
cee8d59b58
Update TODO list
2016-11-20 12:26:08 -06:00
Gregory Nutt
e24f281401
This commit adds a new internal interfaces and fixes a problem with three APIs in the SMP configuration. The new internal interface is sched_cpu_pause(tcb). This function will pause a CPU if the task associated with 'tcb' is running on that CPU. This allows a different CPU to modify that OS data stuctures associated with the CPU. When the other CPU is resumed, those modifications can safely take place.
...
The three fixes are to handle cases in the SMP configuration where one CPU does need to make modifications to TCB and data structures on a task that could be running running on another CPU. Those three cases are task_delete(), task_restart(), and execution of signal handles. In all three cases the solutions is basically the same: (1) Call sched_cpu_pause(tcb) to pause the CPU on which the task is running, (2) perform the necessary operations, then (3) call up_cpu_resume() to restart the paused CPU.
2016-11-20 07:57:18 -06:00
Gregory Nutt
f40fbaa4b9
sched/task: task_restart() test not supported on SMP systems. This is not fully implemented.
2016-11-19 11:41:05 -06:00
Rajan Gill
0d8e191d69
sched/clock: Correct calculation for the case of Tickless mode with a 32-bit timer. In that case, the calculation was returning millisecond accuracy. That is not good when the timer accuracy is < 1 msec.
2016-11-19 09:55:21 -06:00
Gregory Nutt
5ca9128c38
Update comments
2016-11-19 08:33:55 -06:00
Gregory Nutt
ceacacbc63
vfork(): Fix a race condition in the SMP case. Existing logic depended on the fact that the child would not run until waitpid was called because the child had the same priority as the parent. BUT in the SMP case that is not true... the child may run immediately on a different CPU.
2016-11-19 07:30:01 -06:00
Gregory Nutt
69e9f8638d
Most interrupt handling logic interacts with tasks via standard mechanism such as sem_post, sigqueue, mq_send, etc. This all call enter_critical_section and are assumed to be safe in the SMP case.
...
But certain logic interacts with tasks in different ways. The only one that comes to mind are wdogs. There is a tasking interface that to manipulate wdogs, and a different interface in the timer interrupt handling logic to manage wdog expirations.
In the normal case, this is fine. Since the tasking level code calls enter_critical_section, interrupts are disabled an no conflicts can occur. But that may not be the case in the SMP case. Most architectures do not permit disabling interrupts on other CPUs so enter_critical_section must work differently: Locks are required to protect code.
So this change adds locking (via enter_critical section) to wdog expiration logic for the the case if the SMP configuration.
2016-11-18 13:57:30 -06:00
Gregory Nutt
78fd358023
Update some comments.
2016-11-18 08:20:52 -06:00
Gregory Nutt
8602e8a8a9
SMP: irq_csection() has a bad assumption. It assumed that the state of certain variables. That was true on entry into the interrupt handler, but might change to the execution of logic within the interrupt handler.
2016-11-18 07:38:16 -06:00
Gregory Nutt
8e029f019b
Update comments
2016-11-17 17:30:12 -06:00
Gregory Nutt
47b52a2633
Fix an error in manually bringing in Sebastien's changes; Update some comments.
2016-11-17 16:15:06 -06:00
Gregory Nutt
9acd57c819
Fix up some naming and update some comments.
2016-11-17 15:50:39 -06:00
Gregory Nutt
558f4049d4
sched/irq/irq_csection: Fix a bad DEBUG assertion when SMP is enabled.
2016-11-17 15:36:27 -06:00
Gregory Nutt
2c314464a8
Fix a typo in a comment
2016-11-17 08:03:45 -06:00
Gregory Nutt
ccdc11d8ff
Fix typo in variable naming. g_cpu_irqset should be g_cpu_irqlock.
2016-11-17 06:37:24 -06:00
Gregory Nutt
1c1564f0c1
Add logic to handled nested calls to enter_critical_section() from interrupts handlers (with SMP).
2016-11-16 22:45:08 -06:00
Gregory Nutt
0c3207e86e
Fix backward logic in an assertion.
2016-11-16 21:48:27 -06:00
Gregory Nutt
16f0b8fa96
Fix typos in DEBUASSERT statements
2016-11-16 19:58:51 -06:00
Gregory Nutt
f1e4951a8d
Fix some comments
2016-11-16 19:11:31 -06:00
Gregory Nutt
4ca653a1cc
Add some experimental changes to enter/leave_critical_section to deal with the case where interrupts are disabled only on the local CPU
2016-11-16 18:28:35 -06:00
Gregory Nutt
5ce3b399d5
Correct some typos in comments
2016-11-15 16:48:40 -06:00
Gregory Nutt
40d7216a22
Back out 65ab12 and parts of 21f92b
2016-11-15 15:44:43 -06:00
Gregory Nutt
6683f01444
Trivial change to comment
2016-11-15 13:38:43 -06:00
Gregory Nutt
21f92ba601
Review some SMP logic; update comments; refresh configuration.
2016-11-15 09:24:00 -06:00
Gregory Nutt
65ab12fbb9
If SMP is enabled, if any interrupt handler calls enter_critical_section(), it should take the spinlock.
2016-11-15 08:37:58 -06:00
Gregory Nutt
b53866c872
sched/irq: Change order for SMP case in enter_critical_section: Disble local interrupts BEFORE taking spinlock.
2016-11-15 07:54:18 -06:00
Freddie Chopin
484a1b6104
sem_wait() and sem_trywait() no longer modify the errno value UNLESS an error occurs. This allows these functions to be used internallly without clobbering the errno value.
2016-11-09 07:01:49 -06:00
Gregory Nutt
120d29b480
Update some Kconfig comments
2016-11-06 09:06:37 -06:00
Heesub Shin
8e94d8e7cc
Signal sent from work_signal() may interrupt the low priority worker thread that is already running. For example, the worker thread that is waiting for a semaphore could be woken up by the signal and break any synchronization assumption as a result. It also does not make any sense to send signal if it is already running and busy. This commit fixes it.
2016-11-06 08:00:12 -06:00
Gregory Nutt
796969f6b6
Update TODO. Provide do-nothing stubs for mutex attribute interfaces if features not enabled. pthread_cond includes a signaling semaphore and should call sem_setprotocol.
2016-11-05 11:06:52 -06:00
Gregory Nutt
6f1c5e7b43
Add some comments.
2016-11-05 09:44:29 -06:00
Gregory Nutt
4b0372e542
Missing # on endif
2016-11-03 21:27:52 -06:00
Gregory Nutt
73fc186beb
sem_setprotocol: Handle a case of missing proxy for sem_setprotocol. Reorder so that (1) this error is avoided, and (2) >No proxy is needed if priority inheritance is not enabled.
2016-11-03 18:51:38 -06:00
Gregory Nutt
0d5bd30943
Fix a type in include file name
2016-11-03 12:58:02 -06:00
Gregory Nutt
4c8ec0d2ca
include/nuttx/semaphore.h: Fix broken macros
2016-11-03 12:49:44 -06:00
Gregory Nutt
1da3a5fa61
sched: Disable priority inheritance on all semaphores used for signaling
2016-11-03 12:42:02 -06:00
Gregory Nutt
97bf82ee05
Semaphores: Provide macros for sem_setprotobol() and sem_getprotocol() if priority inheritance is not enabled. More SEM_PRIO_* definitions to include/nuttx/semaphore.h
2016-11-02 18:21:46 -06:00
Gregory Nutt
d5b4d848d3
Move protoypes for the non-standard include/semaphore.h file to the non-standard include/nuttx/semaphore.h with the other non-standard semaphore interfaces.
2016-11-02 14:43:03 -06:00
Gregory Nutt
b738a646ad
sem_getprotocol() can be in C library
2016-11-02 09:29:16 -06:00
Gregory Nutt
92d3022411
Add pthread_mutexattr_get/set_protocol and non-standard sem_get/set_protocol. These may use to enable or disable priority inheritance on a single semaphore.
2016-11-02 09:05:18 -06:00
Gregory Nutt
4997ec7a1e
ESP32 Core V2: Add an SMP configuration to support development (not yet usable).
2016-10-29 14:56:07 -06:00
Gregory Nutt
e6377641a8
sched/Kconfig: Add ranges to START_YEAR, MONTH, and DAY
2016-10-27 18:04:14 -06:00
Gregory Nutt
123c520db4
Correct time initialization for the case where time is initialized from settings in the .config file. The correct range for month (tm_mon) internally is 0-11, not 1-12 as it is in the .config file.
2016-10-27 08:36:24 -06:00
Gregory Nutt
6a20560ba2
Trivia fix to typo in comment
2016-10-26 12:29:36 -06:00
Gregory Nutt
3e13ed2400
Within the OS, when a thread obtains a semaphore count it must call sem_addholder() if CONFIG_PRIORITY_INHERITANCE is enabled. If a count is available, then sem_wait() calls sem_addholder(), otherwise it waited for the semaphore and called sem_addholder() when it eventually received the count.
...
This caused a problem when the thread calling sem_wait() was very low priority. When it received the count, there may be higher priority threads "hogging" the CPU that prevent the lower priority task from running and, as a result, the sem_addholder() may be delayed indefinitely.
The fix was to have sem_post() call sem_addholder() just before restarting the thread waiting for the semaphore count.
This problem was noted by Benix Vincent who also suggested the solution.
2016-10-26 07:23:15 -06:00