Exemplo n.º 1
0
phys_bytes pg_load()
{
	phys_bytes phpagedir = vir2phys(pagedir);
	refresh_tlb();
        write_ttbr0(phpagedir);
	return phpagedir;
}
Exemplo n.º 2
0
void page_remove(pgd_t* pgdir, viraddr_t va) 
{
	assert(pgdir);
	page_t *pf;
	pte_t *pte_store;
	pf = page_lookup(pgdir, va, &pte_store);

	if( pf == NULL ) return;
	
	//printk("free:%x\n",va);
	page_decref(pf);
	pte_set(*pte_store,0);
	refresh_tlb(pgdir, va);
}
Exemplo n.º 3
0
int page_insert(pgd_t* pgdir, page_t *pf,viraddr_t va, uint32_t perm)
{
	
	assert(pgdir && pf);
	pte_t* pte = _page_walk(pgdir, va,true);


	if (!pte) return -ENOMEM;
	atomic_inc(&pf->_count);
	if (pte_present(*pte)) page_remove(pgdir, va);	
	
	pte_val(*pte) = page2phys(pf) | perm | _PAGE_PRESENT;
	refresh_tlb(pgdir, va);
	return 0;
}