summaryrefslogtreecommitdiff
path: root/usr/src/uts/sfmmu/vm
diff options
context:
space:
mode:
authoraguzovsk <none@none>2008-05-22 22:23:49 -0700
committeraguzovsk <none@none>2008-05-22 22:23:49 -0700
commita98e9dbfaecb09c4032dc0076786bd835f25eab3 (patch)
tree2fe194d578bd61221d093cd798fcef4757ca76e3 /usr/src/uts/sfmmu/vm
parent963390b497bb4a7103b44028e033f1dbb5c81964 (diff)
downloadillumos-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.c35
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);