示例#1
0
文件: vm.c 项目: jessZhAnG/OS
paddr_t
getppages(unsigned long npages)
{
        int spl;
        paddr_t addr;

        spl = splhigh();
        // coremap not setup
        if (!coremap_ready){
           addr = ram_stealmem(npages);
           splx(spl);
           return addr;
        }

        // coremap setup already
        assert(coremap_ready == 1);

        if (npages == 1){
           addr =  coremap_alloc_one_page(NULL);
           splx(spl);
           return addr;
        }
        else {
           addr =  coremap_alloc_multi_page(npages);
           splx(spl);
           return addr;
       }
        panic("getppages: unexpected return\n");
}
示例#2
0
文件: coremap.c 项目: YueGan/CSCC69A2
/*
 * alloc_kpages
 *
 * Allocate some kernel-space virtual pages.
 * This is the interface kmalloc uses to get pages for its use.
 *
 * Synchronization: takes coremap_spinlock.
 * May block to swap pages out.
 */
vaddr_t 
alloc_kpages(int npages)
{
	paddr_t pa;
	if (npages > 1) {
		pa = coremap_alloc_multipages(npages);
	}
	else {
		pa = coremap_alloc_one_page(NULL, 0 /* dopin */);
	}
	if (pa==INVALID_PADDR) {
		return 0;
	}
	return PADDR_TO_KVADDR(pa);
}
示例#3
0
文件: coremap.c 项目: YueGan/CSCC69A2
/*
 * coremap_allocuser
 *
 * Allocate a page for a user-level process, to hold the passed-in
 * logical page.
 *
 * Synchronization: takes coremap_spinlock.
 * May block to swap pages out.
 */
paddr_t
coremap_allocuser(struct lpage *lp)
{
	KASSERT(!curthread->t_in_interrupt);
	return coremap_alloc_one_page(lp, 1 /* dopin */);
}