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

Function rt_varea_map_page

components/mm/mm_aspace.c:1328–1363  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1326}
1327
1328int rt_varea_map_page(rt_varea_t varea, void *vaddr, void *page)
1329{
1330 int err = RT_EOK;
1331 void *page_pa = rt_kmem_v2p(page);
1332
1333 if (!varea || !vaddr || !page)
1334 {
1335 LOG_W("%s(%p,%p,%p): invalid input", __func__, varea, vaddr, page);
1336 err = -RT_EINVAL;
1337 }
1338 else if (page_pa == ARCH_MAP_FAILED)
1339 {
1340 LOG_W("%s: page is not in kernel space", __func__);
1341 err = -RT_ERROR;
1342 }
1343 else if (_not_in_range(MMF_MAP_FIXED, vaddr, ARCH_PAGE_SIZE,
1344 varea->start, varea->size))
1345 {
1346 LOG_W("%s(%p,%lx): not in range of varea(%p,%lx)", __func__,
1347 vaddr, ARCH_PAGE_SIZE, varea->start, varea->size);
1348 err = -RT_EINVAL;
1349 }
1350 else
1351 {
1352 err = _do_named_map(
1353 varea->aspace,
1354 varea,
1355 vaddr,
1356 ARCH_PAGE_SIZE,
1357 MM_PA_TO_OFF(page_pa),
1358 varea->attr
1359 );
1360 }
1361
1362 return err;
1363}
1364
1365int rt_varea_unmap_page(rt_varea_t varea, void *vaddr)
1366{

Callers 3

_map_page_in_vareaFunction · 0.85
test_varea_map_pageFunction · 0.85
test_varea_unmap_pageFunction · 0.85

Calls 3

rt_kmem_v2pFunction · 0.85
_not_in_rangeFunction · 0.85
_do_named_mapFunction · 0.85

Tested by 2

test_varea_map_pageFunction · 0.68
test_varea_unmap_pageFunction · 0.68