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); }
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; }
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; }