Lines Matching refs:data
48 typedef int (*work_fn)(struct global_data *data);
49 typedef int (*check_fn)(struct global_data *data);
50 typedef void (*prepare_fn)(struct global_data *data);
80 void propagate_children(struct __test_metadata *_metadata, struct global_data *data)
92 num_child = rand_r(&data->rand_seed) % MAX_CHILDREN + 1;
93 worker_child = is_worker ? rand_r(&data->rand_seed) % num_child : -1;
109 data->rand_seed += curr_child;
114 if (data->do_prepare)
115 data->do_prepare(data);
117 close(data->pipefd[1]);
119 if (is_worker && curr_level == data->worker_level) {
123 while (read(data->pipefd[0], &buf, 1) > 0)
126 if (data->do_work)
127 ret = data->do_work(data);
130 semctl(data->semid, 0, IPC_RMID);
133 semop(data->semid, &sem_wait, 1);
134 if (data->do_check)
135 ret = data->do_check(data);
156 struct global_data data;
161 struct global_data *data = &self->data;
168 data->mapsize = getpagesize();
170 data->expected_pfn = mmap(0, sizeof(unsigned long),
173 ASSERT_NE(data->expected_pfn, MAP_FAILED);
176 data->semid = semget(IPC_PRIVATE, 1, 0666 | IPC_CREAT);
177 ASSERT_NE(data->semid, -1);
178 ASSERT_NE(semctl(data->semid, 0, SETVAL, 0), -1);
181 ASSERT_NE(pipe(data->pipefd), -1);
183 data->rand_seed = time(NULL);
184 srand(data->rand_seed);
186 data->worker_level = rand() % TOTAL_LEVEL + 1;
188 data->do_prepare = NULL;
189 data->do_work = NULL;
190 data->do_check = NULL;
192 data->backend = ANON;
197 struct global_data *data = &self->data;
199 if (data->region != MAP_FAILED)
200 munmap(data->region, data->mapsize);
201 data->region = MAP_FAILED;
202 if (data->expected_pfn != MAP_FAILED)
203 munmap(data->expected_pfn, sizeof(unsigned long));
204 data->expected_pfn = MAP_FAILED;
205 semctl(data->semid, 0, IPC_RMID);
206 data->semid = -1;
208 close(data->pipefd[0]);
210 switch (data->backend) {
214 shm_unlink(data->filename);
217 unlink(data->filename);
222 void access_region(struct global_data *data)
227 FORCE_READ(*data->region);
275 int move_region(struct global_data *data)
280 ret = try_to_move_page(data->region);
287 *data->expected_pfn = pagemap_get_pfn(pagemap_fd, data->region);
292 int has_same_pfn(struct global_data *data)
297 if (data->region == MAP_FAILED)
304 pfn = pagemap_get_pfn(pagemap_fd, data->region);
305 if (pfn != *data->expected_pfn)
313 struct global_data *data = &self->data;
316 data->region = mmap(0, data->mapsize, PROT_READ | PROT_WRITE,
318 ASSERT_NE(data->region, MAP_FAILED);
319 memset(data->region, 0xcf, data->mapsize);
321 data->do_prepare = access_region;
322 data->do_work = move_region;
323 data->do_check = has_same_pfn;
325 propagate_children(_metadata, data);
331 struct global_data *data = &self->data;
333 snprintf(data->filename, MAX_FILENAME_LEN, "%s%s", PREFIX, suffixes[SHM]);
334 shm_fd = shm_open(data->filename, O_CREAT | O_RDWR, 0666);
336 ftruncate(shm_fd, data->mapsize);
337 data->backend = SHM;
340 data->region = mmap(0, data->mapsize, PROT_READ | PROT_WRITE,
342 ASSERT_NE(data->region, MAP_FAILED);
343 memset(data->region, 0xcf, data->mapsize);
346 data->do_prepare = access_region;
347 data->do_work = move_region;
348 data->do_check = has_same_pfn;
350 propagate_children(_metadata, data);
356 struct global_data *data = &self->data;
358 snprintf(data->filename, MAX_FILENAME_LEN, "%s%s", PREFIX, suffixes[NORM_FILE]);
359 fd = open(data->filename, O_CREAT | O_RDWR | O_EXCL, 0666);
361 ftruncate(fd, data->mapsize);
362 data->backend = NORM_FILE;
365 data->region = mmap(0, data->mapsize, PROT_READ | PROT_WRITE,
367 ASSERT_NE(data->region, MAP_FAILED);
368 memset(data->region, 0xcf, data->mapsize);
371 data->do_prepare = access_region;
372 data->do_work = move_region;
373 data->do_check = has_same_pfn;
375 propagate_children(_metadata, data);
378 void prepare_local_region(struct global_data *data)
380 /* Allocate range and set the same data */
381 data->region = mmap(NULL, data->mapsize, PROT_READ|PROT_WRITE,
383 if (data->region == MAP_FAILED)
386 memset(data->region, 0xcf, data->mapsize);
389 int merge_and_migrate(struct global_data *data)
394 if (data->region == MAP_FAILED)
400 ret = try_to_move_page(data->region);
405 *data->expected_pfn = pagemap_get_pfn(pagemap_fd, data->region);
413 struct global_data *data = &self->data;
426 data->do_prepare = prepare_local_region;
427 data->do_work = merge_and_migrate;
428 data->do_check = has_same_pfn;
430 propagate_children(_metadata, data);