diff options
Diffstat (limited to 'nuttx/mm')
-rw-r--r-- | nuttx/mm/umm_addregion.c | 23 | ||||
-rw-r--r-- | nuttx/mm/umm_brkaddr.c | 23 | ||||
-rw-r--r-- | nuttx/mm/umm_calloc.c | 23 | ||||
-rw-r--r-- | nuttx/mm/umm_extend.c | 23 | ||||
-rw-r--r-- | nuttx/mm/umm_free.c | 23 | ||||
-rw-r--r-- | nuttx/mm/umm_initialize.c | 23 | ||||
-rw-r--r-- | nuttx/mm/umm_mallinfo.c | 24 | ||||
-rw-r--r-- | nuttx/mm/umm_malloc.c | 25 | ||||
-rw-r--r-- | nuttx/mm/umm_memalign.c | 23 | ||||
-rw-r--r-- | nuttx/mm/umm_realloc.c | 23 | ||||
-rw-r--r-- | nuttx/mm/umm_sbrk.c | 24 | ||||
-rw-r--r-- | nuttx/mm/umm_sem.c | 25 | ||||
-rw-r--r-- | nuttx/mm/umm_zalloc.c | 23 |
13 files changed, 243 insertions, 62 deletions
diff --git a/nuttx/mm/umm_addregion.c b/nuttx/mm/umm_addregion.c index 4293529f8..a0eb3002c 100644 --- a/nuttx/mm/umm_addregion.c +++ b/nuttx/mm/umm_addregion.c @@ -41,12 +41,29 @@ #include <nuttx/mm.h> -#ifdef CONFIG_MM_USER_HEAP +#ifdef MM_KERNEL_USRHEAP_INTF /************************************************************************ * Pre-processor definition ************************************************************************/ +#if defined(CONFIG_ARCH_ADDRENV) && defined(CONFIG_BUILD_KERNEL) +/* In the kernel build, there a multiple user heaps; one for each task + * group. In this build configuration, the user heap structure lies + * in a reserved region at the beginning of the .bss/.data address + * space (CONFIG_ARCH_DATA_VBASE). The size of that region is given by + * ARCH_DATA_RESERVE + */ + +# include <nuttx/addrenv.h> +# define USR_HEAP ((FAR struct mm_heap_s *)CONFIG_ARCH_DATA_VBASE) + +#else +/* Otherwise, the user heap data structures are in common .bss */ + +# define USR_HEAP &g_mmheap; +#endif + /************************************************************************ * Private Types ************************************************************************/ @@ -82,7 +99,7 @@ void umm_addregion(FAR void *heap_start, size_t heap_size) { - mm_addregion(&g_mmheap, heap_start, heap_size); + mm_addregion(USR_HEAP, heap_start, heap_size); } -#endif /* CONFIG_MM_USER_HEAP */ +#endif /* MM_KERNEL_USRHEAP_INTF */ diff --git a/nuttx/mm/umm_brkaddr.c b/nuttx/mm/umm_brkaddr.c index dc646f20a..8bf047c56 100644 --- a/nuttx/mm/umm_brkaddr.c +++ b/nuttx/mm/umm_brkaddr.c @@ -43,12 +43,27 @@ #include <nuttx/mm.h> -#ifdef CONFIG_MM_USER_HEAP - /**************************************************************************** * Pre-processor Definitions ****************************************************************************/ +#if defined(CONFIG_ARCH_ADDRENV) && defined(CONFIG_BUILD_KERNEL) +/* In the kernel build, there a multiple user heaps; one for each task + * group. In this build configuration, the user heap structure lies + * in a reserved region at the beginning of the .bss/.data address + * space (CONFIG_ARCH_DATA_VBASE). The size of that region is given by + * ARCH_DATA_RESERVE + */ + +# include <nuttx/addrenv.h> +# define USR_HEAP ((FAR struct mm_heap_s *)CONFIG_ARCH_DATA_VBASE) + +#else +/* Otherwise, the user heap data structures are in common .bss */ + +# define USR_HEAP &g_mmheap; +#endif + /**************************************************************************** * Public Functions ****************************************************************************/ @@ -63,7 +78,5 @@ FAR void *umm_brkaddr(int region) { - return mm_brkaddr(&g_mmheap, region); + return mm_brkaddr(USR_HEAP, region); } - -#endif /* CONFIG_MM_USER_HEAP */ diff --git a/nuttx/mm/umm_calloc.c b/nuttx/mm/umm_calloc.c index fd3ac60f2..2acf1c9d1 100644 --- a/nuttx/mm/umm_calloc.c +++ b/nuttx/mm/umm_calloc.c @@ -43,12 +43,27 @@ #include <nuttx/mm.h> -#ifdef CONFIG_MM_USER_HEAP - /**************************************************************************** * Pre-processor Definitions ****************************************************************************/ +#if defined(CONFIG_ARCH_ADDRENV) && defined(CONFIG_BUILD_KERNEL) +/* In the kernel build, there a multiple user heaps; one for each task + * group. In this build configuration, the user heap structure lies + * in a reserved region at the beginning of the .bss/.data address + * space (CONFIG_ARCH_DATA_VBASE). The size of that region is given by + * ARCH_DATA_RESERVE + */ + +# include <nuttx/addrenv.h> +# define USR_HEAP ((FAR struct mm_heap_s *)CONFIG_ARCH_DATA_VBASE) + +#else +/* Otherwise, the user heap data structures are in common .bss */ + +# define USR_HEAP &g_mmheap; +#endif + /**************************************************************************** * Public Functions ****************************************************************************/ @@ -63,7 +78,5 @@ FAR void *calloc(size_t n, size_t elem_size) { - return mm_calloc(&g_mmheap, n, elem_size); + return mm_calloc(USR_HEAP, n, elem_size); } - -#endif /* CONFIG_MM_USER_HEAP */ diff --git a/nuttx/mm/umm_extend.c b/nuttx/mm/umm_extend.c index 6e16e56f8..6982ed813 100644 --- a/nuttx/mm/umm_extend.c +++ b/nuttx/mm/umm_extend.c @@ -41,12 +41,27 @@ #include <nuttx/mm.h> -#ifdef CONFIG_MM_USER_HEAP - /**************************************************************************** * Pre-processor Definitions ****************************************************************************/ +#if defined(CONFIG_ARCH_ADDRENV) && defined(CONFIG_BUILD_KERNEL) +/* In the kernel build, there a multiple user heaps; one for each task + * group. In this build configuration, the user heap structure lies + * in a reserved region at the beginning of the .bss/.data address + * space (CONFIG_ARCH_DATA_VBASE). The size of that region is given by + * ARCH_DATA_RESERVE + */ + +# include <nuttx/addrenv.h> +# define USR_HEAP ((FAR struct mm_heap_s *)CONFIG_ARCH_DATA_VBASE) + +#else +/* Otherwise, the user heap data structures are in common .bss */ + +# define USR_HEAP &g_mmheap; +#endif + /**************************************************************************** * Public Functions ****************************************************************************/ @@ -62,7 +77,5 @@ void umm_extend(FAR void *mem, size_t size, int region) { - mm_extend(&g_mmheap, mem, size, region); + mm_extend(USR_HEAP, mem, size, region); } - -#endif /* CONFIG_MM_USER_HEAP */ diff --git a/nuttx/mm/umm_free.c b/nuttx/mm/umm_free.c index 366bf4560..e0f9f4faf 100644 --- a/nuttx/mm/umm_free.c +++ b/nuttx/mm/umm_free.c @@ -43,12 +43,27 @@ #include <nuttx/mm.h> -#ifdef CONFIG_MM_USER_HEAP - /**************************************************************************** * Pre-processor Definitions ****************************************************************************/ +#if defined(CONFIG_ARCH_ADDRENV) && defined(CONFIG_BUILD_KERNEL) +/* In the kernel build, there a multiple user heaps; one for each task + * group. In this build configuration, the user heap structure lies + * in a reserved region at the beginning of the .bss/.data address + * space (CONFIG_ARCH_DATA_VBASE). The size of that region is given by + * ARCH_DATA_RESERVE + */ + +# include <nuttx/addrenv.h> +# define USR_HEAP ((FAR struct mm_heap_s *)CONFIG_ARCH_DATA_VBASE) + +#else +/* Otherwise, the user heap data structures are in common .bss */ + +# define USR_HEAP &g_mmheap; +#endif + /**************************************************************************** * Private Functions ****************************************************************************/ @@ -68,7 +83,5 @@ void free(FAR void *mem) { - mm_free(&g_mmheap, mem); + mm_free(USR_HEAP, mem); } - -#endif /* CONFIG_MM_USER_HEAP */ diff --git a/nuttx/mm/umm_initialize.c b/nuttx/mm/umm_initialize.c index be5e74f9d..9deaf61fa 100644 --- a/nuttx/mm/umm_initialize.c +++ b/nuttx/mm/umm_initialize.c @@ -41,7 +41,7 @@ #include <nuttx/mm.h> -#ifdef CONFIG_MM_USER_HEAP +#ifdef MM_KERNEL_USRHEAP_INTF /************************************************************************ * Pre-processor definition @@ -55,9 +55,23 @@ * Public Data ************************************************************************/ -/* This is the user heap */ +#if defined(CONFIG_ARCH_ADDRENV) && defined(CONFIG_BUILD_KERNEL) +/* In the kernel build, there a multiple user heaps; one for each task + * group. In this build configuration, the user heap structure lies + * in a reserved region at the beginning of the .bss/.data address + * space (CONFIG_ARCH_DATA_VBASE). The size of that region is given by + * ARCH_DATA_RESERVE + */ + +# include <nuttx/addrenv.h> +# define USR_HEAP ((FAR struct mm_heap_s *)CONFIG_ARCH_DATA_VBASE) + +#else +/* Otherwise, the user heap data structures are in common .bss */ struct mm_heap_s g_mmheap; +#define USR_HEAP &g_mmheap; +#endif /************************************************************************ * Private Functions @@ -86,7 +100,8 @@ struct mm_heap_s g_mmheap; void umm_initialize(FAR void *heap_start, size_t heap_size) { - mm_initialize(&g_mmheap, heap_start, heap_size); + DEBUGASSERT(ARCH_DATA_RESERVE >= sizeof(struct mm_heap_s)); + mm_initialize(USR_HEAP, heap_start, heap_size); } -#endif /* CONFIG_MM_USER_HEAP */ +#endif /* MM_KERNEL_USRHEAP_INTF */ diff --git a/nuttx/mm/umm_mallinfo.c b/nuttx/mm/umm_mallinfo.c index 9ef03aec7..3a85b3229 100644 --- a/nuttx/mm/umm_mallinfo.c +++ b/nuttx/mm/umm_mallinfo.c @@ -43,12 +43,27 @@ #include <nuttx/mm.h> -#ifdef CONFIG_MM_USER_HEAP - /**************************************************************************** * Pre-processor Definitions ****************************************************************************/ +#if defined(CONFIG_ARCH_ADDRENV) && defined(CONFIG_BUILD_KERNEL) +/* In the kernel build, there a multiple user heaps; one for each task + * group. In this build configuration, the user heap structure lies + * in a reserved region at the beginning of the .bss/.data address + * space (CONFIG_ARCH_DATA_VBASE). The size of that region is given by + * ARCH_DATA_RESERVE + */ + +# include <nuttx/addrenv.h> +# define USR_HEAP ((FAR struct mm_heap_s *)CONFIG_ARCH_DATA_VBASE) + +#else +/* Otherwise, the user heap data structures are in common .bss */ + +# define USR_HEAP &g_mmheap; +#endif + /**************************************************************************** * Private Data ****************************************************************************/ @@ -75,7 +90,7 @@ struct mallinfo mallinfo(void) { struct mallinfo info; - mm_mallinfo(&g_mmheap, &info); + mm_mallinfo(USR_HEAP, &info); return info; } @@ -83,8 +98,7 @@ struct mallinfo mallinfo(void) int mallinfo(struct mallinfo *info) { - return mm_mallinfo(&g_mmheap, info); + return mm_mallinfo(USR_HEAP, info); } #endif /* CONFIG_CAN_PASS_STRUCTS */ -#endif /* CONFIG_MM_USER_HEAP */ diff --git a/nuttx/mm/umm_malloc.c b/nuttx/mm/umm_malloc.c index a2f68eca3..8a0bdfec7 100644 --- a/nuttx/mm/umm_malloc.c +++ b/nuttx/mm/umm_malloc.c @@ -44,12 +44,27 @@ #include <nuttx/mm.h> -#ifdef CONFIG_MM_USER_HEAP - /**************************************************************************** * Pre-processor Definitions ****************************************************************************/ +#if defined(CONFIG_ARCH_ADDRENV) && defined(CONFIG_BUILD_KERNEL) +/* In the kernel build, there a multiple user heaps; one for each task + * group. In this build configuration, the user heap structure lies + * in a reserved region at the beginning of the .bss/.data address + * space (CONFIG_ARCH_DATA_VBASE). The size of that region is given by + * ARCH_DATA_RESERVE + */ + +# include <nuttx/addrenv.h> +# define USR_HEAP ((FAR struct mm_heap_s *)CONFIG_ARCH_DATA_VBASE) + +#else +/* Otherwise, the user heap data structures are in common .bss */ + +# define USR_HEAP &g_mmheap; +#endif + /**************************************************************************** * Type Definitions ****************************************************************************/ @@ -103,7 +118,7 @@ FAR void *malloc(size_t size) do { - mem = mm_malloc(&g_mmheap, size); + mem = mm_malloc(USR_HEAP, size); if (!mem) { brkaddr = sbrk(size); @@ -117,8 +132,6 @@ FAR void *malloc(size_t size) return mem; #else - return mm_malloc(&g_mmheap, size); + return mm_malloc(USR_HEAP, size); #endif } - -#endif /* CONFIG_MM_USER_HEAP */ diff --git a/nuttx/mm/umm_memalign.c b/nuttx/mm/umm_memalign.c index 429b81f89..cd098d12c 100644 --- a/nuttx/mm/umm_memalign.c +++ b/nuttx/mm/umm_memalign.c @@ -43,12 +43,27 @@ #include <nuttx/mm.h> -#ifdef CONFIG_MM_USER_HEAP - /**************************************************************************** * Pre-processor Definitions ****************************************************************************/ +#if defined(CONFIG_ARCH_ADDRENV) && defined(CONFIG_BUILD_KERNEL) +/* In the kernel build, there a multiple user heaps; one for each task + * group. In this build configuration, the user heap structure lies + * in a reserved region at the beginning of the .bss/.data address + * space (CONFIG_ARCH_DATA_VBASE). The size of that region is given by + * ARCH_DATA_RESERVE + */ + +# include <nuttx/addrenv.h> +# define USR_HEAP ((FAR struct mm_heap_s *)CONFIG_ARCH_DATA_VBASE) + +#else +/* Otherwise, the user heap data structures are in common .bss */ + +# define USR_HEAP &g_mmheap; +#endif + /**************************************************************************** * Private Functions ****************************************************************************/ @@ -72,7 +87,5 @@ FAR void *memalign(size_t alignment, size_t size) { - return mm_memalign(&g_mmheap, alignment, size); + return mm_memalign(USR_HEAP, alignment, size); } - -#endif /* CONFIG_MM_USER_HEAP */ diff --git a/nuttx/mm/umm_realloc.c b/nuttx/mm/umm_realloc.c index 6791bb18b..9fdad8fee 100644 --- a/nuttx/mm/umm_realloc.c +++ b/nuttx/mm/umm_realloc.c @@ -43,12 +43,27 @@ #include <nuttx/mm.h> -#ifdef CONFIG_MM_USER_HEAP - /**************************************************************************** * Pre-processor Definitions ****************************************************************************/ +#if defined(CONFIG_ARCH_ADDRENV) && defined(CONFIG_BUILD_KERNEL) +/* In the kernel build, there a multiple user heaps; one for each task + * group. In this build configuration, the user heap structure lies + * in a reserved region at the beginning of the .bss/.data address + * space (CONFIG_ARCH_DATA_VBASE). The size of that region is given by + * ARCH_DATA_RESERVE + */ + +# include <nuttx/addrenv.h> +# define USR_HEAP ((FAR struct mm_heap_s *)CONFIG_ARCH_DATA_VBASE) + +#else +/* Otherwise, the user heap data structures are in common .bss */ + +# define USR_HEAP &g_mmheap; +#endif + /**************************************************************************** * Private Functions ****************************************************************************/ @@ -74,7 +89,5 @@ FAR void *realloc(FAR void *oldmem, size_t size) { - return mm_realloc(&g_mmheap, oldmem, size); + return mm_realloc(USR_HEAP, oldmem, size); } - -#endif /* CONFIG_MM_USER_HEAP */ diff --git a/nuttx/mm/umm_sbrk.c b/nuttx/mm/umm_sbrk.c index b404b020c..9c26a3de4 100644 --- a/nuttx/mm/umm_sbrk.c +++ b/nuttx/mm/umm_sbrk.c @@ -44,12 +44,30 @@ #include <nuttx/mm.h> #include <nuttx/pgalloc.h> -#if defined(CONFIG_MM_USER_HEAP) && defined(CONFIG_ARCH_ADDRENV) +#if defined(CONFIG_ARCH_ADDRENV) && defined(CONFIG_MM_PGALLOC) && \ + defined(CONFIG_ARCH_USE_MMU) /**************************************************************************** * Pre-processor Definitions ****************************************************************************/ +#if defined(CONFIG_ARCH_ADDRENV) && defined(CONFIG_BUILD_KERNEL) +/* In the kernel build, there a multiple user heaps; one for each task + * group. In this build configuration, the user heap structure lies + * in a reserved region at the beginning of the .bss/.data address + * space (CONFIG_ARCH_DATA_VBASE). The size of that region is given by + * ARCH_DATA_RESERVE + */ + +# include <nuttx/addrenv.h> +# define USR_HEAP ((FAR struct mm_heap_s *)CONFIG_ARCH_DATA_VBASE) + +#else +/* Otherwise, the user heap data structures are in common .bss */ + +# define USR_HEAP &g_mmheap; +#endif + /**************************************************************************** * Public Functions ****************************************************************************/ @@ -88,7 +106,7 @@ FAR void *sbrk(intptr_t incr) { - return mm_sbrk(&g_mmheap, incr, CONFIG_ARCH_STACK_NPAGES << MM_PGSHIFT); + return mm_sbrk(USR_HEAP, incr, CONFIG_ARCH_STACK_NPAGES << MM_PGSHIFT); } -#endif /* CONFIG_MM_USER_HEAP && CONFIG_ARCH_ADDRENV */ +#endif /* CONFIG_ARCH_ADDRENV && CONFIG_MM_PGALLOC && CONFIG_ARCH_USE_MMU */ diff --git a/nuttx/mm/umm_sem.c b/nuttx/mm/umm_sem.c index d390865ca..6242f1719 100644 --- a/nuttx/mm/umm_sem.c +++ b/nuttx/mm/umm_sem.c @@ -41,12 +41,27 @@ #include <nuttx/mm.h> -#ifdef CONFIG_MM_USER_HEAP - /************************************************************************ * Pre-processor definition ************************************************************************/ +#if defined(CONFIG_ARCH_ADDRENV) && defined(CONFIG_BUILD_KERNEL) +/* In the kernel build, there a multiple user heaps; one for each task + * group. In this build configuration, the user heap structure lies + * in a reserved region at the beginning of the .bss/.data address + * space (CONFIG_ARCH_DATA_VBASE). The size of that region is given by + * ARCH_DATA_RESERVE + */ + +# include <nuttx/addrenv.h> +# define USR_HEAP ((FAR struct mm_heap_s *)CONFIG_ARCH_DATA_VBASE) + +#else +/* Otherwise, the user heap data structures are in common .bss */ + +# define USR_HEAP &g_mmheap; +#endif + /************************************************************************ * Private Types ************************************************************************/ @@ -81,7 +96,7 @@ int umm_trysemaphore(void) { - return mm_trysemaphore(&g_mmheap); + return mm_trysemaphore(USR_HEAP); } /************************************************************************ @@ -102,7 +117,5 @@ int umm_trysemaphore(void) void umm_givesemaphore(void) { - mm_givesemaphore(&g_mmheap); + mm_givesemaphore(USR_HEAP); } - -#endif /* CONFIG_MM_USER_HEAP */ diff --git a/nuttx/mm/umm_zalloc.c b/nuttx/mm/umm_zalloc.c index 835841a75..0c2ddddeb 100644 --- a/nuttx/mm/umm_zalloc.c +++ b/nuttx/mm/umm_zalloc.c @@ -44,12 +44,27 @@ #include <nuttx/mm.h> -#ifdef CONFIG_MM_USER_HEAP - /**************************************************************************** * Pre-processor Definitions ****************************************************************************/ +#if defined(CONFIG_ARCH_ADDRENV) && defined(CONFIG_BUILD_KERNEL) +/* In the kernel build, there a multiple user heaps; one for each task + * group. In this build configuration, the user heap structure lies + * in a reserved region at the beginning of the .bss/.data address + * space (CONFIG_ARCH_DATA_VBASE). The size of that region is given by + * ARCH_DATA_RESERVE + */ + +# include <nuttx/addrenv.h> +# define USR_HEAP ((FAR struct mm_heap_s *)CONFIG_ARCH_DATA_VBASE) + +#else +/* Otherwise, the user heap data structures are in common .bss */ + +# define USR_HEAP &g_mmheap; +#endif + /**************************************************************************** * Public Functions ****************************************************************************/ @@ -84,8 +99,6 @@ FAR void *zalloc(size_t size) #else /* Use mm_zalloc() becuase it implements the clear */ - return mm_zalloc(&g_mmheap, size); + return mm_zalloc(USR_HEAP, size); #endif } - -#endif /* CONFIG_MM_USER_HEAP */ |