vm_offset_t va;
vaddr_t va;
pmap_remove_pv(pmap, va, pv)	register pmap_t pmap;	vm_offset_t va;	struct pv_entry *pv;{	register struct pv_entry *npv;	int s;#ifdef PMAPDEBUG	if (pmapdebug & PDB_FOLLOW && pmapdebug & PDB_PV)		printf("pmap_remove_pv(%p,%x,%p)\n", pmap, va, pv);#endif	/*	 * Remove from the PV table (raise IPL since we	 * may be called at interrupt time).	 */	s = splimp();	/*	 * If it is the first entry on the list, it is actually	 * in the header and we must copy the following entry up	 * to the header.  Otherwise we must search the list for	 * the entry.  In either case we free the now unused entry.	 */	if (pmap == pv->pv_pmap && va == pv->pv_va) {		npv = pv->pv_next;		pmap_remove_va(pv);		if (npv) {			*pv = *npv;			pmap_free_pv(npv);		} else			pv->pv_pmap = NULL;	} else {		for (npv = pv->pv_next; npv; pv = npv, npv = npv->pv_next) {			if (pmap == npv->pv_pmap && va == npv->pv_va)				break;		}		if (npv) {			pv->pv_next = npv->pv_next;			pmap_remove_va(pv);			pmap_free_pv(npv);		}	}	splx(s);}