EunBong Song
5951bcd837
Change ordering of round-robin time slice check (sched_process_scheduler()) and processing of wdog timers (wd_timer()). wd_timer()'s callback function can change current running task and, hence, must be done after the time slice check.
...
The time slice check will decrement the currently running task's time slice allotment. If such a context switch occurs, then the newly started task will lost one could of that allotment before it even has a chance to run.
2018-04-13 07:38:15 -06:00
Masayuki Ishikawa
97ca4ef956
Merged in masayuki2009/nuttx.nuttx/change_copyright (pull request #621 )
...
Change all Sony related copyright to conform with our company's internal rules.
Signed-off-by: Masayuki Ishikawa <Masayuki.Ishikawa@jp.sony.com>
Approved-by: Gregory Nutt <gnutt@nuttx.org>
2018-04-04 12:35:47 +00:00
Masayuki Ishikawa
1d958980bd
Merged in masayuki2009/nuttx.nuttx/fix_smp_bugs (pull request #615 )
...
Fix SMP related bugs
* sched/sched: Fix a deadlock in SMP mode
Two months ago, I introduced sched_tasklist_lock() and
sched_tasklist_unlock() to protect tasklists in SMP mode.
Actually, this change works pretty well for HTTP audio
streaming aging test with lc823450-xgevk.
However, I found a deadlock in the scheduler when I tried
similar aging tests with DVFS autonomous mode where CPU
clock speed changed based on cpu load. In this case, call
sequences were as follows;
cpu1: sched_unlock()->sched_mergepending()->sched_addreadytorun()->up_cpu_pause()
cpu0: sched_lock()->sched_mergepending()
To avoid this deadlock, I added sched_tasklist_unlock() when calling
up_cpu_pause() and sched_addreadytorun(). Also, added
sched_tasklist_lock() after the call.
Signed-off-by: Masayuki Ishikawa <Masayuki.Ishikawa@jp.sony.com>
* libc: Add critical section in lib_filesem.c for SMP
To set my_pid into fs_folder atomically in SMP mode,
critical section API must be used.
Signed-off-by: Masayuki Ishikawa <Masayuki.Ishikawa@jp.sony.com>
* mm: Add critical section in mm_sem.c for SMP
To set my_pid into mm_folder atomically in SMP mode,
critical section API must be used.
Signed-off-by: Masayuki Ishikawa <Masayuki.Ishikawa@jp.sony.com>
* net: Add critical section in net_lock.c for SMP
To set my pid (me) into fs_folder atomically in SMP mode,
critical section API must be used.
Signed-off-by: Masayuki Ishikawa <Masayuki.Ishikawa@jp.sony.com>
Approved-by: Gregory Nutt <gnutt@nuttx.org>
2018-03-20 12:34:38 +00:00
Gregory Nutt
149f3bd471
Standardization of some function headers.
2018-03-13 09:56:16 -06:00
Gregory Nutt
b54ffe858a
Standardization of some function headers.
2018-03-13 09:52:27 -06:00
Masayuki Ishikawa
7062ca2c03
Merged in masayuki2009/nuttx.nuttx/lc823450_smp_test (pull request #601 )
...
lc823450 smp test
* sched/clock: Replace critical section APIs with spin lock APIs in clock_gettime.c
This change will improve performance for SMP systems but nothing
changes for non-SMP systems. (Pls see include/nuttx/irq.h)
Signed-off-by: Masayuki Ishikawa <Masayuki.Ishikawa@jp.sony.com>
* sched/sched: Remove unnecessary DEBUGASSERT in sched_removereadytorun.c
In SMP mode, rtrtcb is not always at the g_readytorun.head.
This change removes DEBUGASSERT() to avoid this condition.
Signed-off-by: Masayuki Ishikawa <Masayuki.Ishikawa@jp.sony.com>
Approved-by: Gregory Nutt <gnutt@nuttx.org>
2018-02-15 14:18:25 +00:00
Gregory Nutt
cce21bef32
sched/sched: sched_lock() and sched_unlock().. back out some changes I made recently. The seemed correct but apparently not. Also reorder to logic so that g_global_lockcount is incremented for the very minimum amount of time.
2018-02-06 13:49:21 -06:00
Gregory Nutt
de34b4523f
sched/ and arch/arm/src/armv7-a: Replace a few more occurrences of this_task() with current_task(cpu) in an effort to get the i.MX6 working in SMP mode again. It does not yet work, sadly.
2018-02-06 11:17:33 -06:00
Alan Carvalho de Assis
fb50c44d08
Fix various issues noted by Coverity
2018-02-06 09:13:16 -06:00
Gregory Nutt
b884fb9fed
sched/sched: Extend the last global lock change to work with the lc823450-xgevk which does not support the atomic fetch add but does support disabling interprocessor interrupts. Disabling interprocessor interrupts will also guarantee that the TCB addres calculation is atomic.
2018-02-05 13:32:09 -06:00
Gregory Nutt
37c9b3d54a
sched/sched: Implements a global scheduler lock capability as part of SMP support. This allows the scheduler to be locked with no knowledge or access to the TCB of the currently running task. This is necessary because accessing the TCB of the currenlty running task is, itself, a non-atomic operation. This global scheduler lock cpability was add just to support that atomic access to the TCB.
2018-02-05 13:12:36 -06:00
Gregory Nutt
f51693e36a
sched/sched: Clean up some logic that I committed yesterday. Add more comments and conditional logic to clarify the issues.
2018-02-05 08:31:21 -06:00
Gregory Nutt
8a48031615
Update some comments
2018-02-05 07:58:00 -06:00
Gregory Nutt
873ffd13bc
sched/sched: Temporarily comment out some bad logic
2018-02-04 18:18:26 -06:00
Gregory Nutt
aaf1079fa7
sched/sched: Fix a typo in the previous commit
2018-02-04 18:15:45 -06:00
Masayuki Ishikawa
c8a372702a
sched/sched: SMP: Fix this_task() to be an atomic operation. In the previous implementation, this_task() was defined in sched.h by using just a macro current_task(this_cpu()). However, I found that this is not atomic and actually sometimes switching CPU happened in executing the macro when we tested audio steaming plus executing commands via telnet. This change resolves this issue by implementing atomic this_task()in sched_thistask.c which is newly introduced.
2018-02-04 16:59:09 -06:00
Gregory Nutt
fad70bf90e
Update some comments
2018-02-03 09:35:46 -06:00
Gregory Nutt
7cf88d7dbd
Make sure that labeling is used consistently in all function headers.
2018-02-01 10:00:02 -06:00
Masayuki Ishikawa
d295f11a3a
SMP: Introduce a new global IRQ clearing logic and tasklist protection.
...
The previous implementation of clearing global IRQ in sched_addreadytorun()
and sched_removereadytorun() was done too early. As a result, nxsem_post()
would have a chance to enter the critical section even nxsem_wait() is
still not in blocked state. This patch moves clearing global IRQ controls
from sched_addreadytorun() and sched_removereadytorun() to sched_resumescheduler()
to ensure that nxsem_post() can enter the critical section correctly.
For this change, sched_resumescheduler.c is always necessary for SMP configuration.
In addition, by this change, task_exit() had to be modified so that it calls
sched_resumescheduler() because it calls sched_removescheduler() inside the
function, otherwise it will cause a deadlock.
However, I encountered another DEBUGASSERT() in sched_cpu_select() during
HTTP streaming aging test on lc823450-xgevk. Actually sched_cpu_select()
accesses the g_assignedtasks which might be changed by another CPU. Similarly,
other tasklists might be modified simultaneously if both CPUs are executing
scheduling logic. To avoid this, I introduced tasklist protetion APIs.
With these changes, SMP kernel stability has been much improved.
Signed-off-by: Masayuki Ishikawa <Masayuki.Ishikawa@jp.sony.com>
2018-01-31 15:35:36 +09:00
Gregory Nutt
82982f7972
sched/: Fix several inappropriate accesses to get_errno() that were missed in previous changes (some going back to nuttx-.23). Add new nxsched_setscheduler() and nxsched_getaffinity() which are equivalent to their counterparts without the nx on front. These versions do not modify the errno value. Changed all calls within the OS to use these newer versions of the functions.
2018-01-30 16:16:41 -06:00
Gregory Nutt
170a50c690
Squashed commit of the following:
...
sched/sched: Correct some build issues introduced by last set of changes.
sched/sched: Add new internal OS function nxsched_setaffinity() that is identical to sched_isetaffinity() except that it does not modify the errno value. All usage of sched_setaffinity() within the OS is replaced with nxsched_setaffinity().
sched/sched: Internal functions sched_reprioritize() and sched_setpriority() no longer movidify the errno value. Also renamed to nxsched_reprioritize() and sched_setpriority().
sched/sched: Add new internal OS function nxsched_getscheduler() that is identical to sched_getscheduler() except that it does not modify the errno value. All usage of sched_getscheduler() within the OS is replaced with nxsched_getscheduler().
sched/sched: Add new internal OS function nxsched_setparam() that is identical to sched_setparam() except that it does not modify the errno value. All usage of sched_setparam() within the OS is replaced with nxsched_setparam().
sched/sched: Add new internal OS function nxsched_getparam() that is identical to sched_getparam() except that it does not modify the errno value (actually, the previous value erroneously neglected to set the errno value to begin with, but this fixes both issues). All usage of sched_getparam() within the OS is replaced with nxsched_getparam().
2018-01-30 11:08:18 -06:00
Gregory Nutt
12e3e47d3c
Update comments, mostly spelling errors.
2018-01-27 09:37:46 -06:00
Gregory Nutt
bcffeae4fd
Update README and some comments
2018-01-20 12:59:56 -06:00
Gregory Nutt
82cc0ead67
sched/sched: Fix some priority inheritance related issues noted during review of logic. Also add some REVISIT comments for some issues noted in the design.
2018-01-20 07:44:35 -06:00
Gregory Nutt
f012fe96cb
sched/sched/sched_sporadic.c: fix compiler error when priority inheritance is enabled. Noted by eunb.song@samsung.com
2018-01-19 08:54:29 -06:00
Masayuki Ishikawa
ab3fa89023
SMP: Introduce spin_lock_wo_note() and spin_unlock_wo_note()
...
These APIs are used in sched_note.c to protect instumentation data.
The deffrence between these APIs to exsiting spin_lock() and spin_unlock()
is that they do not perform insturumentation to avoid recursive call
when SCHED_INSTRUMENTATION_SPINLOCKS=y.
Signed-off-by: Masayuki Ishikawa <Masayuki.Ishikawa@jp.sony.com>
2018-01-17 13:29:42 +09:00
Gregory Nutt
9f80e4ccf1
sched/: Various fixes for typos, improved parameter verification.
2018-01-12 18:26:45 -06:00
Masayuki Ishikawa
27d4bb43e6
Merged in masayuki2009/nuttx.nuttx/lc823450_smp_test (pull request #557 )
...
sched/sched: Remove DEBUGASSERT() in sched_mergepending()
Because this DEBUGASSERT() assumes that while loop executes only once.
Signed-off-by: Masayuki Ishikawa <Masayuki.Ishikawa@jp.sony.com>
Approved-by: Gregory Nutt <gnutt@nuttx.org>
2017-12-18 12:09:06 +00:00
Gregory Nutt
93f7cd2d53
sched/sched/sched_cpuselect.c: For SMP, In order to find the cpu with the lowest priority thread, we have to remember the already found lowest priority. Noted by Anonymous in Issue #75
2017-11-06 13:33:46 -06:00
Gregory Nutt
9e25d89223
Squashed commit of the following:
...
Replace all usage kill() in the OS proper with nxsig_kill().
sched/signal: Add nxsig_kill() which is functionally equivalent to kill() except that it does not modify the errno variable.
2017-10-07 08:22:18 -06:00
Gregory Nutt
fdd0dcc0b6
This commit adds internal versions of the signal interfaces:
...
sigtimedwait() -> nxsig_timedwait()
sigwaitinfo() -> nxsig_waitinfo()
nanosleep() -> nxsig_nanosleep()
The internal OS versions differ from the standard application interfaces in that:
- They do not create cancellation points, and
- they do not modify the application's errno variable
Squashed commit of the following:
sched/signal: Replace all usage of sigwaitinfo(), sigtimedwait(), and nanosleep() with the OS internal counterparts nxsig_waitinfo(), nxsig_timedwait(), and nxsig_nanosleep().
sched/signal: Add nxsig_nanosleep(). This is an internal OS version of nanosleep(). It differs in that it does not set the errno varaiable and does not create a cancellation point.
sched/signal: Add nxsig_timedwait() and nxsig_waitinfo(). These are internal OS versions of sigtimedwait() and sigwaitinfo(). They differ in that they do not set the errno varaiable and they do not create cancellation points.
2017-10-06 08:28:20 -06:00
Gregory Nutt
7cc63f90d9
sched/semaphore: sem_trywait() modifies the errno value and, hence, should not be used within the OS. Use nxsem_trywait() instead.
2017-10-05 07:59:06 -06:00
Gregory Nutt
9568600ab1
Squashed commit of the following:
...
This commit backs out most of commit b4747286b1
. That change was added because sem_wait() would sometimes cause cancellation points inappropriated. But with these recent changes, nxsem_wait() is used instead and it is not a cancellation point.
In the OS, all calls to sem_wait() changed to nxsem_wait(). nxsem_wait() does not return errors via errno so each place where nxsem_wait() is now called must not examine the errno variable.
In all OS functions (not libraries), change sem_wait() to nxsem_wait(). This will prevent the OS from creating bogus cancellation points and from modifying the per-task errno variable.
sched/semaphore: Add the function nxsem_wait(). This is a new internal OS interface. It is functionally equivalent to sem_wait() except that (1) it is not a cancellation point, and (2) it does not set the per-thread errno value on return.
2017-10-04 15:22:27 -06:00
Gregory Nutt
9eebd4b0f4
sched/waitpid.c: Eliminate a warning detected by GCC 6
2017-09-15 13:04:25 -06:00
Gregory Nutt
808238c871
Update some comments.
2017-09-11 14:27:02 -06:00
Gregory Nutt
7fbceacb46
Mark an untested driver as EXPERIMENTAL in its Kconfig; Update some comments.
2017-09-11 09:35:39 -06:00
Boris Astardzhiev
087a0cf2c7
waitpid(): Corrects two problems when CONFIG_SCHED_HAVE_PARENT+CONFIG_SCHED_CHILD_STATUS are enabled: (1) Was erroring out if the waited for task had already exited, and (2) was not freeing resources when a wait was completed.
2017-09-04 17:10:37 -06:00
Arjun Hary
b274a97840
Miscellaneous fixes from astyle tool.
2017-08-14 17:19:27 -06:00
Gregory Nutt
baf4c0d011
Minor change to last PR: errno should not be modified if no error occurred.
2017-08-07 06:33:53 -06:00
Masayuki Ishikawa
4530a72379
sched/: Fix return value in sched_setaffinity()
2017-08-07 15:00:31 +09:00
Gregory Nutt
031fbfc6bc
sched/: Remove dangling space at the end of lines.
2017-06-28 13:33:04 -06:00
Gregory Nutt
2d4ba3ee3f
IEEE 802.15.4 MAC: Add list management and prioritization logic that will permit the MAC layer to support bound multiple clients.
2017-06-18 11:00:47 -06:00
Gregory Nutt
2245dddaf9
Break up some long lines
2017-06-14 13:42:56 -06:00
Gregory Nutt
0de294a586
Fix lots of occurrences of 'the the', 'the there', 'the these', 'the then', 'the they.
2017-05-11 13:35:56 -06:00
Gregory Nutt
ba12817f9c
Upate some comments
2017-05-11 13:15:31 -06:00
Gregory Nutt
d5207efb5a
Be consistent... Use Name: consistent in function headers vs Function:
2017-04-21 16:33:14 -06:00
Jussi Kivilinna
c57d49f420
clock: Add new type ssystime_t for relative 64-bit ticks, change ticks<->time conversion functions to use ssystime_t
2017-04-21 08:51:31 -06:00
Nobutaka Toyoshima
150036eb8b
sched: Fix tg_flags check with GROUP_FLAG_NOCLDWAIT
...
Jira: PDFW15IS-208
Signed-off-by: Masayuki Ishikawa <Masayuki.Ishikawa@jp.sony.com>
2017-04-14 14:50:44 +09:00
Gregory Nutt
dca77fa06a
sigtimedwait: When timer expires, up_unblock_task() is called. This is okay in the single CPU case because interrupts are disable in the timer interrupt handler. But it is insufficient in the SMP case. enter_ and leave_critical_section() must be called in order to manage spinlocks correctly.
2017-02-24 10:07:23 -06:00
Gregory Nutt
e0f199e42e
Missing semicolon in previous commit
2017-01-31 14:18:20 -06:00
Gregory Nutt
154873a3d0
Timer logic: Add private function prototypes to eliminate a warning; Functions should not be inline because the may recurse.
2017-01-31 13:45:22 -06:00
Gregory Nutt
6a4880f415
SMP: Fix timer related issues: Round robin and sporadic scheduling were only being performed for tasks running on the CPU that processes the system timer interrupt. Similary, CPU load measurements were only be processed for running on the CPU that receives the sampling interrupt.
2017-01-23 12:14:01 -06:00
Gregory Nutt
686041f8e7
CPU load: Correct computation of the nominal period to use when the source is a oneshot timer.
2017-01-22 07:12:22 -06:00
rg
1e38884088
Fix a compile error: in sched_cpuload.c:Line136, the variables ts and secs are not defined if CONFIG_CPULOAD_ONESHOT_ENTROPY = 0. However, these variables are used regardless of CONFIG_CPULOAD_ONESHOT_ENTROPY at lines~180:onwards.
2017-01-22 06:48:11 -06:00
Gregory Nutt
fba247b119
Update some comments
2017-01-13 16:32:09 -06:00
Gregory Nutt
99bb2dda5d
i.MX6: Corrects behavior of last SMP patch with i.MX6
2017-01-13 12:29:57 -06:00
Gregory Nutt
a51b5b7e17
Add REVISIT to comments.
2017-01-13 09:40:17 -06:00
Gregory Nutt
37e6e6a52e
Eliminate a warning
2017-01-13 06:56:13 -06:00
Gregory Nutt
9ce4022096
SMP: Fix an error in critical section logic when performing a context switch from an interrupt handler. The g_cpu_irqset bit was not being set for the CPU so other CPUs did not know about the critical section.
2017-01-13 06:48:10 -06:00
Masayuki Ishikawa
acbfa47f70
sched_note: Fix spinlock instrumentation
2017-01-12 08:04:28 -06:00
Gregory Nutt
04557a1198
Eliminate a warning
2016-12-31 14:47:32 -06:00
Gregory Nutt
8f716a386b
SMP: Use irq_cpu_locked() in sched_removereadytorun() and sched_setpriority()
2016-12-29 10:40:58 -06:00
Gregory Nutt
af92a67fc5
SMP: Use irq_cpu_locked() in sched_mergepending()
2016-12-29 08:53:31 -06:00
Gregory Nutt
e7d2b9f0e8
SMP: Move sharable function to common file as irq_cpu_locked(). Use irq_cpu_locked() in sched_unlock()
2016-12-29 08:17:10 -06:00
Gregory Nutt
88da65ad8a
sched_cpulocked: Avoid use of spinlock. That has been reported to cause a deadlock.
2016-12-28 12:10:17 -06:00
Gregory Nutt
72490f84e6
SMP: Make checks for CPU lock set more robust. There are certains conditions early in initialization on during interrupt handling where things need to be done a little differently.
2016-12-28 10:21:05 -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
e0f3f4ae19
Update some coments
2016-12-26 16:12:27 -06:00
Gregory Nutt
849a5dc2a9
SMP: Enforce this rule: Tasks which are normally restored when sched_unlock() is called must remain pending (1) if we are in a critical section, i.e., g_cpu_irqlock is locked , or (2) other CPUs still have pre-emption disabled, i.e., g_cpu_schedlock is locked. In those cases, the release of the pending tasks must be deferred until those conditions are met.
2016-12-26 08:15:02 -06:00
Gregory Nutt
d45a81d643
Revert "SMP: Fix a error introduced in 36b676eea6
and fully decouple disabling of pre-emption from critical sections."
...
This reverts commit 9aedf1bdec
.
2016-12-26 07:48:22 -06:00
Gregory Nutt
9aedf1bdec
SMP: Fix a error introduced in 36b676eea6
and fully decouple disabling of pre-emption from critical sections.
2016-12-25 06:54:43 -06:00
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
e6fff09ef8
Implement deferred IRQ locking. So far only form ARMv7-M.
2016-12-23 07:55:41 -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
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
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
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
eb9f8074c0
Update comments
2016-11-24 09:56:43 -06:00
Gregory Nutt
d4037a30aa
Update some comments
2016-11-23 13:20:18 -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
2d1765a014
Remove more of those annoying empty comment blocks.
2016-11-21 07:34:27 -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
05aa586aa6
sched/: Move fields related to parent/child task relationship out of TCB into group structure.
2016-09-06 08:28:31 -06:00
Gregory Nutt
858af4295c
The TCB nchildren field should not be incremented when pthreads are created.
2016-09-06 07:34:36 -06:00
Gregory Nutt
60b70f7dbb
Make xorshift128 re-entrant so that we do do have to suffer the overhad of serialization controls.
2016-08-21 07:47:53 -06:00
Gregory Nutt
300361539a
sched/sched_cpuload_oneshot: Use the oneshot timer with optional entropy to measuer cPU load if so configured.
2016-08-20 12:47:07 -06:00
Gregory Nutt
6f833be9d5
Separate XorShift128 PRNG from /dev/urandom and make it generally available.
2016-08-20 11:36:02 -06:00
Gregory Nutt
18ce4ff57b
sched/: Review and correct some stylistic inconsistencies
2016-08-07 08:25:30 -06:00
Gregory Nutt
246773faa7
Rename CONFIG_SCHED_TIMEKEEPING to CONFIG_CLOCK_TIMEKEEPING. That is a better compartmentalized name.
2016-07-11 06:54:02 -06:00
Max Neklyudov
8db29071da
timekeeping: initial implementation
2016-07-10 16:14:25 -06:00
Gregory Nutt
2a751068e6
Without lowsyslog() *llerr() is not useful. Eliminate and replace with *err().
2016-06-20 12:44:38 -06:00
Gregory Nutt
f4c47636e7
SYSLOG: Debug output from the IDLE task should be forced like interrupt level output
2016-06-20 07:35:38 -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
e99301d7c2
Rename *lldbg to *llerr
2016-06-11 14:55:27 -06:00
Gregory Nutt
86b79b33cf
Reserver the name 'err' for other purposes
2016-06-11 14:40:07 -06:00
Gregory Nutt
1cdc746726
Rename CONFIG_DEBUG to CONFIG_DEBUG_FEATURES
2016-06-11 14:14:08 -06:00
Gregory Nutt
3d87005e5a
Fix some compilation issues when certain combinations of debug options are selected.
2016-05-17 12:06:32 -06:00
Gregory Nutt
e42b3040ee
Fix some issues with the initial implementation of sched_mergeprioritized.
2016-03-24 07:52:27 -06:00
Gregory Nutt
b5afc187ee
Add file missed in last commit; sched_lock() and sched_mergepending() now use sched_mergeprioritized()
2016-03-23 08:58:48 -06:00
Gregory Nutt
4a962a36dd
Add library functions to concatenate and move lists. Add scheduler function to merge prioritized function to merge prioritized lists (not yet used).
2016-03-23 08:00:58 -06:00
Gregory Nutt
9604ea8f42
SMP: Straighten up some scheduler locking logic -- need to REVISIT
2016-03-22 13:01:47 -06:00
Gregory Nutt
3b2e94e1fd
SMP: Fix some errors when removing a trask from the assigned task list
2016-03-22 11:08:30 -06:00
Gregory Nutt
d20db82fcb
Scheduler instrumentation: Fix some associated with monitoring critical sections
2016-03-21 17:08:07 -06:00
Gregory Nutt
adf3c73219
scheduler instrumentation: Improvements to buffering logic
2016-03-21 15:40:01 -06:00
Gregory Nutt
ccbf514233
Add task state to information recorded when a task is suspended
2016-03-21 15:24:15 -06:00
Gregory Nutt
f7b58e9dfd
sched/: Move location (and form) of context switch instrumentation.
2016-03-21 14:08:31 -06:00
Gregory Nutt
242f8ff25f
drivers/syslog/note_driver.c: Add a driver that will allow an application to read buffered scheduler instrumentation data
2016-03-17 14:46:00 -06:00
Gregory Nutt
7f19631338
sched/: Add option to buffer scheduler instrumentation data in memory.
2016-03-17 09:49:43 -06:00
Gregory Nutt
d0c09771db
sched: Recent change of ASSERT to DEBUGASSERT causes a crash when debug is diabled because there is a critical function call within the assertion
2016-02-23 10:27:40 -06:00
Gregory Nutt
0fb035f76b
Standardize some naming in code section comments
2016-02-21 18:09:04 -06:00
Gregory Nutt
c929db42f9
Fix some bad SMP logic in sched_removereadytorun.c
2016-02-20 08:07:54 -06:00
Gregory Nutt
883a1adfe2
Implement sched_setaffinity() and sched_getaffinity()
2016-02-19 19:18:54 -06:00
Gregory Nutt
a633353ec3
Add a CPU affinity set to the TCB if SMP is enable and use this CPU set as a mask for determining which CPUs the thread may run on. Add an affinity field to the attrributes to permit controlling which CPUs a pthread may run on. Implements pthread_att_setaffinity_np() and pthread_attr_getaffinity_np().
2016-02-19 17:33:35 -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
1780000777
SMP: Setting bit for wrong CPU. Assertion has cause false alarm crashes..
2016-02-18 12:31:21 -06:00
Gregory Nutt
52fbbaf778
1. SMP: Fix an assertion. SMP-specific change accidentally made in non-SMP code
...
2. Move list of signal actions from the task TCB to the task group. Signal handlers are a property of the entire task group and not of individual threads in the group. I know, I preferred it the other way too but this is more compliant with POSIX.
2016-02-18 08:34:54 -06:00
Gregory Nutt
95735519dd
SMP: Cosmetic renaming to clarify functionality of SMP interfaces. Update comments.
2016-02-17 13:36:25 -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
8ac12839c3
leave_critical_section: Fix text of whether spinlock should be released or not
2016-02-17 10:55:18 -06:00
Gregory Nutt
d6912d0b00
Fix some bad conditional compilation and other typos in last commit
2016-02-16 20:11:25 -06:00
Gregory Nutt
6aeb4a52e8
Performance improvement: Idle loop should not take MM semaphore if there is not garbage to be collected. This can cause loss of performance and thrashing in tasking
2016-02-16 19:33:22 -06:00
Gregory Nutt
384e51cb05
Add some additional schedule instrumentation
2016-02-16 15:21:45 -06:00
Gregory Nutt
7f18b515f4
SMP: Fix a typo in last commit
2016-02-16 10:40:25 -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
cfcd98ca89
SMP: Used wrong point to wrong TCB
2016-02-15 11:45:34 -06:00
Gregory Nutt
8ea1bc3188
SMP: Fix backward spinlock test
2016-02-15 11:06:54 -06:00
Gregory Nutt
3c46fa3f9f
Fix a contention problem in the previous critical section design
2016-02-15 08:50:20 -06:00
Gregory Nutt
c7df82147f
SMP: First cut integration of enter/leave_critical_section and the scheduler. There are some issues.
2016-02-15 08:06:17 -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
64b3ce8775
SMP: Add up_cpustart and up_cpurestart protoypes; fix some problems in sched_addreadytorun; first cut at SMP version of up_mergepending.
2016-02-12 16:13:14 -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
7d7f4e140c
OS: Add a RUNNABLE attribute to the tasklists to indicate if the task list includes the currently executing task. Use this additional bit of information to determine if a context switch could really occur when removing a TCB from a task list
2016-02-12 08:15:16 -06:00
Gregory Nutt
76e88c8963
SMP: Removed unused macros, update comments, update sched_removereadytorun for SMP
2016-02-11 17:24:19 -06:00
Gregory Nutt
49227fa554
Scheduler: Replace the boolean 'prioritized' with a uint8_t bit set so that additional attributes of a list can be specified without adding more boolean values.
2016-02-11 08:06:33 -06:00
Gregory Nutt
292d2fe648
Correct naming of a TCB flag; update some comments
2016-02-10 16:53:34 -06:00
Gregory Nutt
96223cedf1
SMP: A little more
2016-02-10 15:43:05 -06:00
Gregory Nutt
47a5663f8c
SMP: A few preliminary data structure definitions
2016-02-10 11:45:26 -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
8f540fd81a
Trivial fix to typo in a comment
2015-12-21 22:24:43 -06:00
Gregory Nutt
c9925305b5
Same important bug as c623af03a0ee8ac041fc22051781047d6cb9cc75, but in a different location
2015-12-09 10:17:33 -06:00
Gregory Nutt
79d554939e
sched/: Fix some spacing issues
2015-10-07 19:59:14 -06:00
Gregory Nutt
af086c40ff
Remove dangling whitespace
2015-10-04 15:28:54 -06:00
Gregory Nutt
0b12dbf95d
Fix some spacing problems
2015-10-04 15:04:00 -06:00
Gregory Nutt
16b32bbadd
Standardize the width of all comment boxes in C files
2015-10-03 07:25:53 -06:00
Gregory Nutt
5b51a9fcdd
Standardize the width of all comment boxes in C files
2015-10-02 17:43:18 -06:00
Gregory Nutt
cb9e27c3b0
Standardize naming used for public data and function groupings
2015-10-02 16:30:35 -06:00
Gregory Nutt
cb2f84e288
Loosen up restriction a little in sched_ufree()
2015-09-07 15:28:58 -06:00
Gregory Nutt
d78d3ef4ab
Logic for delayed memory garbage collection for the case of user space memory will not work as implemented for the case of the kernel build. That is because the correct context is in place in order to free the user memory when sched_kufree is called, but will not be in place later when the memory garbage collection runs. If this feature is really needed, then some more substantial redesign is required
2015-09-07 14:40:18 -06:00
Paul A. Patience
3b89eabd50
Correct #if to #ifdef when the macro can be undefined. Fix bug in AT24XX driver: it should compare AT24XX_ADDRSIZE to 2.
2015-09-01 13:52:29 -04:00
Gregory Nutt
768d892188
Add si_errno to siginfo_t
2015-08-14 10:10:32 -06:00
Gregory Nutt
030573ba5c
More improvements to the sporadic scheduler
2015-08-01 09:08:48 -06:00
Gregory Nutt
5772813d29
Change the name of the local variable sigset to set to prevent name collisions with the function of the same name
2015-07-31 13:32:10 -06:00
Gregory Nutt
3a93be8902
Add strictly limit check: The current sporadic scheduler cannot handler duties > 50%
2015-07-30 07:36:01 -06:00
Gregory Nutt
a6ccb7f308
Sporadic scheduler: Third design. Now it looks closer to what I want
2015-07-28 14:26:31 -06:00
Gregory Nutt
dd5b065753
Sporadic: This interim version works pretty well, but the things that I had to do were nasty and mean that -- sigh -- there will be another redesign coming
2015-07-28 08:03:40 -06:00
Gregory Nutt
95ca3a1d1e
Fixes several more sporadic scheduler bugs
2015-07-27 18:08:21 -06:00
Gregory Nutt
a7322f5a6d
Sporadic scheduler: Fix how suspension time is calculated
2015-07-27 15:54:19 -06:00
Gregory Nutt
e33c727520
Sporadic scheduler: Move pending time into each timer instance
2015-07-27 14:48:21 -06:00
Gregory Nutt
e66e2f5c0f
Use the last budgeted time from the last timer started
2015-07-27 13:13:30 -06:00
Gregory Nutt
8c754ccd4f
Sporadic scheduler: misc bug fixes
2015-07-27 11:55:52 -06:00
Gregory Nutt
cc1c7731da
Sporadic scheduler: Fix budget computations when replenishment intervals are nested
2015-07-27 09:35:52 -06:00
Gregory Nutt
484f148001
Sporadic scheduler: Add instrumentation hooks to support GPIO outputs
2015-07-27 08:37:25 -06:00
Gregory Nutt
7c04ad8209
Sporadic scheduler: Cosmetic change to debug output and to comments
2015-07-26 15:33:27 -06:00
Gregory Nutt
99664b7811
Sporadic scheduler: Add logic to collection the partial timer expiration when a sporadic thread is suspended in tickless mode
2015-07-26 15:03:47 -06:00
Gregory Nutt
4bdbc387f5
Update TODO list; Fix a few errors introduced withe the last changes to the sporadic scheduler
2015-07-26 10:51:04 -06:00
Gregory Nutt
3e88b77540
Sporadic scheduler: Handle a case when the scheduler is resumed before it has even had a chance to run
2015-07-26 08:08:45 -06:00
Gregory Nutt
26fd7a7ccf
The redesigned sporadic scheduler now seems to be functional
2015-07-25 13:22:46 -06:00
Gregory Nutt
27e21710fd
This is basically a complete redesign of the sporadic scheduling logic due to limitations in the initial design
2015-07-25 12:50:53 -06:00
Gregory Nutt
a1031417e8
Comment out part of sporadic scheduler logic: Part of replenishment logic is bogus
2015-07-24 18:18:58 -06:00
Gregory Nutt
1d88dc1fb6
Fix some compilation error when both TICKLESS mode and the SPORADIC scheduler are enabled
2015-07-24 14:35:07 -06:00
Gregory Nutt
411941d8cd
Fix an syntax error in a debug asserion
2015-07-24 13:02:19 -06:00
Gregory Nutt
12cdd2a8fe
Fix some bad conditional compilation
2015-07-24 12:27:15 -06:00
Gregory Nutt
0d71260bf2
sched/: Separate the round-robin logic into a separate file so that it is symmetric with the sporadic stuff. Integrate the sporadic scheduler into the time tick interrupt handling and into the tickless operation.
2015-07-24 11:49:28 -06:00
Gregory Nutt
c6c424583d
Fix a test for valid scheduling policies
2015-07-24 10:20:22 -06:00
Gregory Nutt
4490744def
Add logic to reset the replenish the sporadic scheduler when a task is resumed
2015-07-24 09:55:02 -06:00
Gregory Nutt
ea7dbc984b
Add basic sporadic schedule state machine
2015-07-24 09:03:21 -06:00
Gregory Nutt
3b1306078b
Sporadic Scheduler: Ensure that the replenishment period is greater than or equal to the budget period
2015-07-23 15:08:41 -06:00
Gregory Nutt
5baa738019
Most cosmetic, but includes some fixes to some range checking
2015-07-23 14:36:49 -06:00
Gregory Nutt
53a17bfd99
Fix a newly introduced compilation error when round roben scheduling is disabled
2015-07-23 13:35:48 -06:00
Gregory Nutt
9095e8eab4
include/, sched/, and libc/: Add support for sporadic scheduling parameters in struct sched_param, posix_spawnattr_t, and pthread_attr_t. Update all user interfaces to pass sporadic scheduling parameters. Feature is dependent on EXPERIMENTAL and no changes have yet been made to core scheduling logic.
2015-07-23 13:16:32 -06:00
Gregory Nutt
146bdc3c93
TCB: Increase the size of the scheduling policy field from 1 to 2 bits to allow additional, planned scheduling policies
2015-07-23 10:15:07 -06:00
Gregory Nutt
e69d14d89b
Fix some warnings/errors detected by nuttx/tools/testbuilds.sh
2015-07-10 18:41:26 -06:00
Max Neklyudov
14e742b108
Implement WNOHANG for waitpid() only and for the case of CONFIG_SCHED_HAVE_PARENT not selected. From Max Neklyudov.
2015-07-02 09:34:58 -06:00
Gregory Nutt
b4423c1eed
Make some file section headers more consistent with standard
2015-04-08 06:47:36 -06:00
Gregory Nutt
af6d9e2684
sched: Do not use uninitialized boolean in waitpid(). From Juha Niskanen
2015-03-12 07:45:10 -06:00
Gregory Nutt
1d534ff896
Convert the 64-bit usec limit to a 32-bit tick limit
2015-02-03 07:18:17 -06:00
Gregory Nutt
a448e0f69f
On my platform I have just 16-bit timer clocked at 32kHz. As result oneshot timer max delay is 2s. The patch adds limit of maximum ticks in sched_timer_start (nuttx/sched/sched/sched_timerexpiration.c). From Macs N.
2015-02-03 06:25:19 -06:00
Gregory Nutt
1aa528a572
More fixes to problems noted by cppcheck. Some are kind of risky; some are real bugs.
2014-11-25 14:10:35 -06:00
Gregory Nutt
2da26f7884
More fixes to tickless operation, alarm/mode code. From Brandon Warhurst
2014-10-23 07:13:57 -06:00
Gregory Nutt
a7a5c8cff3
Fixes to tickless operation code. From Brandon Warhurst
2014-10-23 06:41:31 -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
1f2cc9f4fe
Complete re-implementation of mq_close
2014-09-29 15:33:34 -06:00
Gregory Nutt
701719b2ca
Don't release user stack in kernel build. Already destroyed with all of the address environment
2014-09-15 12:45:41 -06:00
Gregory Nutt
3649dab9bd
Initial integration of kernel stack (does not work)
2014-09-14 11:19:34 -06:00
Gregory Nutt
b4438e44c5
Restructuring of build to allow use of use-space allocators by kernel logic in the kernel build.
2014-09-02 11:22:09 -06:00
Gregory Nutt
64ab35b399
There used to be two ways to pass parameters to new tasks, depending upon the configuration: Either (1) argv[] as created as an array with each string strdup'ed. Or (1) argv[] array and strings were created on the stack before the new task was started. Now, there is only one way, way (1). Way (2) might be slightly more compact, but this is not worth carry the complexity of two different ways of doing the same thing.
2014-09-01 15:39:34 -06:00
Gregory Nutt
23147c40a5
Remove final traces of the 8015 from the NuttX source tree
2014-09-01 13:21:15 -06:00
Gregory Nutt
54fa3b0b59
Rename kfree to kmm_free for consistency with other naming conventions
2014-08-31 17:04:02 -06:00
Gregory Nutt
9ad7dae4c1
Rename kufree to kumm_free for consistency with other naming
2014-08-31 16:15:11 -06:00
Gregory Nutt
2904fb0420
Clean up some kernel build heap allocation issues. The Cortex-A kernel build now compiles without errors (but cannot link until brk() and sbrk() are implemented).
2014-08-31 12:50:05 -06:00
Gregory Nutt
e3ff0689bb
Rename CONFIG_NUTTX_KERNEL to CONFIG_BUILD_PROTECTED; Partially integrate new CONFIG_BUILD_KERNEL
2014-08-29 14:47:22 -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
1624e2fbcf
Change CONFIG_ADDRENV to CONFIG_ARCH_ADDRENV; change how it is selected -- the architecure must first declare support
2014-08-24 06:42:11 -06:00
Gregory Nutt
e79d6e3c8b
A few fixes for compilation errors due to recent address environment fixes
2014-08-22 15:55:00 -06:00
Gregory Nutt
1d586e6136
An address environment is the property of a task group, not of a thread
2014-08-22 12:32:34 -06:00
Gregory Nutt
569a0815ca
Updated comments
2014-08-12 13:50:18 -06:00
Gregory Nutt
6546fa39c7
Tickless Stuff: Back out the risky timer operations when the ready-to-run list is modified. That is unsafe. An ugly workaround is just to keep an interval timer going all of the time with a minimum duration equal to the timeslice interval.
2014-08-12 11:12:00 -06:00
Gregory Nutt
686e5d7e3d
Tickless: If using an ALARM, then really should report time of expiration
2014-08-12 10:00:32 -06:00
Gregory Nutt
e1fc925705
Minor update to handling of timeslick delay on tast switches
2014-08-11 15:07:15 -06:00
Gregory Nutt
56196ecea1
Fix a computation error in the fix for the last computational error
2014-08-11 12:07:49 -06:00
Gregory Nutt
b4bbe354fd
Fix inaccurate time conversion. Remove MSEC_PER_TICK and convert uint32_t to uin64_t.
2014-08-11 11:14:40 -06:00
Gregory Nutt
649ef76f71
Timers: In Tickless mode, need to stop the interval timer before inserted a new delay into the timer list. Otherwise, the time is incorrect on the first entry of the list
2014-08-11 08:25:25 -06:00
Gregory Nutt
f2058fa271
Comment out reassessment of timer in the middle of context switches. Need to revisit
2014-08-11 07:05:47 -06:00
Gregory Nutt
1f28365f55
Part of the last incomplete change
2014-08-08 17:45:54 -06:00
Gregory Nutt
ccf4ed2148
Partial (non-working) checked in before the big, risky automated change
2014-08-08 17:29:44 -06:00