From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757584AbZAIV2e (ORCPT ); Fri, 9 Jan 2009 16:28:34 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1754210AbZAIV2X (ORCPT ); Fri, 9 Jan 2009 16:28:23 -0500 Received: from mms3.broadcom.com ([216.31.210.19]:3498 "EHLO MMS3.broadcom.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755401AbZAIV2W (ORCPT ); Fri, 9 Jan 2009 16:28:22 -0500 X-Server-Uuid: B55A25B1-5D7D-41F8-BC53-C57E7AD3C201 Subject: Re: [PATCH 0/16] DMA-API debugging facility v2 From: "Michael Chan" To: "Joerg Roedel" cc: "linux-kernel@vger.kernel.org" , "mingo@redhat.com" , "dwmw2@infradead.org" , "fujita.tomonori@lab.ntt.co.jp" , "netdev@vger.kernel.org" , "iommu@lists.linux-foundation.org" In-Reply-To: <1231517970-20288-1-git-send-email-joerg.roedel@amd.com> References: <1231517970-20288-1-git-send-email-joerg.roedel@amd.com> Date: Fri, 09 Jan 2009 13:24:24 -0800 Message-ID: <1231536264.10384.11.camel@HP1> MIME-Version: 1.0 X-Mailer: Evolution 2.12.3 (2.12.3-8.el5) X-WSS-ID: 65791EE037G36082305-01-01 Content-Type: text/plain Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, 2009-01-09 at 08:19 -0800, Joerg Roedel wrote: > > With the code these patches introduce driver developers can find several > bugs of misusing the DMA-API in their drivers. But be aware, it can not > find all possible bugs. If it finds a problem it prints out messages > like > > ------------[ cut here ]------------ > WARNING: at /data2/repos/linux.trees.git/lib/dma-debug.c:231 check_unmap+0xab/0x3d9() > Hardware name: Toonie > bnx2 0000:01:00.0: DMA-API: device driver tries to free DMA memory it has not allocated [device address=0x00000000011] > Modules linked in: > Pid: 0, comm: swapper Not tainted 2.6.28 #174 > Call Trace: > [] warn_slowpath+0xd3/0xf2 > [] ? find_usage_backwards+0xe2/0x116 > [] ? find_usage_backwards+0xe2/0x116 > [] ? usb_hcd_link_urb_to_ep+0x94/0xa0 > [] ? mark_lock+0x1c/0x364 > [] ? __lock_acquire+0xaec/0xb55 > [] ? mark_lock+0x1c/0x364 > [] ? get_hash_bucket+0x28/0x33 > [] ? _spin_lock_irqsave+0x69/0x75 > [] ? get_hash_bucket+0x28/0x33 > [] check_unmap+0xab/0x3d9 > [] ? trace_hardirqs_on_caller+0x108/0x14a > [] ? trace_hardirqs_on+0xd/0xf > [] debug_unmap_single+0x3e/0x40 > [] dma_unmap_single+0x3d/0x60 > [] pci_unmap_page+0x1c/0x1e > [] bnx2_poll_work+0x626/0x8cb > [] ? __lock_acquire+0xaec/0xb55 > [] ? run_posix_cpu_timers+0x49c/0x603 > [] ? run_posix_cpu_timers+0x39c/0x603 > [] ? mark_lock+0x1c/0x364 > [] ? __lock_acquire+0xaec/0xb55 > [] bnx2_poll_msix+0x33/0x81 > [] net_rx_action+0x8a/0x139 > [] __do_softirq+0x8b/0x147 > [] call_softirq+0x1c/0x34 > [] do_softirq+0x39/0x90 > [] irq_exit+0x4e/0x98 > [] do_IRQ+0x11f/0x135 > [] ret_from_intr+0x0/0xf > <4>---[ end trace 4339d58302097423 ]--- > This was triggered during pci_unmap_page() -> dma_unmap_single() where check_unmap() did not find the entry. The original mapping was done in bnx2 using pci_map_page(). I did not see how the debug entry was added to the hash during the call to pci_map_page() -> dma_map_page(). Did I miss something? Thanks.