From owner-freebsd-amd64@FreeBSD.ORG Sat Apr 11 02:40:02 2009 Return-Path: Delivered-To: freebsd-amd64@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 295A9106568A for ; Sat, 11 Apr 2009 02: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 554358FC1D for ; Sat, 11 Apr 2009 02:40:01 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.14.3/8.14.3) with ESMTP id n3B2e1Ya071357 for ; Sat, 11 Apr 2009 02:40:01 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.3/8.14.3/Submit) id n3B2e1Bi071356; Sat, 11 Apr 2009 02:40:01 GMT (envelope-from gnats) Resent-Date: Sat, 11 Apr 2009 02:40:01 GMT Resent-Message-Id: <200904110240.n3B2e1Bi071356@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-amd64@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, Jason Harmening Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 3B9B61065670 for ; Sat, 11 Apr 2009 02:37:18 +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 29ED98FC0A for ; Sat, 11 Apr 2009 02:37:18 +0000 (UTC) (envelope-from nobody@FreeBSD.org) Received: from www.freebsd.org (localhost [127.0.0.1]) by www.freebsd.org (8.14.3/8.14.3) with ESMTP id n3B2bHkd015742 for ; Sat, 11 Apr 2009 02:37:17 GMT (envelope-from nobody@www.freebsd.org) Received: (from nobody@localhost) by www.freebsd.org (8.14.3/8.14.3/Submit) id n3B2bHvE015726; Sat, 11 Apr 2009 02:37:17 GMT (envelope-from nobody) Message-Id: <200904110237.n3B2bHvE015726@www.freebsd.org> Date: Sat, 11 Apr 2009 02:37:17 GMT From: Jason Harmening To: freebsd-gnats-submit@FreeBSD.org X-Send-Pr-Version: www-3.1 X-Mailman-Approved-At: Sat, 11 Apr 2009 03:02:59 +0000 Cc: Subject: amd64/133592: busdma incorrectly calculates bounce buffer requirements for userspace buffers X-BeenThere: freebsd-amd64@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting FreeBSD to the AMD64 platform List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 11 Apr 2009 02:40:02 -0000 >Number: 133592 >Category: amd64 >Synopsis: busdma incorrectly calculates bounce buffer requirements for userspace buffers >Confidential: no >Severity: non-critical >Priority: medium >Responsible: freebsd-amd64 >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Sat Apr 11 02:40:00 UTC 2009 >Closed-Date: >Last-Modified: >Originator: Jason Harmening >Release: 7.2-PRERELEASE >Organization: >Environment: FreeBSD CORONA 7.2-PRERELEASE FreeBSD 7.2-PRERELEASE #2: Sat Mar 21 00:30:34 CDT 2009 jason@CORONA:/usr/obj/usr/src/sys/CUSTOM amd64 >Description: The _bus_dmamap_load_buffer function in sys/amd64/amd64/busdma_machdep.c takes a pmap_t param indicating the address space of the buffer (NULL => KVA space). When calculating the number of bounce buffers to reserve, it always calls pmap_kextract() to get the physical address, when it should call pmap_extract() if pmap != NULL. The problem exists in both 7-STABLE and 8-CURRENT--the attached patch is against 7-STABLE. >How-To-Repeat: >Fix: Patch attached with submission follows: --- busdma_machdep.c.bkp 2009-04-10 21:27:51.000000000 -0500 +++ busdma_machdep.c 2009-04-10 21:30:58.000000000 -0500 @@ -602,7 +602,10 @@ vendaddr = (vm_offset_t)buf + buflen; while (vaddr < vendaddr) { - paddr = pmap_kextract(vaddr); + if (pmap) + paddr = pmap_extract(pmap, vaddr); + else + paddr = pmap_kextract(vaddr); if (run_filter(dmat, paddr) != 0) map->pagesneeded++; vaddr += PAGE_SIZE; >Release-Note: >Audit-Trail: >Unformatted: