From owner-freebsd-current@FreeBSD.ORG Fri Apr 30 14:04:12 2004 Return-Path: Delivered-To: freebsd-current@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 7D82F16A4CE for ; Fri, 30 Apr 2004 14:04:12 -0700 (PDT) Received: from carver.gumbysoft.com (carver.gumbysoft.com [66.220.23.50]) by mx1.FreeBSD.org (Postfix) with ESMTP id 643D443D5A for ; Fri, 30 Apr 2004 14:04:12 -0700 (PDT) (envelope-from dwhite@gumbysoft.com) Received: by carver.gumbysoft.com (Postfix, from userid 1000) id 4627972DF1; Fri, 30 Apr 2004 14:04:12 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by carver.gumbysoft.com (Postfix) with ESMTP id 437CB72DBF for ; Fri, 30 Apr 2004 14:04:12 -0700 (PDT) Date: Fri, 30 Apr 2004 14:04:12 -0700 (PDT) From: Doug White To: current@freebsd.org Message-ID: <20040430135155.C67990@carver.gumbysoft.com> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Subject: src/sys/vm/vm_init.c v1.43 hangs amd64 X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 30 Apr 2004 21:04:12 -0000 Hello, I've been having problems with adm64 hanging under load on my dual opteron 244 machine. Its a HDAMA mainboard with 2GB RAM. The problems started around April 8. I finally found some time this week to narrow down the commit that causes the breakage; its rev 1.43 of src/sys/vm/vm_init.c. Whats really wierd and creepy is that I can fix the hang by adding 0 to the size argument of a kmem_suballoc() call. This leads me to think there's a gcc bug creeping around here somewhere. In rev 1.42, line 192 of src/sys/vm/vm_init.c looks like this: pager_map = kmem_suballoc(clean_map, &kmi->pager_sva, &kmi->pager_eva, (nswbuf*MAXPHYS) + pager_map_size); rev 1.43 looks like this: pager_map = kmem_suballoc(clean_map, &kmi->pager_sva, &kmi->pager_eva, (nswbuf*MAXPHYS)); If I change this line to: pager_map = kmem_suballoc(clean_map, &kmi->pager_sva, &kmi->pager_eva, (nswbuf*MAXPHYS) + 0 ); the hang goes away. The last argument to kmem_suballoc is a vm_size_t; I'm wondering if there is some odd type conversion going on, and that the +0 causes a different conversion. I'm compiling with the default CFLAGS, which includes -O2. I can't seem to find the knob to change it back to -O to test for a optimization bug. Insights appreciated :) -- Doug White | FreeBSD: The Power to Serve dwhite@gumbysoft.com | www.FreeBSD.org