From owner-freebsd-current@FreeBSD.ORG Tue May 9 16:26:40 2006 Return-Path: X-Original-To: freebsd-current@FreeBSD.org 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 5469416A509; Tue, 9 May 2006 16:26:40 +0000 (UTC) (envelope-from scottl@samsco.org) Received: from pooker.samsco.org (pooker.samsco.org [168.103.85.57]) by mx1.FreeBSD.org (Postfix) with ESMTP id 3CDA543D49; Tue, 9 May 2006 16:26:37 +0000 (GMT) (envelope-from scottl@samsco.org) Received: from [192.168.254.14] (imini.samsco.home [192.168.254.14]) (authenticated bits=0) by pooker.samsco.org (8.13.4/8.13.4) with ESMTP id k49GQZJj092921; Tue, 9 May 2006 10:26:35 -0600 (MDT) (envelope-from scottl@samsco.org) Message-ID: <4460C2BB.4060206@samsco.org> Date: Tue, 09 May 2006 10:26:35 -0600 From: Scott Long User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.7.7) Gecko/20050416 X-Accept-Language: en-us, en MIME-Version: 1.0 To: Pawel Jakub Dawidek References: <20060509140312.GA93453@garage.freebsd.pl> In-Reply-To: <20060509140312.GA93453@garage.freebsd.pl> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-1.4 required=3.8 tests=ALL_TRUSTED autolearn=failed version=3.1.1 X-Spam-Checker-Version: SpamAssassin 3.1.1 (2006-03-10) on pooker.samsco.org Cc: green@FreeBSD.org, freebsd-current@FreeBSD.org, scottl@FreeBSD.org Subject: Re: contigmalloc(9) doesn't honour M_NOWAIT. X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.5 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: Tue, 09 May 2006 16:26:40 -0000 Pawel Jakub Dawidek wrote: > Hi. > > Using a USB pendrive can lead to kernel panic because of the issue > mentioned in the subject. > > Trying sleep, but thread marked as sleeping prohibited > KDB: stack backtrace: > kdb_backtrace(c0602d36,1,c0602cb2,112,2) at kdb_backtrace+0x2e > sleepq_add(d7e13af0,c064c0e8,c060f7fd,0,0) at sleepq_add+0xba > msleep(d7e13af0,c064c0e8,44,c060f7fd,0) at msleep+0x209 > bwait(d7e13af0,44,c060f7fd,50a,0) at bwait+0x60 > swap_pager_putpages(c701ed98,e3c3ba44,1,1,e3c3ba00) at swap_pager_putpages+0x497 > vm_pageout_flush(e3c3ba44,1,1,61,3db) at vm_pageout_flush+0x172 > vm_contig_launder_page(c1ccbdb8,0,0,1ff,ffffffff) at vm_contig_launder_page+0x29b > vm_page_alloc_contig(4,0,0,ffffffff,1) at vm_page_alloc_contig+0x398 > contigmalloc(4000,c0627840,1,0,ffffffff) at contigmalloc+0xb5 > bus_dmamem_alloc(c455b280,c6531048,5,c6531044,ffffffff) at bus_dmamem_alloc+0xde > usb_block_allocmem(1,c51a913c,c479969c,c51a9100,c51a9100) at usb_block_allocmem+0x11a > usb_allocmem(c455f000,4000,0,c51a913c,e3c3bbc4) at usb_allocmem+0x11c > ehci_allocm(c455f000,c51a913c,4000,0,e3c3bbf0) at ehci_allocm+0x25 > usbd_transfer(c51a9100,c4816400,c503ac00,d9cc1000,4000) at usbd_transfer+0xec > umass_setup_transfer(d9cc1000,4000,4,c51a9100,e3c3bc1c) at umass_setup_transfer+0x49 > umass_bbb_state(c51b8c00,c503ac00,0,1f,0) at umass_bbb_state+0xd6 > usb_transfer_complete(c51b8c00,c51b8c70,adc,e3c3bcb0,0) at usb_transfer_complete+0x1e7 > ehci_softintr(c455f000,c05fd1d2,e3c3bcb0,c0499a28,e6047000) at ehci_softintr+0x17d > ehci_intr1(c455f000,0,c05fd1d2,295,1) at ehci_intr1+0x276 > ithread_execute_handlers(c45da8d0,c4510800,c05fd1d2,2f9,c45db1b0) at ithread_execute_handlers+0x128 > ithread_loop(c460c2f0,e3c3bd38,c05fcfab,32b,0) at ithread_loop+0x83 > fork_exit(c048b2e0,c460c2f0,e3c3bd38) at fork_exit+0xc3 > fork_trampoline() at fork_trampoline+0x8 > --- trap 0x1, eip = 0, esp = 0xe3c3bd6c, ebp = 0 --- > > Umass tries to allocate memory using bus_dmamem_alloc() with > BUS_DMA_NOWAIT flag, but contigmalloc() ignores the flag and simply can > sleep waiting for some memory to be reclaimed. > We don't allow to sleep in interrupt context, so the kernel panics. > > PS. I replaced the assertion on my laptop with a printf, because it was > triggered way too often. > busdma is likely the wrong thing to use here anyways. I'll look at it. Scott