コード例 #1
0
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));
        }

}
コード例 #2
0
extern void segment_length_test(umMem_T memory)
{
        for (int i = 0; i < 20; i+=2) {
                segment_map(memory, i, i * 2);
                int seg_length = segment_length(memory, i);
                if (i * 2 != seg_length) {
                        fprintf(stderr, "Wrong length at %d\n", i);
                }
        }
        
        fprintf(stderr, "segment_length is fine with valid inputs\n");
}
コード例 #3
0
extern void segment_isEmpty_test(umMem_T memory)
{
        for (int i = 0; i < 20; i+=2) {
                segment_map(memory, i, i + 2);
        }
        
        /* odd would be empty, even is not empty */
        for (int i = 0; i < 20; i++) {
                if ( i % 2 == 0 && segment_isEmpty(memory, i) == true) {
                        fprintf(stderr, "Even should be not empty\n");
                }
                else if ( i % 2 == 1 && segment_isEmpty(memory, i) == false) {
                        fprintf(stderr, "Odd should be empty\n");
                }
        }
        
        fprintf(stderr, "segment_isEmpty is fine with valid inputs\n");
}
コード例 #4
0
ファイル: bm.c プロジェクト: fritzprix/wtree
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;
}
コード例 #5
0
extern void segment_PutGet_test(umMem_T memory)
{
        uint32_t array[10];
                       
        for (int i = 0; i < 10; i++) {
                array[i] = (uint32_t) (i * 10);
        }
        
        /* Map segment 8, and store array elements in segment 8 */
        segment_map(memory, 8, 10);
        for(int i = 0; i < 10; i++) {
                segment_put(memory, 8, i, array[i]);
        }
        for(int i = 0; i < 10; i++) {
                if (segment_get(memory, 8, i) != array[i]) {
                        fprintf(stderr, "Offset %d has incorrect value\n", i);
                }
        }
        
        fprintf(stderr, "segment_PutGet is fine with valid inputs\n");
}
コード例 #6
0
ファイル: commands.c プロジェクト: 1587/ltp
/*
 * map <seg-name> [<offset>[k|m|g|p] <length>[k|m|g|p]] [<seg-share>]
 */
static int map_seg(char *args)
{
	glctx_t *gcp = &glctx;

	char *segname, *nextarg;
	range_t range = { 0L, 0L };
	range_t *rangep = NULL;
	int segflag = MAP_PRIVATE;

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

	/*
	 * offset, length are optional
	 */
	if (get_range(args, &range, &nextarg) == CMD_ERROR)
		return CMD_ERROR;
	if (args != nextarg) {
		rangep = &range;	/* override any registered range */
		args = nextarg;
	}

	if (*args != '\0') {
		segflag = get_shared(args);
		if (segflag == -1)
			return CMD_ERROR;
	}

	if (!segment_map(segname, rangep, segflag))
		return CMD_ERROR;

	return CMD_SUCCESS;
}