Author: alc
Date: Thu Nov 26 19:12:18 2015
New Revision: 291370
URL: https://svnweb.freebsd.org/changeset/base/291370
Log:
Correct an error in vm_reserv_reclaim_contig(). In the highly unusual
case that the reservation contained "low", the starting position in the
popmap for the free page search was incorrectly calculated. The most
likely (and visible) symptom of this error was the assertion failure,
"vm_reserv_reclaim_contig: pa is too low".
Modified:
head/sys/vm/vm_reserv.c
Modified: head/sys/vm/vm_reserv.c
==============================================================================
--- head/sys/vm/vm_reserv.c Thu Nov 26 18:56:21 2015 (r291369)
+++ head/sys/vm/vm_reserv.c Thu Nov 26 19:12:18 2015 (r291370)
@@ -971,7 +971,7 @@ vm_reserv_reclaim_contig(u_long npages,
{
vm_paddr_t pa, size;
vm_reserv_t rv;
- int hi, i, lo, next_free;
+ int hi, i, lo, low_index, next_free;
mtx_assert(&vm_page_queue_free_mtx, MA_OWNED);
if (npages > VM_LEVEL_0_NPAGES - 1)
@@ -990,8 +990,9 @@ vm_reserv_reclaim_contig(u_long npages,
}
if (pa < low) {
/* Start the search for free pages at "low". */
- i = (low - pa) / NBPOPMAP;
- hi = (low - pa) % NBPOPMAP;
+ low_index = (low + PAGE_MASK - pa) >> PAGE_SHIFT;
+ i = low_index / NBPOPMAP;
+ hi = low_index % NBPOPMAP;
} else
i = hi = 0;
do {
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "[email protected]"