Regarding:
http://lists.freebsd.org/pipermail/freebsd-stable/2007-February/033241.html
Konstantin Belousov wrote:
On Thu, Feb 22, 2007 at 06:50:37PM +0000, Jason Thomson wrote:
Try this (already committed to CURRENT as rev. 1.579). I would be very
interesting in getting feedback.
Konstantin,
thanks for your help.
The patch below *appears* to have helped.
The server survived for more than 24 hours under heavy (mysqld / apache)
load.
Previously, it would not typically survive this test for more than 5
hours.
It's difficult to be 100% sure as the server load is not reliably
reproducable.
I will keep you informed of any developments.
Thanks for your help.
Kind regards,
Jason.
Index: sys/amd64/amd64/pmap.c
===================================================================
RCS file: /usr/local/arch/ncvs/src/sys/amd64/amd64/pmap.c,v
retrieving revision 1.578
retrieving revision 1.579
diff -u -r1.578 -r1.579
--- sys/amd64/amd64/pmap.c 18 Feb 2007 06:33:01 -0000 1.578
+++ sys/amd64/amd64/pmap.c 19 Feb 2007 10:55:16 -0000 1.579
@@ -77,7 +77,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.578 2007/02/18 06:33:01 alc Exp
$");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.579 2007/02/19 10:55:16 kib Exp
$");
/*
* Manages physical address maps.
@@ -1542,9 +1542,15 @@
while ((*pmap_pde(kernel_pmap, kernel_vm_end) & PG_V) != 0) {
kernel_vm_end = (kernel_vm_end + PAGE_SIZE * NPTEPG) &
~(PAGE_SIZE * NPTEPG - 1);
nkpt++;
+ if (kernel_vm_end - 1 >= kernel_map->max_offset) {
+ kernel_vm_end = kernel_map->max_offset;
+ break;
+ }
}
}
addr = roundup2(addr, PAGE_SIZE * NPTEPG);
+ if (addr - 1 >= kernel_map->max_offset)
+ addr = kernel_map->max_offset;
while (kernel_vm_end < addr) {
pde = pmap_pde(kernel_pmap, kernel_vm_end);
if (pde == NULL) {
@@ -1562,6 +1568,10 @@
}
if ((*pde & PG_V) != 0) {
kernel_vm_end = (kernel_vm_end + PAGE_SIZE * NPTEPG) &
~(PAGE_SIZE * NPTEPG - 1);
+ if (kernel_vm_end - 1 >= kernel_map->max_offset) {
+ kernel_vm_end = kernel_map->max_offset;
+ break;
+ }
continue;
}
@@ -1581,6 +1591,10 @@
*pmap_pde(kernel_pmap, kernel_vm_end) = newpdir;
kernel_vm_end = (kernel_vm_end + PAGE_SIZE * NPTEPG) & ~(PAGE_SIZE * NPTEPG - 1);
+ if (kernel_vm_end - 1 >= kernel_map->max_offset) {
+ kernel_vm_end = kernel_map->max_offset;
+ break;
+ }
}
}
_______________________________________________
freebsd-stable@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-stable
To unsubscribe, send any mail to "[EMAIL PROTECTED]"