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]"

Reply via email to