| 459 | static rt_varea_t _varea_create(void *start, rt_size_t size); |
| 460 | |
| 461 | static int _insert_new_varea(rt_aspace_t aspace, rt_varea_t *pvarea, |
| 462 | void *alloc_va, rt_mm_va_hint_t hint) |
| 463 | { |
| 464 | int err; |
| 465 | rt_varea_t varea = *pvarea; |
| 466 | if (varea == RT_NULL) |
| 467 | { |
| 468 | /* no preallocate buffer is provided, then create one */ |
| 469 | varea = _varea_create(hint->prefer, hint->map_size); |
| 470 | hint->flags &= ~MMF_STATIC_ALLOC; |
| 471 | *pvarea = varea; |
| 472 | } |
| 473 | |
| 474 | if (varea) |
| 475 | { |
| 476 | varea->start = alloc_va; |
| 477 | _aspace_bst_insert(aspace, varea); |
| 478 | err = RT_EOK; |
| 479 | } |
| 480 | else |
| 481 | { |
| 482 | LOG_W("%s: Out of memory", __func__); |
| 483 | err = -RT_ENOMEM; |
| 484 | } |
| 485 | |
| 486 | return err; |
| 487 | } |
| 488 | |
| 489 | static inline void _varea_post_install(rt_varea_t varea, rt_aspace_t aspace, |
| 490 | rt_size_t attr, rt_size_t flags, |
no test coverage detected