vaddr_t __sg_mman_get_page(spdid_t spdid, vaddr_t addr, int flags)
{
	vaddr_t ret = 0;

	struct rec_data_spd *rd = NULL;

	ret = mman_get_page(spdid, addr, flags);
	assert(ret > 0);

/* /\* #ifdef REFLECTION *\/ */
/* 	cos_sched_lock_take(); */

/* 	// track the allocated page */
/* 	rd = rdspd_lookup(spdid); */
/* 	if (unlikely(!rd)) { */
/* 		rd = rdspd_alloc(spdid); */
/* 		assert(rd); */
/* 		INIT_LIST(&rd->pages, next, prev); */
/* 		/\* INIT_LIST(&rd->pages2, next, prev); *\/ */
/* 		rd->spdid = spdid; */
/* 	} */
/* 	assert(rd && rd->spdid == spdid); */
/* 	assert(rdpage_alloc(rd, addr)); */
/* 	cos_sched_lock_release(); */
/* /\* #endif *\/ */

	return ret;
}
static int boot_spd_map_memory(struct cobj_header *h, spdid_t spdid, vaddr_t comp_info)
{
	unsigned int i;
	vaddr_t dest_daddr;

	local_md[spdid].spdid = spdid;
	local_md[spdid].h = h;
	local_md[spdid].page_start = cos_get_heap_ptr();
	local_md[spdid].comp_info = comp_info;
	for (i = 0 ; i < h->nsect ; i++) {
		struct cobj_sect *sect;
		char *dsrc;
		int left;

		sect = cobj_sect_get(h, i);
		dest_daddr = sect->vaddr;
		left = cobj_sect_size(h, i);

		while (left > 0) {
			dsrc = cos_get_vas_page();
			if ((vaddr_t)dsrc != mman_get_page(cos_spd_id(), (vaddr_t)dsrc, 0)) BUG();
			if (dest_daddr != (mman_alias_page(cos_spd_id(), (vaddr_t)dsrc, spdid, dest_daddr))) BUG();

			dest_daddr += PAGE_SIZE;
			left -= PAGE_SIZE;
		}
	}
	local_md[spdid].page_end = (void*)dest_daddr;

	return 0;
}
Пример #3
0
static void
get_test()
{
	int i;
	printc("\n<<< GET TEST BEGIN! >>>\n");
	for (i = 0; i<PAGE_NUM; i++) {
		s_addr[i] = (vaddr_t)cos_get_vas_page();
		if (unlikely(!s_addr[i])) {
			printc("Cannot get vas for comp %ld!\n", cos_spd_id());
			BUG();
		}
		/* printc("s_addr %p\n", s_addr[i]); */
		/* rdtscll(start); */
		if (s_addr[i]!= mman_get_page(cos_spd_id(), s_addr[i], 0)) BUG();
		/* rdtscll(end); */
		/* printc("cost %llu\n", end - start); */
	}
	printc("<<< GET TEST END! >>>\n\n");
	return;
}
Пример #4
0
static void
all_in_one()
{
	int i;
	for (i = 0; i<PAGE_NUM; i++) {
		s_addr[i] = (vaddr_t)cos_get_vas_page();
		d_addr[i] = mm_test2();
	}

	for (i = 0; i<PAGE_NUM; i++) {
		/* rdtscll(start); */
		mman_get_page(cos_spd_id(), s_addr[i], 0);
		mman_alias_page(cos_spd_id(), s_addr[i], cos_spd_id()+1, d_addr[i]);
		mman_revoke_page(cos_spd_id(), s_addr[i], 0);

		/* rdtscll(end); */
		/* printc("grant-alias-revoke cost %llu\n", end - start); */
		/* mman_release_page(cos_spd_id(), s_addr[i], 0); */
	}
	return;
}
Пример #5
0
vaddr_t __sg_mman_get_page(spdid_t spdid, vaddr_t addr, int flags)
{
	return mman_get_page(spdid, addr, flags);
}