Changeset b60615b in mainline
- Timestamp:
- 2018-11-13T16:48:08Z (6 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 71fb5ac
- Parents:
- 159c1525
- git-author:
- Jiří Zárevúcky <zarevucky.jiri@…> (2018-11-11 17:03:50)
- git-committer:
- Jiří Zárevúcky <zarevucky.jiri@…> (2018-11-13 16:48:08)
- Location:
- kernel
- Files:
-
- 1 added
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/Makefile
r159c1525 rb60615b 94 94 -fdebug-prefix-map=$(realpath $(ROOT_PATH))=. 95 95 96 GCC_CFLAGS = -std=gnu 99-Wall -Wextra -Wno-unused-parameter \96 GCC_CFLAGS = -std=gnu11 -Wall -Wextra -Wno-unused-parameter \ 97 97 -Wmissing-prototypes -Werror-implicit-function-declaration \ 98 98 -Wwrite-strings -pipe -Wno-cast-function-type 99 99 100 CLANG_CFLAGS = -std=gnu 99-Wall -Wextra -Wno-unused-parameter \100 CLANG_CFLAGS = -std=gnu11 -Wall -Wextra -Wno-unused-parameter \ 101 101 -Wno-missing-field-initializers -Wno-unused-command-line-argument \ 102 102 -Wmissing-prototypes -Werror-implicit-function-declaration \ … … 197 197 generic/src/mm/tlb.c \ 198 198 generic/src/mm/as.c \ 199 generic/src/mm/malloc.c \ 199 200 generic/src/mm/backend_anon.c \ 200 201 generic/src/mm/backend_elf.c \ -
kernel/generic/include/bitops.h
r159c1525 rb60615b 36 36 #define KERN_BITOPS_H_ 37 37 38 #include <stdint.h> 38 39 #include <trace.h> 39 40 -
kernel/generic/include/main/main.h
r159c1525 rb60615b 48 48 extern void main_ap(void); 49 49 50 extern void malloc_init(void); 51 50 52 #endif 51 53 -
kernel/generic/include/mm/slab.h
r159c1525 rb60615b 40 40 #include <atomic.h> 41 41 #include <mm/frame.h> 42 43 /** Minimum size to be allocated by malloc */44 #define SLAB_MIN_MALLOC_W 445 46 /** Maximum size to be allocated by malloc */47 #define SLAB_MAX_MALLOC_W 2248 42 49 43 /** Initial Magazine size (TODO: dynamically growing magazines) */ -
kernel/generic/src/main/main.c
r159c1525 rb60615b 246 246 frame_init(); 247 247 slab_cache_init(); 248 malloc_init(); 248 249 ra_init(); 249 250 sysinfo_init(); -
kernel/generic/src/mm/slab.c
r159c1525 rb60615b 138 138 static slab_cache_t *slab_extern_cache; 139 139 140 /** Caches for malloc */141 static slab_cache_t *malloc_caches[SLAB_MAX_MALLOC_W - SLAB_MIN_MALLOC_W + 1];142 143 static const char *malloc_names[] = {144 "malloc-16",145 "malloc-32",146 "malloc-64",147 "malloc-128",148 "malloc-256",149 "malloc-512",150 "malloc-1K",151 "malloc-2K",152 "malloc-4K",153 "malloc-8K",154 "malloc-16K",155 "malloc-32K",156 "malloc-64K",157 "malloc-128K",158 "malloc-256K",159 "malloc-512K",160 "malloc-1M",161 "malloc-2M",162 "malloc-4M"163 };164 165 140 /** Slab descriptor */ 166 141 typedef struct { … … 775 750 panic("Destroying cache that is not empty."); 776 751 777 if (!(cache->flags & SLAB_CACHE_NOMAGAZINE)) { 778 slab_t *mag_slab = obj2slab(cache->mag_cache); 779 _slab_free(mag_slab->cache, cache->mag_cache, mag_slab); 752 if (!(cache->flags & SLAB_CACHE_NOMAGAZINE) && cache->mag_cache) { 753 slab_free(&slab_mag_cache, cache->mag_cache); 780 754 } 781 755 … … 914 888 NULL, NULL, SLAB_CACHE_SLINSIDE | SLAB_CACHE_MAGDEFERRED); 915 889 916 /* Initialize structures for malloc */917 size_t i;918 size_t size;919 920 for (i = 0, size = (1 << SLAB_MIN_MALLOC_W);921 i < (SLAB_MAX_MALLOC_W - SLAB_MIN_MALLOC_W + 1);922 i++, size <<= 1) {923 malloc_caches[i] = slab_cache_create(malloc_names[i], size, 0,924 NULL, NULL, SLAB_CACHE_MAGDEFERRED);925 }926 927 890 #ifdef CONFIG_DEBUG 928 891 _slab_initialized = 1; … … 961 924 } 962 925 963 void *malloc(size_t size)964 {965 assert(_slab_initialized);966 assert(size <= (1 << SLAB_MAX_MALLOC_W));967 968 if (size < (1 << SLAB_MIN_MALLOC_W))969 size = (1 << SLAB_MIN_MALLOC_W);970 971 uint8_t idx = fnzb(size - 1) - SLAB_MIN_MALLOC_W + 1;972 973 return slab_alloc(malloc_caches[idx], FRAME_ATOMIC);974 }975 976 void *realloc(void *ptr, size_t size)977 {978 assert(_slab_initialized);979 assert(size <= (1 << SLAB_MAX_MALLOC_W));980 981 void *new_ptr;982 983 if (size > 0) {984 if (size < (1 << SLAB_MIN_MALLOC_W))985 size = (1 << SLAB_MIN_MALLOC_W);986 uint8_t idx = fnzb(size - 1) - SLAB_MIN_MALLOC_W + 1;987 988 new_ptr = slab_alloc(malloc_caches[idx], FRAME_ATOMIC);989 } else990 new_ptr = NULL;991 992 if ((new_ptr != NULL) && (ptr != NULL)) {993 slab_t *slab = obj2slab(ptr);994 memcpy(new_ptr, ptr, min(size, slab->cache->size));995 }996 997 if (ptr != NULL)998 free(ptr);999 1000 return new_ptr;1001 }1002 1003 void free(void *ptr)1004 {1005 if (!ptr)1006 return;1007 1008 slab_t *slab = obj2slab(ptr);1009 _slab_free(slab->cache, ptr, slab);1010 }1011 1012 926 /** @} 1013 927 */
Note:
See TracChangeset
for help on using the changeset viewer.