diff options
| author | aguzovsk <none@none> | 2008-05-22 22:23:49 -0700 |
|---|---|---|
| committer | aguzovsk <none@none> | 2008-05-22 22:23:49 -0700 |
| commit | a98e9dbfaecb09c4032dc0076786bd835f25eab3 (patch) | |
| tree | 2fe194d578bd61221d093cd798fcef4757ca76e3 /usr/src/uts/sfmmu/vm | |
| parent | 963390b497bb4a7103b44028e033f1dbb5c81964 (diff) | |
| download | illumos-joyent-a98e9dbfaecb09c4032dc0076786bd835f25eab3.tar.gz | |
6423097 segvn_pagelock() may perform very poorly
6526804 DR delete_memory_thread, AIO, and segvn deadlock
6557794 segspt_dismpagelock() and segspt_shmadvise(MADV_FREE) may deadlock
6557813 seg_ppurge_seg() shouldn't flush all unrelated ISM/DISM segments
6557891 softlocks/pagelocks of anon pages should not decrement availrmem for memory swapped pages
6559612 multiple softlocks on a DISM segment should decrement availrmem just once
6562291 page_mem_avail() is stuck due to availrmem overaccounting and lack of seg_preap() calls
6596555 locked anonymous pages should not have assigned disk swap slots
6639424 hat_sfmmu.c:hat_pagesync() doesn't handle well HAT_SYNC_STOPON_REF and HAT_SYNC_STOPON_MOD flags
6639425 optimize checkpage() optimizations
6662927 page_llock contention during I/O
Diffstat (limited to 'usr/src/uts/sfmmu/vm')
| -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); |
