.. | .. |
---|
46 | 46 | |
---|
47 | 47 | int main(void) |
---|
48 | 48 | { |
---|
49 | | - const unsigned int PAGE_SIZE = sysconf(_SC_PAGESIZE); |
---|
50 | | -#ifdef __arm__ |
---|
51 | | - unsigned long va = 2 * PAGE_SIZE; |
---|
52 | | -#else |
---|
53 | | - unsigned long va = 0; |
---|
54 | | -#endif |
---|
| 49 | + const int PAGE_SIZE = sysconf(_SC_PAGESIZE); |
---|
| 50 | + /* |
---|
| 51 | + * va_max must be enough bigger than vm.mmap_min_addr, which is |
---|
| 52 | + * 64KB/32KB by default. (depends on CONFIG_LSM_MMAP_MIN_ADDR) |
---|
| 53 | + */ |
---|
| 54 | + const unsigned long va_max = 1UL << 20; |
---|
| 55 | + unsigned long va; |
---|
55 | 56 | void *p; |
---|
56 | 57 | int fd; |
---|
57 | 58 | unsigned long a, b; |
---|
.. | .. |
---|
60 | 61 | if (fd == -1) |
---|
61 | 62 | return 1; |
---|
62 | 63 | |
---|
63 | | - p = mmap((void *)va, PAGE_SIZE, PROT_NONE, MAP_PRIVATE|MAP_FILE|MAP_FIXED, fd, 0); |
---|
64 | | - if (p == MAP_FAILED) { |
---|
65 | | - if (errno == EPERM) |
---|
66 | | - return 2; |
---|
| 64 | + for (va = 0; va < va_max; va += PAGE_SIZE) { |
---|
| 65 | + p = mmap((void *)va, PAGE_SIZE, PROT_NONE, MAP_PRIVATE|MAP_FILE|MAP_FIXED, fd, 0); |
---|
| 66 | + if (p == (void *)va) |
---|
| 67 | + break; |
---|
| 68 | + } |
---|
| 69 | + if (va == va_max) { |
---|
| 70 | + fprintf(stderr, "error: mmap doesn't like you\n"); |
---|
67 | 71 | return 1; |
---|
68 | 72 | } |
---|
69 | 73 | |
---|