]> git.saurik.com Git - apple/xnu.git/blobdiff - tools/tests/perf_index/test_fault_helper.c
xnu-7195.101.1.tar.gz
[apple/xnu.git] / tools / tests / perf_index / test_fault_helper.c
index 94127979c3dc54dbfa801d6de2278f9e07e49d27..e3f8ee3ef0b557e9b4907534f5b4116102299650 100644 (file)
@@ -6,81 +6,88 @@
 #include <assert.h>
 #include <TargetConditionals.h>
 
+#if (TARGET_OS_IPHONE && !TARGET_OS_SIMULATOR)
+#define MEMSIZE (1L<<28)
+#else
 #define MEMSIZE (1L<<30)
+#endif
 
 static char* memblock;
 
-int test_fault_setup() {
-    char *ptr;
-    int pgsz = getpagesize();
-    int retval;
+int
+test_fault_setup()
+{
+       char *ptr;
+       int pgsz = getpagesize();
+       int retval;
 
-    memblock = (char *)mmap(NULL, MEMSIZE, PROT_READ | PROT_WRITE, MAP_ANON | MAP_PRIVATE, -1, 0);
-    VERIFY(memblock != MAP_FAILED, "mmap failed");
+       memblock = (char *)mmap(NULL, MEMSIZE, PROT_READ | PROT_WRITE, MAP_ANON | MAP_PRIVATE, -1, 0);
+       VERIFY(memblock != MAP_FAILED, "mmap failed");
 
-    /* make sure memory is paged */
-    for(ptr = memblock; ptr<memblock+MEMSIZE; ptr+= pgsz) {
-        *ptr = 1;
-    }
+       /* make sure memory is paged */
+       for (ptr = memblock; ptr < memblock + MEMSIZE; ptr += pgsz) {
+               *ptr = 1;
+       }
 
-    /* set to read only, then back to read write so it faults on first write */
-    retval = mprotect(memblock, MEMSIZE, PROT_READ);
-    VERIFY(retval == 0, "mprotect failed");
+       /* set to read only, then back to read write so it faults on first write */
+       retval = mprotect(memblock, MEMSIZE, PROT_READ);
+       VERIFY(retval == 0, "mprotect failed");
 
-    retval = mprotect(memblock, MEMSIZE, PROT_READ | PROT_WRITE);
-    VERIFY(retval == 0, "mprotect failed");
+       retval = mprotect(memblock, MEMSIZE, PROT_READ | PROT_WRITE);
+       VERIFY(retval == 0, "mprotect failed");
 
-    return PERFINDEX_SUCCESS;
+       return PERFINDEX_SUCCESS;
 }
 
-int test_fault_helper(int thread_id, int num_threads, long long length, testtype_t testtype) {
-    char *ptr;
-    int pgsz = getpagesize();
-    int retval;
-
-    long long num_pages = MEMSIZE / pgsz;
-    long long region_len = num_pages/num_threads;
-    long long region_start = region_len * thread_id; 
-    long long region_end;
-
-    if(thread_id < num_pages % num_threads) {
-        region_start += thread_id;
-        region_len++;
-    }
-    else {
-        region_start += num_pages % num_threads;
-    }
-
-    region_start *= pgsz;
-    region_len *= pgsz;
-    region_end = region_start + region_len;
-
-    long long left = length;
-
-    while(1) {
-        for(ptr = memblock+region_start; ptr<memblock+region_end; ptr+= pgsz) {
-            *ptr = 1;
-            left--;
-            if(left==0)
-                break;
-        }
-
-        if(left==0)
-            break;
-
-        if(testtype == TESTFAULT) {
-            retval = mprotect(memblock+region_start, region_len, PROT_READ) == 0;
-            VERIFY(retval == 0, "mprotect failed");
-            retval = mprotect(memblock+region_start, region_len, PROT_READ | PROT_WRITE) == 0;
-            VERIFY(retval == 0, "mprotect failed");
-        }
-
-        else if(testtype == TESTZFOD) {
-            retval = munmap(memblock+region_start, region_len) == 0;
-            VERIFY(retval == 0, "munmap failed");
-            ptr = mmap(memblock+region_start, region_len, PROT_READ | PROT_WRITE, MAP_ANON | MAP_PRIVATE | MAP_FIXED, -1, 0);
-            VERIFY(ptr != 0, "mmap failed");
-        }
-    }
-    return PERFINDEX_SUCCESS;
+int
+test_fault_helper(int thread_id, int num_threads, long long length, testtype_t testtype)
+{
+       char *ptr;
+       int pgsz = getpagesize();
+       int retval;
+
+       long long num_pages = MEMSIZE / pgsz;
+       long long region_len = num_pages / num_threads;
+       long long region_start = region_len * thread_id;
+       long long region_end;
+
+       if (thread_id < num_pages % num_threads) {
+               region_start += thread_id;
+               region_len++;
+       } else {
+               region_start += num_pages % num_threads;
+       }
+
+       region_start *= pgsz;
+       region_len *= pgsz;
+       region_end = region_start + region_len;
+
+       long long left = length;
+
+       while (1) {
+               for (ptr = memblock + region_start; ptr < memblock + region_end; ptr += pgsz) {
+                       *ptr = 1;
+                       left--;
+                       if (left == 0) {
+                               break;
+                       }
+               }
+
+               if (left == 0) {
+                       break;
+               }
+
+               if (testtype == TESTFAULT) {
+                       retval = mprotect(memblock + region_start, region_len, PROT_READ) == 0;
+                       VERIFY(retval == 0, "mprotect failed");
+                       retval = mprotect(memblock + region_start, region_len, PROT_READ | PROT_WRITE) == 0;
+                       VERIFY(retval == 0, "mprotect failed");
+               } else if (testtype == TESTZFOD) {
+                       retval = munmap(memblock + region_start, region_len) == 0;
+                       VERIFY(retval == 0, "munmap failed");
+                       ptr = mmap(memblock + region_start, region_len, PROT_READ | PROT_WRITE, MAP_ANON | MAP_PRIVATE | MAP_FIXED, -1, 0);
+                       VERIFY(ptr != 0, "mmap failed");
+               }
+       }
+       return PERFINDEX_SUCCESS;
 }