| 110 | } |
| 111 | |
| 112 | static void init_buffers(struct buf_desc *bd, size_t size) |
| 113 | { |
| 114 | void *start; |
| 115 | void *mem; |
| 116 | |
| 117 | start = mmap(NULL, size + page_sz * 2, PROT_NONE, |
| 118 | MAP_PRIVATE | MAP_ANONYMOUS | MAP_NORESERVE, -1, 0); |
| 119 | if (start == MAP_FAILED) { |
| 120 | fprintf(stderr, "Unable to preserve the page mixture memory.\n"); |
| 121 | exit(1); |
| 122 | } |
| 123 | |
| 124 | mem = mmap(start + page_sz, size, PROT_READ | PROT_WRITE, |
| 125 | MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED, -1, 0); |
| 126 | if (mem == MAP_FAILED) { |
| 127 | fprintf(stderr, "mmap fail\n"); |
| 128 | exit(1); |
| 129 | } |
| 130 | |
| 131 | memset(bd, 0, sizeof(*bd)); |
| 132 | bd->size = size; |
| 133 | bd->buf_wr = mem; |
| 134 | bd->buf_rd = malloc(size); |
| 135 | if (!bd->buf_rd) { |
| 136 | fprintf(stderr, "malloc fail\n"); |
| 137 | exit(1); |
| 138 | } |
| 139 | } |
| 140 | |
| 141 | static int verify_data(struct buf_desc *bd, struct iovec *wr_vecs, int nr_iovec, |
| 142 | int fd) |