]>
git.saurik.com Git - apple/xnu.git/blob - tests/verify_kalloc_config.c
4 #include <mach_debug/mach_debug.h>
5 #include <darwintest.h>
8 T_META_NAMESPACE("xnu.vm"),
9 T_META_CHECK_LEAKS(false)
12 static void run_test(void);
14 static void run_test(void)
18 mach_zone_name_t
*name
= NULL
;
19 unsigned int nameCnt
= 0;
20 mach_zone_info_t
*info
= NULL
;
21 unsigned int infoCnt
= 0;
22 mach_memory_info_t
*wiredInfo
= NULL
;
23 unsigned int wiredInfoCnt
= 0;
24 const char kalloc_str
[] = "kalloc.";
26 kr
= mach_memory_info(mach_host_self(),
27 &name
, &nameCnt
, &info
, &infoCnt
,
28 &wiredInfo
, &wiredInfoCnt
);
29 T_QUIET
; T_ASSERT_MACH_SUCCESS(kr
, "mach_memory_info");
30 T_QUIET
; T_ASSERT_EQ(nameCnt
, infoCnt
, "zone name and info counts don't match");
32 /* Match the names of the kalloc zones against their element sizes. */
33 for (i
= 0; i
< nameCnt
; i
++) {
34 if (strncmp(name
[i
].mzn_name
, kalloc_str
, strlen(kalloc_str
)) == 0) {
35 size
= strtoul(&(name
[i
].mzn_name
[strlen(kalloc_str
)]), NULL
, 10);
36 T_LOG("ZONE NAME: %-25s ELEMENT SIZE: %llu", name
[i
].mzn_name
, size
);
37 T_QUIET
; T_ASSERT_EQ(size
, info
[i
].mzi_elem_size
, "kalloc zone name and element size don't match");
41 if ((name
!= NULL
) && (nameCnt
!= 0)) {
42 kr
= vm_deallocate(mach_task_self(), (vm_address_t
) name
,
43 (vm_size_t
) (nameCnt
* sizeof *name
));
44 T_QUIET
; T_ASSERT_MACH_SUCCESS(kr
, "vm_deallocate name");
47 if ((info
!= NULL
) && (infoCnt
!= 0)) {
48 kr
= vm_deallocate(mach_task_self(), (vm_address_t
) info
,
49 (vm_size_t
) (infoCnt
* sizeof *info
));
50 T_QUIET
; T_ASSERT_MACH_SUCCESS(kr
, "vm_deallocate info");
53 if ((wiredInfo
!= NULL
) && (wiredInfoCnt
!= 0)) {
54 kr
= vm_deallocate(mach_task_self(), (vm_address_t
) wiredInfo
,
55 (vm_size_t
) (wiredInfoCnt
* sizeof *wiredInfo
));
56 T_QUIET
; T_ASSERT_MACH_SUCCESS(kr
, "vm_deallocate wiredInfo");
62 T_DECL( verify_kalloc_config
,
63 "verifies that the kalloc zones are configured correctly",