From owner-freebsd-bugs@FreeBSD.ORG Wed Feb 20 14:40:02 2008 Return-Path: Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id D43E316A402 for ; Wed, 20 Feb 2008 14:40:02 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by mx1.freebsd.org (Postfix) with ESMTP id AD38F13C461 for ; Wed, 20 Feb 2008 14:40:02 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.14.2/8.14.2) with ESMTP id m1KEe2P2026783 for ; Wed, 20 Feb 2008 14:40:02 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.2/8.14.1/Submit) id m1KEe2D4026782; Wed, 20 Feb 2008 14:40:02 GMT (envelope-from gnats) Resent-Date: Wed, 20 Feb 2008 14:40:02 GMT Resent-Message-Id: <200802201440.m1KEe2D4026782@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, Tobias Mohrlueder Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 5B91716A401 for ; Wed, 20 Feb 2008 14:30:56 +0000 (UTC) (envelope-from nobody@FreeBSD.org) Received: from www.freebsd.org (www.freebsd.org [IPv6:2001:4f8:fff6::21]) by mx1.freebsd.org (Postfix) with ESMTP id 44A0913C45B for ; Wed, 20 Feb 2008 14:30:56 +0000 (UTC) (envelope-from nobody@FreeBSD.org) Received: from www.freebsd.org (localhost [127.0.0.1]) by www.freebsd.org (8.14.2/8.14.2) with ESMTP id m1KESNZY005034 for ; Wed, 20 Feb 2008 14:28:23 GMT (envelope-from nobody@www.freebsd.org) Received: (from nobody@localhost) by www.freebsd.org (8.14.2/8.14.1/Submit) id m1KESNdO005033; Wed, 20 Feb 2008 14:28:23 GMT (envelope-from nobody) Message-Id: <200802201428.m1KESNdO005033@www.freebsd.org> Date: Wed, 20 Feb 2008 14:28:23 GMT From: Tobias Mohrlueder To: freebsd-gnats-submit@FreeBSD.org X-Send-Pr-Version: www-3.1 Cc: Subject: misc/120884: bktr driver always stores the contigmalloc'ed memory pointers X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 20 Feb 2008 14:40:02 -0000 >Number: 120884 >Category: misc >Synopsis: bktr driver always stores the contigmalloc'ed memory pointers >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Wed Feb 20 14:40:02 UTC 2008 >Closed-Date: >Last-Modified: >Originator: Tobias Mohrlueder >Release: RELENG_7 >Organization: >Environment: FreeBSD acheron.local.lan 7.0-PRERELEASE FreeBSD 7.0-PRERELEASE #0: Fri Feb 8 19:54:00 CET 2008 tobiasmo@acheron.local.lan:/usr/obj/usr/src/sys/ACHERON i386 >Description: While building world on my machine, I experienced a problem with the bktr driver module. One contigmalloc() call failed and as a result, the module was left in a defective state. Any further load attempts were futile, because the bktr memory loader cannot be unloaded (and the driver keeps thinking that there already is enough memory allocated). >From /var/log/messages: Jan 15 17:01:13 acheron kernel: bktr0: Unable to allocate 3555328 bytes of memory. bktr_mem.c's sole purpose is to avoid the situation of having to contigmalloc() memory everytime the bktr module is loaded, so maybe this is a known "problem" and the solution is to load the module at boot time. >How-To-Repeat: Although not an exact guide how to repeat the problem; 1) Put the machine under load (e.g. make buildworld) 2) kldload bktr >Fix: Load the module at boot time. Or: Maybe the attached patch helps. It looks like a trivial problem, but I am not a seasoned programmer. Patch attached with submission follows: --- /usr/src/sys/dev/bktr/bktr_core.c 2005-12-04 11:06:03.000000000 +0100 +++ bktr_core.c 2008-02-19 17:15:01.000000000 +0100 @@ -528,11 +528,17 @@ /* If this is a module, save the current contiguous memory */ #if defined(BKTR_FREEBSD_MODULE) -bktr_store_address(unit, BKTR_MEM_DMA_PROG, bktr->dma_prog); -bktr_store_address(unit, BKTR_MEM_ODD_DMA_PROG, bktr->odd_dma_prog); -bktr_store_address(unit, BKTR_MEM_VBIDATA, bktr->vbidata); -bktr_store_address(unit, BKTR_MEM_VBIBUFFER, bktr->vbibuffer); -bktr_store_address(unit, BKTR_MEM_BUF, buf); + + /* Only save when all relevant get_bktr_mem() calls succeeded */ + if ( bktr->dma_prog != 0 && bktr->odd_dma_prog != 0 && + bktr->vbidata != 0 && bktr->vbibuffer != 0 && + ( BROOKTREE_ALLOC ? buf != 0 : 1 ) ) { + bktr_store_address(unit, BKTR_MEM_DMA_PROG, bktr->dma_prog); + bktr_store_address(unit, BKTR_MEM_ODD_DMA_PROG, bktr->odd_dma_prog); + bktr_store_address(unit, BKTR_MEM_VBIDATA, bktr->vbidata); + bktr_store_address(unit, BKTR_MEM_VBIBUFFER, bktr->vbibuffer); + bktr_store_address(unit, BKTR_MEM_BUF, buf); + } #endif >Release-Note: >Audit-Trail: >Unformatted: