Exemple #1
0
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);
}
Exemple #2
0
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;
}
Exemple #3
0
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;
}