David Sidrane
3cc2a4f7c9
sem_holder: Fixes improper restoration of base_priority
...
in the case of CONFIG_SEM_PREALLOCHOLDERS=0
The call to sem_restorebaseprio_task context switches in the
sem_foreachholder(sem, sem_restoreholderprioB, stcb); call
prior to releasing the holder. So the running task is left
as a holder as is the started task. Leaving both slots filled
Thus failing to perforem the boost/or restoration on the
correct tcb.
This PR fixes this by releasing the running task slot prior
to reprioritization that can lead to the context switch.
To faclitate this, the interface to sem_restorebaseprio
needed to take the tcb from the holder prior to the
holder being freed. In the failure case where sched_verifytcb
fails it added the overhead of looking up the holder.
There is also the adfitinal thunking on the foreach to
get from holer to holder->tcb.
An alternate approach could be to leve the interface the same
and allocate a holder on the stack of sem_restoreholderprioB
copy the sem's holder to it, free it as is done in this pr
and and then pass that address sem_restoreholderprio as the
holder. It could then get the holder's tcb but we would
keep the same sem_findholder in sched_verifytcb.
2017-03-15 17:12:45 -10:00
David Sidrane
caf8bac7fb
missing semi
2017-03-13 22:54:13 +00:00
David Sidrane
d66fd9f965
semaphore:sem_boostholderprio prevent overrun of pend_reprios
...
The second case rtcb->sched_priority <= htcb->sched_priority
did not check if there is sufficient space in the pend_reprios
array.
2017-03-13 12:34:39 -10:00
David Sidrane
3c00651cfe
semaphore:sem_holder sem_findholder missing inintalization of pholder
...
sem_findholder would fail and code optimization coverd this up.
2017-03-13 11:56:31 -10:00
David Sidrane
4d760c5ea4
semaphore:sem_holder add DEBUGASSERT s
2017-03-13 10:46:26 -10:00
Gregory Nutt
399f306744
A few cosmetic changes
2017-03-11 08:58:42 -06:00
David Sidrane
6cc8f9100b
Priority Inversion fixes:typo
2017-03-10 06:37:46 -10:00
Gregory Nutt
360539afac
Priority inheritance: When CONFIG_SEM_PREALLOCHOLDERS==0, there is only a single, hard-allocated holder structure. This is problem because in sem_wait() the holder is released, but needs to remain in the holder container until sem_restorebaseprio() is called. The call to sem_restorebaseprio() must be one of the last things the sem_wait() does because it can cause the task to be suspended. If in sem_wait(), a new task gets the semaphore count then it will fail to allocate the holder and will not participate in priority inheritance. This fix is to add two hard-allocated holders in the sem_t structure: One of the old holder and one for the new holder.
2017-03-10 09:30:15 -06:00
Gregory Nutt
a93e46d00c
Cosmetic
2017-03-10 08:54:50 -06:00
Gregory Nutt
74189d84e2
Cancellation points: Fix some backward logic in conditional compilation.
2017-02-02 06:42:41 -06:00
Gregory Nutt
cfb876263a
SMP: There were certain conditions that we must avoid by preventing releasing the pending tasks while withn a critical section. But this logic was incomplete; there was no logic to prevent other CPUs from adding new, running tasks while on CPU is in a critical section.
...
This commit corrects this. This is matching logic in sched_addreadytorun to avoid starting new tasks within the critical section (unless the CPU is the holder of the lock). The holder of the IRQ lock must be permitted to do whatever it needs to do.
2016-12-27 08:49:07 -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
7fce8022c6
Finishes all cancellation point logic
2016-12-09 16:50:34 -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
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
e3fe320e08
SMP: Add support for linking spinlocks into a special, non-cached memory region.
2016-11-26 08:47:03 -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
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
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
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
4c8ec0d2ca
include/nuttx/semaphore.h: Fix broken macros
2016-11-03 12:49:44 -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
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
Paul A. Patience
891113dac9
sched/semaphore: Fix setting EINVAL in sem_post() and sem_wait()
2016-06-28 10:15:52 -04:00
Gregory Nutt
0c8c7fecf0
Add _ to the beginning of all debug macros to avoid name collisions
2016-06-16 12:33:32 -06:00
Gregory Nutt
13cac3b592
sched/: Change some *err() message to *info() messages if what was a *dbg() message does not indicate and error condition.
2016-06-11 16:42:42 -06:00
Gregory Nutt
a1469a3e95
Add CONFIG_DEBUG_ERROR. Change names of *dbg() * *err()
2016-06-11 15:50:49 -06:00
Gregory Nutt
1cdc746726
Rename CONFIG_DEBUG to CONFIG_DEBUG_FEATURES
2016-06-11 14:14:08 -06:00
Gregory Nutt
9b5e88af71
Update some comments
2016-03-06 13:50:26 -06:00
Gregory Nutt
5d63cd85c7
sched/semaphore: Add an internal interface to reset a semaphore count.
2016-03-05 07:33:24 -06:00
Gregory Nutt
72d3920295
Rename cpuset_t to cpu_set_t which is the type used in some non-standard Linux/GNU interfaces. Move definitions of cpu_set_t to include/sys/types.h. Add prototypes for sched_setaffinity(), sched_getaffinity(), pthread_attr_setaffinity_np(), pthread_attr_getaffinity_np(), pthread_setaffinity_np(), and pthread_getaffinity_np(). No implementation is yet in place.
2016-02-19 15:57:07 -06:00
Gregory Nutt
6543c570d4
Remove some empty file section section header comments
2016-02-17 17:38:39 -06:00
Gregory Nutt
b50325bb38
SMP: Add funtions to perform atomic bit set/clear operations; fix two errors in SMP macros
2016-02-17 13:20:01 -06:00
Gregory Nutt
a442245479
SMP: Fix some non-SMP errors that crept in; fix a recursion problem; re-partition some functionality to improve design and readability
2016-02-16 10:14:33 -06:00
Gregory Nutt
9cb2a6b1f9
Rename irqsave() and irqrestore() to up_irq_save() and up_irq_restore()
2016-02-14 16:19:15 -06:00
Gregory Nutt
6e3107650d
nuttx/sched: Replace irqsave() with enter_critical_section(); replace irqrestore() with leave_critical_section()
2016-02-14 08:17:46 -06:00
Gregory Nutt
97cbd7112f
SMP: Implement enter/leave_critical_section
2016-02-13 10:23:16 -06:00
Gregory Nutt
3f7f58de9d
SMP: Fix some debug assertion problems when DEBUG is enabled; Partial fix for one bring-up issue
2016-02-12 17:13:38 -06:00
Gregory Nutt
85f663a8ee
SMP: Add non-reentrant spinlocks, fix pre-emption controls with SMP, and most of the basic scheduler support for SMP (still missing a few things)
2016-02-12 14:55:31 -06:00
Gregory Nutt
3147dfc7d5
SMP: Add some tentative initialization logic
2016-02-10 13:49:27 -06:00
Gregory Nutt
f5a3b1e89d
Add EXPERIMENTAL configuration option to investigate some SMP issues
2016-02-10 10:27:48 -06:00
Gregory Nutt
bf8120d51d
Fix some odd logic in CC3000 semaphore handling. Noted by Vladimir Komendantskiy
2016-02-10 09:50:28 -06:00
Gregory Nutt
2c0ad2564f
Add CONFIG_SPINLOCK. Also need spinunlock() and spinlock_initialize()
2016-02-09 15:31:14 -06:00
Gregory Nutt
74db48202e
sched/: Replace explict references to g_readytorun with indirect references via the this_task() macro
2016-02-06 17:44:41 -06:00
Gregory Nutt
f348e68069
Update to use 64-bit timer when available
2016-01-21 11:54:26 -06:00
Gregory Nutt
b90da3f27b
waitpid: CRITICAL BUGFIX. Add a reference counting mechansim to prevent wait from using stale memory that was freed by the exiting task
2015-12-22 11:48:17 -06:00
Gregory Nutt
79d554939e
sched/: Fix some spacing issues
2015-10-07 19:59:14 -06:00
Gregory Nutt
0b12dbf95d
Fix some spacing problems
2015-10-04 15:04:00 -06:00
Gregory Nutt
cb9e27c3b0
Standardize naming used for public data and function groupings
2015-10-02 16:30:35 -06:00
Paul A. Patience
9f108b7b63
Fix issues detected by clang
2015-09-10 20:59:43 -04:00
Sebastien Lorquet
89c81f6c08
FIX typo in DEBUASSERTion
2015-08-03 09:14:15 -06:00
Gregory Nutt
15db2a45a4
drivers/net/slip.c: Fix another compilation error
2015-08-02 07:20:36 -06:00
Gregory Nutt
3a109315ed
Fix a logic error in last change to sem_tickwait()
2015-08-01 16:00:23 -06:00
Gregory Nutt
ffec6124f2
Add a start time to sem_tickwait() to account for any elapsed time before the timer is actually started
2015-08-01 14:57:31 -06:00
Gregory Nutt
12cbe147a0
Forget to add files before last commit
2015-08-01 07:34:27 -06:00
Gregory Nutt
2c66e0eb2a
sem_tickwait(): Add a new, non-standard function to perform timed semaphore waits. It is functionally equialent to the standard sem_timedwait(), but more efficient for use in higher performance device drivers. Requested by Max Neklyudov
2015-08-01 07:31:09 -06:00
Gregory Nutt
3adcae8ffb
Update the type passed to watchdog timer handlers. Using uint32_t is a problem for 64-bit machines.
2015-05-18 08:53:42 -06:00
Gregory Nutt
071658bb6d
Another missing semicolon
2015-04-23 07:18:59 -06:00
Gregory Nutt
093a144934
sem_wait(): Missing comma on debug statement caused compile error with DEBUG on. Why hasn't that been noted before?
2015-04-23 07:15:55 -06:00
Gregory Nutt
b4423c1eed
Make some file section headers more consistent with standard
2015-04-08 06:47:36 -06:00
Gregory Nutt
127951e029
Fix places where the errno value was being overwritten by subsequent actions so that the returned errno value was incorrect. From Max Neklyudov.
2015-02-25 07:45:04 -06:00
Gregory Nutt
cded7ea682
Fix some time value changes; mostly changing greater than 1000000000 to greater than or equal to 1000000000. From Juha Niskanen
2015-02-20 07:07:36 -06:00
Gregory Nutt
826f5516ff
Semaphores: sem_waitirq.c must be built when signals are disabled. That is because not handles not only the case of semaphore wait being awakened by a signal, but also the case with sem_timedwait.c when the semaphore wait is awakened by a timeout.
2014-12-28 15:03:12 -06:00
Gregory Nutt
78b755961f
Semahores: Remove a warning with SIGNALS are disabled
2014-12-28 14:54:40 -06:00
Gregory Nutt
b3a1939020
Sempahores: Add logic to clean up after task_delete() or pthread_cancel() if the task happens to be waiting on a semaphore when it is cancelled
2014-12-13 12:02:25 -06:00
Gregory Nutt
fcc2a1bb4b
Fix incorrect comment
2014-11-07 15:54:24 -06:00
Gregory Nutt
322f9f401c
Simplify how C source files are selected in the build
2014-10-07 07:42:36 -06:00
Gregory Nutt
38ddbc774f
Cosmetic change to comments
2014-10-06 18:03:01 -06:00
Gregory Nutt
8c958be5ab
Semaphore initialization is now only required if priority inheritance is initialized
2014-09-29 06:50:48 -06:00
Gregory Nutt
650a0d0615
Completes VFS-based named semaphore implemetation. Still a little buggy
2014-09-28 15:58:56 -06:00
Gregory Nutt
a41c1de32c
Add basic data structures that will allow us to move named semaphore support out of the OS and into the VFS (not complete).
2014-09-28 10:15:33 -06:00
Gregory Nutt
1780810d3d
Rename kmalloc to kmm_malloc for consistency
2014-08-31 17:26:36 -06:00
Gregory Nutt
0ab1b0de25
nuttx/sched: Remove explicit references to errno. That is a problem from within the kernel for certain configurations
2014-08-28 17:00:24 -06:00
Gregory Nutt
ad9b3f8ab8
wdog.h does not contain any application interface, only internal OS interface. Further, it is non-standard. Move wdog.h from include/ to include/nuttx. For the same reason, move the description of the watchdog timer interfaces from the Users Guide to the Porting Guide.
2014-08-21 11:16:55 -06:00
Gregory Nutt
e1769b22f1
Remove os_internal.h it has been replace by several new header files under sched/. There have been some sneak inclusion paths via os_internal.h, so expect a few compilation errors for some architectures
2014-08-08 18:39:28 -06:00
Gregory Nutt
d798dd37a7
Replace os_internal.h with sched/sched.h in files that actually reference something in sched.h
2014-08-08 17:53:55 -06:00
Gregory Nutt
d4b56eb3cc
Move clock functions from sched/ to sched/clock
2014-08-08 14:43:02 -06:00
Gregory Nutt
0f318e9249
Move watchdog functions from sched/ to sched/wdog
2014-08-08 14:21:48 -06:00
Gregory Nutt
e10a23ae50
Move environment files from sched/ to sched/environ
2014-08-08 13:53:29 -06:00