diff options
Diffstat (limited to 'usr/src/uts/sfmmu/vm/hat_sfmmu.c')
| -rw-r--r-- | usr/src/uts/sfmmu/vm/hat_sfmmu.c | 35 |
1 files changed, 15 insertions, 20 deletions
diff --git a/usr/src/uts/sfmmu/vm/hat_sfmmu.c b/usr/src/uts/sfmmu/vm/hat_sfmmu.c index 9c7e706005..378839bf11 100644 --- a/usr/src/uts/sfmmu/vm/hat_sfmmu.c +++ b/usr/src/uts/sfmmu/vm/hat_sfmmu.c @@ -7379,28 +7379,23 @@ hat_pagesync(struct page *pp, uint_t clearflag) return (PP_GENERIC_ATTR(pp)); } - if ((clearflag == (HAT_SYNC_STOPON_REF | HAT_SYNC_DONTZERO)) && - PP_ISREF(pp)) { - return (PP_GENERIC_ATTR(pp)); - } - - if ((clearflag == (HAT_SYNC_STOPON_MOD | HAT_SYNC_DONTZERO)) && - PP_ISMOD(pp)) { - return (PP_GENERIC_ATTR(pp)); - } - - if ((clearflag & HAT_SYNC_STOPON_SHARED) != 0 && - (pp->p_share > po_share) && - !(clearflag & HAT_SYNC_ZERORM)) { - hat_page_setattr(pp, P_REF); - return (PP_GENERIC_ATTR(pp)); + if ((clearflag & HAT_SYNC_ZERORM) == 0) { + if ((clearflag & HAT_SYNC_STOPON_REF) && PP_ISREF(pp)) { + return (PP_GENERIC_ATTR(pp)); + } + if ((clearflag & HAT_SYNC_STOPON_MOD) && PP_ISMOD(pp)) { + return (PP_GENERIC_ATTR(pp)); + } + if (clearflag & HAT_SYNC_STOPON_SHARED) { + if (pp->p_share > po_share) { + hat_page_setattr(pp, P_REF); + return (PP_GENERIC_ATTR(pp)); + } + stop_on_sh = 1; + shcnt = 0; + } } - if ((clearflag & HAT_SYNC_STOPON_SHARED) && - !(clearflag & HAT_SYNC_ZERORM)) { - stop_on_sh = 1; - shcnt = 0; - } clearflag &= ~HAT_SYNC_STOPON_SHARED; pml = sfmmu_mlist_enter(pp); index = PP_MAPINDEX(pp); |
