| 1587 | } |
| 1588 | |
| 1589 | static 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 | |
| 1630 | rt_err_t rt_aspace_compare(rt_aspace_t src, rt_aspace_t dst) |
| 1631 | { |
nothing calls this directly
no test coverage detected