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; }
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; }
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; }
vaddr_t __sg_mman_get_page(spdid_t spdid, vaddr_t addr, int flags) { return mman_get_page(spdid, addr, flags); }