[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

CVS: cvs.openbsd.org: src



CVSROOT:	/cvs
Module name:	src
Changes by:	rahnds_(_at_)_cvs_(_dot_)_openbsd_(_dot_)_org	2000/07/12 07:49:54

Modified files:
	sys/arch/powerpc/powerpc: pmap.c 

Log message:
Rework some code in the powerpc pmap module.
Previously it was possible to remove multiple entries on a single pass thru
the pv deletion code in pmap_page_protect. Also when it did this, it
was not properly tracking of decrementing pm->pm_stats.resident_count.

By storing an additional piece of information in the pv structure,
the pmap pointer it is possible to call pmap_remove on the
entries rather than duplicating the pte removal code (again).

This fixes a problem seen where the system panics or hangs in
pmap_remove_pv due to the item not being on the list. Now
it is not possible for mix entries.

Because the pv entry only contained the pteidx, it was possible
to remove an incorrect entry due to ambiguity. multiple pmaps
having mappings at the same va of the same pa. Multipe pmap containing similar
entries will occur frequenty with shared libaries. Because of the hash
entries that have the same result of (sr & ptab_mask) will alias in the pv
list..

Since the pv_idx is now recomputable, should it be removed?