When swapout gets up and segkp_unlock gets called a page is checked to see if it has been modified by using the hat_mod() operation. This is actually a call to hat_page_getattr() with the P_MOD flag as one of the arguments. In hat_i86.c hat_page_getattr() is simply a PP_GETRM() operation which is a check of pp->p_nrm. Now this assumes the value in p_nrm has been sync'd to the hardware mechanism used to hold the page status (in the case of x86 this is the pte). What guarantee is there that p_nrm has been sync'd? checkpage() is one routine that will cause this sync'ing to occur. However, it seems possible that while the scanning is happening memory pressure can get to the point where swapout() is invoked with pages that have yet to be scanned (it's possible for checkpage() to wait and allow other threads to process isn't it?). If this is the case then it would be possible for the p_nrm bits not to have been sync'd when segkp_unlock() looks them.
Neale This message posted from opensolaris.org _______________________________________________ opensolaris-code mailing list [email protected] http://mail.opensolaris.org/mailman/listinfo/opensolaris-code
