#ifndef _VM_PAGE_H
#define _VM_PAGE_H
struct lock;
struct vm_page {
volatile paddr_t vmp_paddr;
off_t vmp_swapaddr;
struct spinlock vmp_lk;
bool vmp_in_transit;
};
#define VM_PAGE_IN_CORE(vmp) (((vmp)->vmp_paddr & PAGE_FRAME) != INVALID_PADDR)
#define VM_PAGE_IN_BACKING(vmp) ((vmp)->vmp_swapaddr != INVLALID_SWAPADDR)
#define VM_PAGE_IS_LOCKED(vmp) (KASSERT(lock_do_i_hold((vmp)->vmp_lk)))
#define VM_PAGE_DIRTY 0x01
struct vm_page *vm_page_create( void );
void vm_page_destroy( struct vm_page * );
void vm_page_lock( struct vm_page * );
void vm_page_unlock( struct vm_page * );
void vm_page_wire( struct vm_page * );
int vm_page_clone( struct vm_page *, struct vm_page ** );
int vm_page_new_blank( struct vm_page ** );
int vm_page_fault( struct vm_page *, struct addrspace *, int fault_type, vaddr_t );
void vm_page_evict( struct vm_page * );
extern struct wchan *wc_transit;
#endif