test_aspace_api_internal.h 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. /*
  2. * Copyright (c) 2006-2023, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2023-03-23 WangXiaoyao Complete testcase for internal APIs
  9. */
  10. #ifndef __TEST_ASPACE_API_INTERNAL_H__
  11. #define __TEST_ASPACE_API_INTERNAL_H__
  12. #include "common.h"
  13. #include "mmu.h"
  14. #include "test_bst_adpt.h"
  15. #include <stddef.h>
  16. /**
  17. * @brief 3 cases for find free:
  18. * with prefer & MAP_FIXED
  19. * with prefer
  20. * without prefer
  21. *
  22. * the requirement of find free:
  23. * it will return a subset in address space that is free
  24. * the subset contains `length` contiguous elements
  25. * the alignment is satisfied
  26. */
  27. static void test_find_free(void)
  28. {
  29. void *top_page = rt_kernel_space.start + rt_kernel_space.size - 0x1000;
  30. void *vaddr = top_page;
  31. CONSIST_HEAP({
  32. /* type 1, on success */
  33. uassert_true(!rt_aspace_map(&rt_kernel_space, &vaddr, 0x1000, MMU_MAP_K_RWCB, MMF_MAP_FIXED, &rt_mm_dummy_mapper, 0));
  34. uassert_true(vaddr == top_page);
  35. /* type 1, on failure */
  36. // uassert_true(rt_aspace_map(&rt_kernel_space, &vaddr, 0x1000, MMU_MAP_K_RWCB, MMF_MAP_FIXED, &rt_mm_dummy_mapper, 0));
  37. // uassert_true(!vaddr);
  38. /* type 2, on success */
  39. vaddr = top_page;
  40. uassert_true(!rt_aspace_map(&rt_kernel_space, &vaddr, 0x1000, MMU_MAP_K_RWCB, 0, &rt_mm_dummy_mapper, 0));
  41. uassert_true(vaddr < top_page);
  42. uassert_true(!!vaddr);
  43. rt_aspace_unmap(&rt_kernel_space, vaddr);
  44. /* type 2, on failure */
  45. vaddr = rt_kernel_space.start;
  46. uassert_true(-RT_ENOSPC == rt_aspace_map(&rt_kernel_space, &vaddr, rt_kernel_space.size - 0x08000000, MMU_MAP_K_RWCB, 0, &rt_mm_dummy_mapper, 0));
  47. uassert_true(!vaddr);
  48. /* type 3, on success is covered by ioremap */
  49. /* type 3, on failure */
  50. size_t map_size = ARCH_PAGE_SIZE;
  51. while (1)
  52. {
  53. void *va = rt_ioremap(0, map_size);
  54. if (va)
  55. {
  56. uassert_true(1);
  57. rt_iounmap(va);
  58. map_size <<= 1;
  59. }
  60. else
  61. {
  62. uassert_true(1);
  63. break;
  64. }
  65. }
  66. /* free top page */
  67. rt_aspace_unmap(&rt_kernel_space, top_page);
  68. });
  69. /* test mm_private.h */
  70. CONSIST_HEAP(test_bst_adpt());
  71. }
  72. #endif /* __TEST_ASPACE_API_INTERNAL_H__ */