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

Function lwp_user_accessible_ext

components/lwp/lwp_user_mm.c:782–835  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

780}
781
782int lwp_user_accessible_ext(struct rt_lwp *lwp, void *addr, size_t size)
783{
784 void *addr_start = RT_NULL, *addr_end = RT_NULL, *next_page = RT_NULL;
785 void *tmp_addr = RT_NULL;
786
787 if (!lwp)
788 {
789 return RT_FALSE;
790 }
791 if (!size || !addr)
792 {
793 return RT_FALSE;
794 }
795 addr_start = addr;
796 addr_end = (void *)((char *)addr + size);
797
798#ifdef ARCH_RISCV64
799 if (addr_start < (void *)USER_VADDR_START)
800 {
801 return RT_FALSE;
802 }
803#else
804 if (addr_start >= (void *)USER_VADDR_TOP)
805 {
806 return RT_FALSE;
807 }
808 if (addr_end > (void *)USER_VADDR_TOP)
809 {
810 return RT_FALSE;
811 }
812#endif
813
814 next_page =
815 (void *)(((size_t)addr_start + ARCH_PAGE_SIZE) & ~(ARCH_PAGE_SIZE - 1));
816 do
817 {
818 size_t len = (char *)next_page - (char *)addr_start;
819
820 if (size < len)
821 {
822 len = size;
823 }
824 tmp_addr = lwp_v2p(lwp, addr_start);
825 if (tmp_addr == ARCH_MAP_FAILED &&
826 !rt_aspace_query(lwp->aspace, addr_start))
827 {
828 return RT_FALSE;
829 }
830 addr_start = (void *)((char *)addr_start + len);
831 size -= len;
832 next_page = (void *)((char *)next_page + ARCH_PAGE_SIZE);
833 } while (addr_start < addr_end);
834 return RT_TRUE;
835}
836
837int lwp_user_accessable(void *addr, size_t size)
838{

Callers 4

lwp_user_accessableFunction · 0.85
test_user_accessibleFunction · 0.85

Calls 2

lwp_v2pFunction · 0.85
rt_aspace_queryFunction · 0.85

Tested by 1

test_user_accessibleFunction · 0.68