コード例 #1
0
ファイル: shmem.c プロジェクト: naturegirl/OS_edf
static void
shmn_destroy(shmn_t *shmn) {
    int i;
    for (i = 0; i < SHMN_NENTRY; i ++) {
        shmem_remove_entry_pte(shmn->entry + i);
    }
    free_page(kva2page(shmn->entry));
    kfree(shmn);
}
コード例 #2
0
ファイル: shmem.c プロジェクト: naturegirl/OS_edf
int
shmem_insert_entry(struct shmem_struct *shmem, uintptr_t addr, pte_t entry) {
    pte_t *ptep = shmem_get_entry(shmem, addr, 1);
    if (ptep == NULL) {
        return -E_NO_MEM;
    }
    if (*ptep != 0) {
        shmem_remove_entry_pte(ptep);
    }
    if (entry & PTE_P) {
        page_ref_inc(pte2page(entry));
    }
    else if (entry != 0) {
        swap_duplicate(entry);
    }
    *ptep = entry;
    return 0;
}
コード例 #3
0
ファイル: shmem.c プロジェクト: SteveHuang27/ucore-x64-smp
int
shmem_insert_entry(struct shmem_struct *shmem, uintptr_t addr, pte_t entry) {
    pte_t *ptep = shmem_get_entry(shmem, addr, 1);
    if (ptep == NULL) {
        return -E_NO_MEM;
    }
    if (! ptep_invalid(ptep)) {
        shmem_remove_entry_pte(ptep);
    }
    if (ptep_present(&entry)) {
        page_ref_inc(pte2page(entry));
    }
    else if (! ptep_invalid(&entry)) {
        swap_duplicate(entry);
    }
	ptep_copy(ptep, &entry);
    return 0;
}