Gregory Nutt
6a3800f611
There can be a failure in IOB allocation to some asynchronous behavior caused by the use of sem_post(). Consider this scenario:
...
Task A holds an IOB. There are no further IOBs. The value of semcount is zero.
Task B calls iob_alloc(). Since there are not IOBs, it calls sem_wait(). The v
alue of semcount is now -1.
Task A frees the IOB. iob_free() adds the IOB to the free list and calls sem_post() this makes Task B ready to run and sets semcount to zero NOT 1. There is one IOB in the free list and semcount is zero. When Task B wakes up it would increment the sem_count back to the correct value.
But an interrupt or another task runs occurs before Task B executes. The interrupt or other tak takes the IOB off of the free list and decrements the semcount. But since semcount is then < 0, this causes the assertion because that is an invalid state in the interrupt handler.
So I think that the root cause is that there the asynchrony between incrementing the semcount. This change separates the list of IOBs: Currently there is only a free list of IOBs. The problem, I believe, is because of asynchronies due sem_post() post cause the semcount and the list content to become out of sync. This change adds a new 'committed' list: When there is a task waiting for an IOB, it will go into the committed list rather than the free list before the semaphore is posted. On the waiting side, when awakened from the semaphore wait, it will expect to find its IOB in the committed list, rather than free list.
In this way, the content of the free list and the value of the semaphore count always remain in sync.
2017-05-16 11:03:35 -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
d3b9f5b37f
Syslog buffering: Use IOBs to buffer data, not an on-stack buffer
2017-05-10 17:36:08 -06:00
Gregory Nutt
de6bffe713
Update some README files
2017-05-09 11:32:44 -06:00
Gregory Nutt
2043e1a114
IOBs: Move from driver/iob to a better location in mm/iob
2017-05-09 07:35:30 -06:00
Gregory Nutt
0064dc52e5
realloc(): When realloc() has to fall back to calling malloc(), size including overhead was being provided to malloc(), causing a slightly larger allocation than needed. Noted by initialkjc@yahoo.com
2017-03-28 07:23:46 -06:00
Gregory Nutt
6f1c5e7b43
Add some comments.
2016-11-05 09:44:29 -06:00
Gregory Nutt
43eb04bb8f
Without lowsyslog() *llinfo() is not useful. Eliminate and replace with *info().
2016-06-20 11:59:15 -06: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
cf4075c741
Missed macro definition in one case
2016-06-12 11:13:34 -06:00
Gregory Nutt
823b4b0cff
Forget to define an info() macro
2016-06-12 11:11:08 -06:00
Gregory Nutt
b29a4dd49c
audio/, crypto/, libnx/, and mm/: Change some err() ERRORS to warn() WARNINGS or info()
2016-06-12 09:46:23 -06:00
Gregory Nutt
a1469a3e95
Add CONFIG_DEBUG_ERROR. Change names of *dbg() * *err()
2016-06-11 15:50:49 -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
fc3540cffe
Replace all occurrences of vdbg with vinfo
2016-06-11 11:59:51 -06:00
Paul A. Patience
f8f7b7582c
Silence some warnings
2016-05-26 14:06:13 -04:00
Gregory Nutt
c4493528a1
Remove some empty file section section header comments
2016-02-17 18:57:35 -06:00
Gregory Nutt
241ab98c5b
Remove some empty file section section header comments
2016-02-17 18:31:56 -06:00
Gregory Nutt
fccef49305
Cosmetic changes to comments
2016-02-15 13:48:08 -06:00
Gregory Nutt
046e39e2c6
nuttx/mm and libc: Replace irqsave() with enter_critical_section(); replace irqrestore() with leave_critical_section()
2016-02-14 08:57:01 -06:00
Gregory Nutt
f45166af32
SMP: Fix a IDLE task semaphore operation
2016-02-12 18:03:08 -06:00
Gregory Nutt
40659d12df
Rename libxx_internal.h to libxx.h
2015-12-30 07:56:56 -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
Paul A. Patience
bfc95c641f
stdlib: Fix forgotten FARs
2015-11-18 14:22:43 -05:00
Gregory Nutt
06cd5b2fcc
mm, audio, crypto, graphics: Fix various spacing/alignment issues
2015-10-08 09:10:22 -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
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
Paul A. Patience
9f108b7b63
Fix issues detected by clang
2015-09-10 20:59:43 -04:00
Gregory Nutt
07e9a02af9
Forgot to add two files in previous commit
2015-07-10 08:46:13 -06:00
Gregory Nutt
59cc4a7a7b
Protected mode: Redesign how the user space heap is accessed from the kernel code. It used to call memory management functions in user space via function pointers in the userspace interface. That is inefficient because the first thing that those memory management functions do is to trap back into the kernel to get the current PID. Worse, that operation can be fatal is certain fragile situations such as when a task is exitting.
...
The solution is to remove all of the memory management function calls from the interface. Instead, the interface exports the userspace heap structure and then kernel size implementations of those memory management functions will operate on the userspace heap structure. This avoids the unnecessary system calls and, more importantly, failures do to freeing memory when a test exits.
2015-07-10 08:37:02 -06:00
Gregory Nutt
342f5fe33d
Fix references to the no-longer-existent misc/ directory in comments, README files, and documentation
2015-06-28 08:08:57 -06:00
Gregory Nutt
0476d8168a
More missing semicolons after DEBUGASSERT
2015-05-27 13:32:39 -06:00
Gregory Nutt
2aa80e06f5
Remove executable flag from more .c and .h files
2015-04-09 08:20:57 -06:00
Gregory Nutt
a4a6917267
Fixes some issues found by the PX4 team using Coverity. From Pavel Krienko
2015-01-19 13:01:20 -06:00
Gregory Nutt
9ac09db800
More fixes to problems noted by cppcheck. Some are kind of risky; some are real bugs.
2014-11-25 13:46:14 -06:00
Gregory Nutt
f06289e4d5
If the INTR granule allocator mode is enabled, there is no
...
semaphore to destroy. From Lorenz Meier.
2014-11-12 06:56:32 -06:00
Gregory Nutt
8634a5e41c
Fix a typo in a Kconfig file
2014-09-27 16:11:48 -06:00
Gregory Nutt
b33c2d9cef
Move include/nuttx/mm.h to include/nuttx/mm/mm.h
2014-09-24 07:29:09 -06:00
Gregory Nutt
1863370672
Move include/nuttx/shm.h to include/nuttx/mm/shm.h
2014-09-24 07:05:02 -06:00
Gregory Nutt
2fa7431ee7
Move include/nuttx/gran.h to include/nuttx/mm/gran.h
2014-09-24 06:55:26 -06:00
Gregory Nutt
0f97d81f8d
Completes the implemenation of the core shared memory logic: shmget(), shmctl(), shmat(), and shmdt(). This is still some unfinish platform-specific code that needs to be done before we can begin testing.
2014-09-23 16:07:12 -06:00
Gregory Nutt
d546ebabe4
Remove executable mode
2014-09-23 16:06:22 -06:00
Gregory Nutt
ee0d20d44c
Add interfaces to support un-initializing a granule allocator.
2014-09-23 16:05:32 -06:00
Gregory Nutt
835c91b03a
Add support for a per-process virtual page allocator. This is a new member of the task_group_s structure. The allocaor must be initialized when a new user process is started and uninitialize when the process group is finally destroyed. It is used by shmat() and shmdt() to pick the virtual address onto which to map the shared physical memory.
2014-09-23 16:04:39 -06:00
Gregory Nutt
b542d1733f
Cosmetic
2014-09-23 16:03:52 -06:00
Gregory Nutt
566dc8dd38
Add interfaces to support un-initializing a granule allocator.
2014-09-23 15:50:45 -06:00
Gregory Nutt
115634ff4d
Flesh out shmctl() logic
2014-09-23 11:41:05 -06:00
Gregory Nutt
5efd5738e9
Flesh out basic logic for shmget()
2014-09-23 10:42:18 -06:00
Gregory Nutt
a73a3ef99f
Add shared memory initializatin logic
2014-09-23 08:46:31 -06:00
Gregory Nutt
242d5f2068
Add README files and configuration support for the shared memory logic
2014-09-23 07:11:47 -06:00
Gregory Nutt
18ce64d61e
Add the build framework and skeleton files for the shared memory feature (no logic yet provided)
2014-09-22 14:53:56 -06:00
Gregory Nutt
6bed778738
Again I forget to add a file needed in a previous commit
2014-09-22 10:59:00 -06:00
Gregory Nutt
c5a206666d
Add a home for forthcoming shared memory logic
2014-09-22 10:58:27 -06:00
Gregory Nutt
3464089542
Move core heap allocator logic from mm/. to mm/mm_heap/.
2014-09-22 10:53:50 -06:00
Gregory Nutt
8b8c134efa
Move the user heap allocator front-end from mm/. to mm/umm_heap/.
2014-09-22 10:48:58 -06:00
Gregory Nutt
77bf9d6ae7
Forgot to add a file in the last commit
2014-09-22 10:43:46 -06:00
Gregory Nutt
c3a2527e56
Move the kernel heap allocator front-end from mm/. to mm/kmm_heap/.
2014-09-22 10:42:26 -06:00
Gregory Nutt
907e45752b
Move granuale allocator and page allocator from mm/. to mm/mm_gran/.
2014-09-22 10:33:23 -06:00
Gregory Nutt
5d9276ed71
More changes so that the KNSH build survives the changes needed for the ELF build
2014-09-16 15:55:21 -06:00
Gregory Nutt
925fc9ad81
First round of changes to get the ELF configuration building again
2014-09-16 15:37:05 -06:00
Gregory Nutt
8993910427
Fix a typo in use of a configuration setting
2014-09-13 12:24:08 -06:00
Gregory Nutt
205c23b9d6
Add logic to initialize the per-process user heap when each user process is started
2014-09-10 15:55:36 -06:00
Gregory Nutt
0c8830f9f3
Granule allocator initialization uses wrong allocator to setting aside kernel memory
2014-09-03 13:46:05 -06:00
Gregory Nutt
b05f29dbfe
I love/hate conditional compilation
2014-09-03 11:43:23 -06:00
Gregory Nutt
67d516d9d1
Fix several compile errors for logic added for CONFIG_BUILD_KERNEL, but which cause problems for other configurations
2014-09-03 09:21:59 -06:00
Gregory Nutt
1a4f8914c5
Add support for delivery of use-mode signals in the kernel build.
2014-09-02 15:58:14 -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
b085e084f4
Space at the beginning of the process data space is now reserved for user heap management structures. In the kernel build mode, these heap structures are shared between the kernel and use code in order to allocate user-specific data.
2014-09-02 11:21:23 -06:00
Gregory Nutt
a5af2568eb
sbrk() need to initialized the memory manager on the first call
2014-09-02 08:05:11 -06:00
Gregory Nutt
45c31d633c
Completes the implementation of sbrk() (untested)
2014-09-01 10:46:51 -06:00
Gregory Nutt
f8a8ce4b18
Initial implementatino of sbrk()
2014-09-01 07:37:54 -06:00
Gregory Nutt
205260d5e2
Reanem kzalloc to kmm_zalloc for consistency
2014-08-31 17:34:44 -06:00
Gregory Nutt
1780810d3d
Rename kmalloc to kmm_malloc for consistency
2014-08-31 17:26:36 -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
9cd1ddada4
Rename kmemalign to kmm_memalign and krealloc to kmm_realooc for consistency with other naming
2014-08-31 15:27:37 -06:00
Gregory Nutt
5a488475a8
Rename kmemalign to kmm_memalign for consitency with other naming
2014-08-31 14:57:31 -06:00
Gregory Nutt
ecdb5120dd
Add low-level memory management hooks that will be needed to support brk() and sbrk()
2014-08-31 14:42:45 -06:00
Gregory Nutt
b0246d0b7d
mm: Break up mm_user.c and mm_kernel.c into separate files for better symmetry
2014-08-31 11:46:47 -06:00
Gregory Nutt
3c1a70c9dc
Remove CONFIG_MM_MULTIHEAP. Non-multiheap operation is no longer supported
2014-08-31 10:54:55 -06:00
Gregory Nutt
0571a59e12
Need to condition out standard allocators in kernel build. More to be done
2014-08-31 08:10:15 -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
00f5e8f70e
Bugfixes.. still integrating SAMA5 ELF with address environment
2014-08-25 15:27:58 -06:00
Gregory Nutt
e1799b0423
Cortex-A/SAMA5 address environment support is code complete (untested)
2014-08-25 11:18:32 -06:00
Gregory Nutt
b028fb31e9
include/nuttx/pgalloc.h and mm/mm_pgalloc.c: Add a simple page allocator based on the existing NuttX granule allocator. I am not certain if the granule allocator is sufficiently deterministic for long range use, but it gets get a page allocator in place for testing very quickly.
2014-08-23 16:37:16 -06:00
Gregory Nutt
7cd8db9425
gran_reserve(): Add a new function to reserve unallocatable regions in the granule heap
2014-08-23 12:43:21 -06:00
Gregory Nutt
6f3cb90c05
Cosmetic changes
2014-05-28 14:09:58 -06:00
Gregory Nutt
56e5bc4268
Costmetic changes to memory manager debug output
2014-05-24 10:40:07 -06:00
Gregory Nutt
2abe0dd6dd
Change all variadic macros to C99 style
2014-05-22 09:01:51 -06:00
Gregory Nutt
3a1324741a
More trailing whilespace removal
2014-04-13 14:32:20 -06:00
Gregory Nutt
e10ab85d1d
More changes to restore the native Windows build
2014-02-07 10:14:11 -06:00
Gregory Nutt
806b01deef
16z: Fix option bits; adjust system clock frequency
2014-01-23 12:06:57 -06:00
Gregory Nutt
9f01df47ea
Create procfs_utils.c; File missed from last commit; + remove warning from mm_memalign.c (how did this work before?)
2013-12-14 08:53:23 -06:00
Gregory Nutt
0c6474cdf0
Fix some kernel-mode compilation problems
2013-12-11 16:49:48 -06:00
Gregory Nutt
78936f7260
Changes for ZDS-II ez80 build
2013-11-28 17:47:03 -06:00
Gregory Nutt
dc4c6bcb57
When creating kernel dependencies, need to define __KERNEL__
2013-09-29 15:03:10 -06:00
Gregory Nutt
c038f4efe0
Dependency generation fix for directories that keep object files in a sub-directory
2013-09-29 11:46:10 -06:00