MCPcopy Create free account
hub / github.com/RT-Thread/rt-thread / _memblock_add_range

Function _memblock_add_range

components/mm/mm_memblock.c:120–160  ·  view source on GitHub ↗

adding overlapped regions is banned */

Source from the content-addressed store, hash-verified

118
119/* adding overlapped regions is banned */
120static rt_err_t _memblock_add_range(struct rt_memblock *memblock,
121 const char *name, rt_size_t start, rt_size_t end, mm_flag_t flag)
122{
123 struct rt_mmblk_reg *reg = RT_NULL, *reg_next = RT_NULL;
124 rt_slist_t sentinel;
125 rt_region_t new_region;
126
127 if (start >= end)
128 return -RT_EINVAL;
129
130 sentinel.next = &(memblock->reg_list);
131
132 /* find suitable place */
133 rt_slist_for_each_entry(reg, &sentinel, node)
134 {
135 reg_next = _next_region(reg);
136
137 if (reg_next == RT_NULL)
138 break;
139
140 rt_size_t rstart = reg_next->memreg.start;
141 rt_size_t rend = reg_next->memreg.end;
142
143 /* not overlap */
144 if (rstart >= end)
145 break;
146 if (rend <= start)
147 continue;
148
149 /* overlap */
150 LOG_E("region to add %s: [%p-%p) overlap with existing region %s: [%p-%p)",\
151 name, start, end, reg_next->memreg.name, rstart, rend);
152 return -RT_EINVAL;
153 }
154
155 /* insert the region */
156 new_region.name = name;
157 new_region.start = start;
158 new_region.end = end;
159 return _reg_insert_after(reg, &new_region, flag);
160}
161
162rt_err_t rt_memblock_add_memory(const char *name, rt_size_t start, rt_size_t end, mmblk_flag_t flags)
163{

Callers 2

rt_memblock_add_memoryFunction · 0.85

Calls 2

_next_regionFunction · 0.85
_reg_insert_afterFunction · 0.85

Tested by

no test coverage detected