From owner-freebsd-x11@freebsd.org Tue Apr 30 10:58:15 2019 Return-Path: Delivered-To: freebsd-x11@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 34D67158CD9A for ; Tue, 30 Apr 2019 10:58:15 +0000 (UTC) (envelope-from zeising@freebsd.org) Received: from mailman.ysv.freebsd.org (mailman.ysv.freebsd.org [IPv6:2001:1900:2254:206a::50:5]) by mx1.freebsd.org (Postfix) with ESMTP id C0CDD6A844 for ; Tue, 30 Apr 2019 10:58:14 +0000 (UTC) (envelope-from zeising@freebsd.org) Received: by mailman.ysv.freebsd.org (Postfix) id 8169D158CD99; Tue, 30 Apr 2019 10:58:14 +0000 (UTC) Delivered-To: x11@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 5EE7B158CD98 for ; Tue, 30 Apr 2019 10:58:14 +0000 (UTC) (envelope-from zeising@freebsd.org) Received: from mail.daemonic.se (mail.daemonic.se [176.58.89.161]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id DA4826A841; Tue, 30 Apr 2019 10:58:13 +0000 (UTC) (envelope-from zeising@freebsd.org) Received: from cid.daemonic.se (localhost [IPv6:::1]) by mail.daemonic.se (Postfix) with ESMTP id 44tdmM6YQVzDjs5; Tue, 30 Apr 2019 10:58:11 +0000 (UTC) X-Virus-Scanned: amavisd-new at daemonic.se Received: from mail.daemonic.se ([127.0.0.1]) (using TLS with cipher ECDHE-RSA-AES128-GCM-SHA256) by cid.daemonic.se (mailscanner.daemonic.se [127.0.0.1]) (amavisd-new, port 10587) with ESMTPS id YMGIzijHnKa6; Tue, 30 Apr 2019 10:58:11 +0000 (UTC) Received: from garnet.daemonic.se (host-95-192-79-116.mobileonline.telia.com [95.192.79.116]) by mail.daemonic.se (Postfix) with ESMTPSA id 44tdmL52BxzDjp8; Tue, 30 Apr 2019 10:58:10 +0000 (UTC) Subject: Re: drm-current-kmod-4.16.g20190424 hangs To: Andrey Fesenko , Jakob Alvermark Cc: x11@freebsd.org, johalun@freebsd.org, tychon@freebsd.org, kostikbel@gmail.com, oleg@theweb.org.ua References: <5713985b-e97f-c7f2-2592-47a17baf8095@alvermark.net> <12e450ab-2c17-11e3-ba47-20599c38f3a3@gmail.com> <8dcf1fed-8f89-3e11-5fe1-b3a72e6971b0@alvermark.net> <5eab5bae-fd3c-0839-9d93-a8b7a4096f6d@alvermark.net> <15e1052f-1c96-fe2f-acdb-5730ccd8dfb5@alvermark.net> Reply-To: x11@freebsd.org From: Niclas Zeising Message-ID: <332ccf6d-fb54-de70-2e09-22ff1f1acbac@freebsd.org> Date: Tue, 30 Apr 2019 12:58:09 +0200 User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:60.0) Gecko/20100101 Thunderbird/60.6.1 MIME-Version: 1.0 In-Reply-To: Content-Type: multipart/mixed; boundary="------------8AAE32C461606048D3D7FDC5" Content-Language: en-US X-Rspamd-Queue-Id: DA4826A841 X-Spamd-Bar: ------ Authentication-Results: mx1.freebsd.org X-Spamd-Result: default: False [-6.97 / 15.00]; NEURAL_HAM_MEDIUM(-1.00)[-1.000,0]; NEURAL_HAM_LONG(-1.00)[-1.000,0]; REPLY(-4.00)[]; NEURAL_HAM_SHORT(-0.97)[-0.970,0] X-BeenThere: freebsd-x11@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: X11 on FreeBSD -- maintaining and support List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 30 Apr 2019 10:58:15 -0000 This is a multi-part message in MIME format. --------------8AAE32C461606048D3D7FDC5 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Hi! Attached is a patch from Tycho that possibly fixes the issue. Please test it and see what happens. When replying, please respect reply-to and trim down the cc list a bit. Thanks! Regards -- Niclas Zeising FreeBSD Graphics Team --------------8AAE32C461606048D3D7FDC5 Content-Type: text/x-patch; name="head.sys.lkpi.dmar.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="head.sys.lkpi.dmar.diff" Index: sys/compat/linuxkpi/common/src/linux_pci.c =================================================================== --- sys/compat/linuxkpi/common/src/linux_pci.c (revision 346957) +++ sys/compat/linuxkpi/common/src/linux_pci.c (working copy) @@ -565,10 +565,8 @@ { struct linux_dma_priv *priv; struct linux_dma_obj *obj; - struct scatterlist *dma_sg, *sg; - int dma_nents, error, nseg; - size_t seg_len; - vm_paddr_t seg_phys, prev_phys_end; + struct scatterlist *sg; + int error, i, nseg; bus_dma_segment_t seg; priv = dev->dma_priv; @@ -580,25 +578,11 @@ return (0); } - sg = sgl; - dma_sg = sg; - dma_nents = 0; - while (nents > 0) { - seg_phys = sg_phys(sg); - seg_len = sg->length; - while (--nents > 0) { - prev_phys_end = sg_phys(sg) + sg->length; - sg = sg_next(sg); - if (prev_phys_end != sg_phys(sg)) - break; - seg_len += sg->length; - } - + for_each_sg(sgl, sg, nents, i) { nseg = -1; mtx_lock(&priv->dma_lock); if (_bus_dmamap_load_phys(priv->dmat, obj->dmamap, - seg_phys, seg_len, BUS_DMA_NOWAIT, - &seg, &nseg) != 0) { + sg_phys(sg), sg->length, 0, &seg, &nseg) != 0) { bus_dmamap_unload(priv->dmat, obj->dmamap); bus_dmamap_destroy(priv->dmat, obj->dmamap); mtx_unlock(&priv->dma_lock); @@ -607,14 +591,9 @@ } mtx_unlock(&priv->dma_lock); KASSERT(++nseg == 1, ("More than one segment (nseg=%d)", nseg)); + sg_dma_address(sg) = seg.ds_addr; + } - sg_dma_address(dma_sg) = seg.ds_addr; - sg_dma_len(dma_sg) = seg.ds_len; - - dma_sg = sg_next(dma_sg); - dma_nents++; - } - obj->dma_addr = sg_dma_address(sgl); mtx_lock(&priv->ptree_lock); @@ -629,7 +608,7 @@ return (0); } - return (dma_nents); + return (nents); } void --------------8AAE32C461606048D3D7FDC5--