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

Function _compare_varea

components/mm/mm_aspace.c:1589–1628  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1587}
1588
1589static int _compare_varea(rt_varea_t src_varea, void *arg)
1590{
1591 struct _compare_param *param = arg;
1592 rt_varea_t dst_varea;
1593 rt_aspace_t dst = param->dst;
1594 rt_aspace_t src = src_varea->aspace;
1595
1596 dst_varea = _aspace_bst_search(dst, src_varea->start);
1597 if (dst_varea)
1598 {
1599 char *buf1 = rt_pages_alloc_ext(0, PAGE_ANY_AVAILABLE);
1600 char *buf2 = rt_pages_alloc_ext(0, PAGE_ANY_AVAILABLE);
1601 char *vend = src_varea->start + src_varea->size;
1602 for (char *i = src_varea->start; i < vend; i += ARCH_PAGE_SIZE)
1603 {
1604 int rc;
1605 rt_aspace_page_get(src, i, buf1);
1606 rt_aspace_page_get(dst, i, buf2);
1607 rc = memcmp(buf1, buf2, ARCH_PAGE_SIZE);
1608 if (rc)
1609 {
1610 if (param->rc == 0)
1611 param->rc = rc;
1612 LOG_E("%s(a_varea=%s, b_varea=%s)", __func__, VAREA_NAME(src_varea), VAREA_NAME(dst_varea));
1613 _dump_varea(src_varea);
1614 _dump_varea(dst_varea);
1615 RT_ASSERT(0);
1616 }
1617 }
1618
1619 rt_pages_free(buf1, 0);
1620 rt_pages_free(buf2, 0);
1621 }
1622 else
1623 {
1624 param->rc = -RT_ENOENT;
1625 }
1626
1627 return 0;
1628}
1629
1630rt_err_t rt_aspace_compare(rt_aspace_t src, rt_aspace_t dst)
1631{

Callers

nothing calls this directly

Calls 5

rt_pages_alloc_extFunction · 0.85
rt_aspace_page_getFunction · 0.85
_dump_vareaFunction · 0.85
rt_pages_freeFunction · 0.85
_aspace_bst_searchFunction · 0.70

Tested by

no test coverage detected