Example #1
0
void set_pmde(pgd_t * pgde,struct page* pf,viraddr_t address,uint32_t perm)
{
#ifdef DEBUG
	assert(pgde);
	assert(pf);
	assert(page2pfn(pf) || !page2pfn(pf));
#endif	
	pmd_t * pmde = NULL;
	pmde = (pmd_t *)pgd_page_vaddr(*pgde) + pmd_index(address);
	pmd_val(*pmde) = page2phys(pf) | perm;
}
Example #2
0
static struct kmem_slab *kmem_small_slab_create(struct kmem_cache *cache,
			struct page *page)
{
	struct kmem_small_cache *small = (struct kmem_small_cache *)cache;

	const pfn_t pages = (pfn_t)1 << cache->order;
	const size_t size = PAGE_SIZE * pages;
	const size_t off = size - sizeof(struct kmem_small_slab);

	char *vaddr = VA(page2pfn(page) << PAGE_BITS);
	struct kmem_small_slab *slab = (struct kmem_small_slab *)(vaddr + off);

	slab->common.ops = &small_slab_ops;
	slab->common.total = 0;
	slab->common.free = 0;
	slab->free_list = 0;

	const size_t sz = small->padded_size;

	for (char *ptr = vaddr; ptr + sz <= (char *)slab; ptr += sz) {
		kmem_small_slab_free(cache, &slab->common, ptr);
		++slab->common.total;
		++slab->common.free;
	}

	return (struct kmem_slab *)slab;
}
Example #3
0
void set_pgde(pgd_t * pgde,struct page* pf,viraddr_t address,uint32_t perm)
{
#ifdef DEBUG
	assert(pgde);
	assert(pf);
	assert(page2pfn(pf) || !page2pfn(pf));
#endif	

	uint32_t pgd_num = pgd_index(address);
#ifdef _PAE_
	uint32_t pe = perm & ~(_PAGE_RW | _PAGE_USER);
#else
	uint32_t pe = perm;
#endif
	pgd_val(pgde[pgd_num]) = page2phys(pf) | pe;
}