extern void segment_map_test(umMem_T memory) 
{        
        for (int i = 1; i <= 7; i++) {
                segment_map(memory, i, i * 2);
        }
        
        for (int i = 1; i <= 7; i++) {
                int reg_val = register_get(memory, i);
                fprintf(stderr, "regID: %d, segID: %d, segLength: %d\n", i, 
                        reg_val, segment_length(memory, reg_val));
        }
        
        for (int i = 1; i <= 7; i+=2) {
                fprintf(stderr, "i: %d\n", i);
                segment_unmap(memory, i);
        }
        for (int i = 1; i <= 7; i+=2) {
                segment_map(memory, i, i + 10);
        }
        
        for (int i = 1; i <= 7; i++) {
                int reg_val = register_get(memory, i);
                fprintf(stderr, "regID: %d, segID: %d, segLength: %d\n", i, 
                        reg_val, segment_length(memory, reg_val));
        }

}
extern void segment_unmap_test(umMem_T memory)
{
        for (int i = 1; i < 20; i++) {
                int seg_length = segment_length(memory, i);
                if (seg_length != i * 2) {
                        fprintf(stderr, "Length is not right");
                }
                segment_unmap(memory, i);
                if (segment_isEmpty(memory, i) == false) {
                        fprintf(stderr, "Not correctly unmapped m[%d]\n", i);
                }
        }
        
        fprintf(stderr, "segment_unmap is fine with valid inputs\n");
}
Exemple #3
0
/*
 * unmap <seg-name> - unmap specified segment, but remember name/size/...
 */
static int unmap_seg(char *args)
{
	glctx_t *gcp = &glctx;
	char *segname, *nextarg;

	args += strspn(args, whitespace);
	if (!required_arg(args, "<seg-name>"))
		return CMD_ERROR;
	segname = strtok_r(args, whitespace, &nextarg);
	args = nextarg + strspn(nextarg, whitespace);

	if (!segment_unmap(segname))
		return CMD_ERROR;

	return CMD_SUCCESS;
}
Exemple #4
0
static void* segment_test(void* arg) {
	segmentRoot_t segroot;
	rbtreeRoot_t rbroot;
	trkey_t key_large = 1;
	setbuf(stdout, NULL);
	segment_root_init(&segroot, NULL, mapper, unmapper);
	cdsl_rbtreeRootInit(&rbroot);

	segment_create_cache(&segroot, key_large);

	uint32_t cnt;
	void* segment;
	size_t sz;
	struct segment_node* segnode;
	clock_t clk = clock();
	uint32_t seed = (uint32_t) clk;
	for(cnt = 0; cnt < 50; cnt++) {
		sz = rand_r(&seed) % (1 << 22);
		if(!sz) {
			sz = 1;
		}
		while(sz < MALLOC_UNIT_SIZE) sz <<= 1;
		sz &= ~3;
		segment = segment_map(&segroot, key_large, sz);
		if(!segment) {
			fprintf(stderr, "segment map fail %d\n",cnt);
			exit(-1);
		}
		segnode = (struct segment_node*) segment;
		cdsl_rbtreeNodeInit(&segnode->rbnode, cnt);
		segnode->sz = sz;
		cdsl_rbtreeInsert(&rbroot, &segnode->rbnode, FALSE);
	}
	__dev_log("map finished\n");


	while((segnode = (struct segment_node*) cdsl_rbtreeDeleteMax(&rbroot))) {
		segnode = container_of(segnode, struct segment_node, rbnode);
		segment_unmap(&segroot,key_large, segnode, segnode->sz);
	}
	segment_cleanup(&segroot);
	__dev_log("finished test \n");
	return NULL;
}