summaryrefslogtreecommitdiffstats
path: root/sys/i386
diff options
context:
space:
mode:
authoralc <alc@FreeBSD.org>2010-06-03 03:55:22 +0000
committeralc <alc@FreeBSD.org>2010-06-03 03:55:22 +0000
commitef98f25c38c8c0ae820e7bd3576f5ec67421729b (patch)
tree5cf7629f90a8573d57281cd493ba3d467a6f1152 /sys/i386
parent518ce17afab824c438d07ddbb58fa5a8e787bdae (diff)
downloadFreeBSD-src-ef98f25c38c8c0ae820e7bd3576f5ec67421729b.zip
FreeBSD-src-ef98f25c38c8c0ae820e7bd3576f5ec67421729b.tar.gz
In the unlikely event that pmap_ts_referenced() demoted five superpage
mappings to the same underlying physical page, the calling thread would be left forever pinned to the same processor. MFC after: 3 days
Diffstat (limited to 'sys/i386')
-rw-r--r--sys/i386/i386/pmap.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/sys/i386/i386/pmap.c b/sys/i386/i386/pmap.c
index 1316eb8..68c5edc 100644
--- a/sys/i386/i386/pmap.c
+++ b/sys/i386/i386/pmap.c
@@ -4540,7 +4540,7 @@ pmap_ts_referenced(vm_page_t m)
rtval++;
if (rtval > 4) {
PMAP_UNLOCK(pmap);
- return (rtval);
+ goto out;
}
}
}
@@ -4569,6 +4569,7 @@ pmap_ts_referenced(vm_page_t m)
PMAP_UNLOCK(pmap);
} while ((pv = pvn) != NULL && pv != pvf);
}
+out:
sched_unpin();
return (rtval);
}
OpenPOWER on IntegriCloud