Ejemplo n.º 1
0
error_t vmmngr_free_page(pt_entry* entry)
{
	if (!entry)
	{
		set_last_error(EINVAL, VMEM_BAD_ARGUMENT, EO_VMMNGR);
		return ERROR_OCCUR;
	}

	void* addr = (void*)pt_entry_get_frame(*entry);

	if (addr)
		pmmngr_free_block(addr);

	pt_entry_del_attrib(entry, I86_PTE_PRESENT);
	pt_entry_del_attrib(entry, I86_PTE_WRITABLE);

	return ERROR_OK;
}
Ejemplo n.º 2
0
void vmmngr_free_page(virtual_addr addr)
{
	pt_entry * pte;

	pte = (pt_entry *) ((uint32_t) vmmngr_get_ptable_address(addr) + PAGE_TABLE_INDEX(addr));

	pmmngr_free_block((void *) pt_entry_pfn(*pte));

	pt_entry_del_attrib(pte, I86_PTE_PRESENT);
}
Ejemplo n.º 3
0
void vmmngr_set_user(virtual_addr addr, int user)
{
	ptable * ptable = vmmngr_get_ptable_address(addr);
	pt_entry * pte = vmmngr_ptable_lookup_entry(ptable, addr);
	if (user)
	{
		pt_entry_add_attrib(pte, I86_PTE_USER);
	}
	else
	{
		pt_entry_del_attrib(pte, I86_PTE_USER);
	}
}
Ejemplo n.º 4
0
void vmmngr_set_writeable(virtual_addr addr, int writeable)
{
	ptable * ptable = vmmngr_get_ptable_address(addr);
	pt_entry * pte = vmmngr_ptable_lookup_entry(ptable, addr);
	if (writeable)
	{
		pt_entry_add_attrib(pte, I86_PTE_WRITABLE);
	}
	else
	{
		pt_entry_del_attrib(pte, I86_PTE_WRITABLE);
	}

}