Received: by 10.192.165.148 with SMTP id m20csp314606imm; Tue, 24 Apr 2018 23:14:48 -0700 (PDT) X-Google-Smtp-Source: AIpwx4/0afnn7GhGLidV77pmxLMeq134K7ceBVQnY/XaMl/GFNyr3jdQDvsiKZz6d51z8PwuSAA/ X-Received: by 10.99.62.201 with SMTP id l192mr22514752pga.318.1524636888402; Tue, 24 Apr 2018 23:14:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1524636888; cv=none; d=google.com; s=arc-20160816; b=SM1Zt2aWfpnNYQX7GvljVz/MvNYA3RuteXVbi0/TWbO4g2sNV35dxIaoQzhtQDYFXl wXZHapa7p5T1zkZpcRXFF1eHRD7F2hqeQDXAz2MCb9cImvdgY6oCOwSE06bOcu1ydeI7 QfwZQcIPUborr3hHLpxnKndqBzYcV3TUtRXt+TQ5bLp/2QEYHOq2br96TfO/hsCECvPU Rwrh/2HH4Bjil1qGJ+rO0FzzxIaEO58wPkkCL6sUL43f6z5QKNgId5wDViwBh+Xn7t31 ksu+WjpSneZkWS66OQ78hqYaofaE5Z6CnFShFCUOeZG1/N+LYjMUKiYiMwRu/mByNls/ VwTw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:cc:to:subject :message-id:date:from:references:in-reply-to:mime-version :dkim-signature:arc-authentication-results; bh=jR0W8FCfk3hjagi4MduCK3mk8oW1ORsrZgCtiV27dyI=; b=hXXpYqGuTuQ9/DckyxPWha0KE26/pGT0d16BCEbdqrmximhXWcBlxbmVSlciDXCkd8 oPLJ2V98q+QlgRiiwOf+hEA4567i1ovmYzmK7CrjEaFv4IQ0toChi/zguTmo5h7ekaIc 2lI6tJ/7rPargRXJhZRdVrW+6VmWj9/4Oz0HlwwheswgCKUvVpwQNYA3A9yrbcq4RNAm AOaU6Xn5iFEKsE6hcg74UM3603KgsMntUi4hTEKCf6+2W1ngHv5hPjtR4A63KhnIhi9K tjyyKj5zCIzQgFp3hiHHP9CNEJyOtjfOk7SjE57wPo3dHdP+SO224dMT6xsMlY2VEKIY t6Hw== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@ffwll.ch header.s=google header.b=IlIbblf8; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id g3si13099466pgr.635.2018.04.24.23.14.34; Tue, 24 Apr 2018 23:14:48 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=fail header.i=@ffwll.ch header.s=google header.b=IlIbblf8; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751394AbeDYGN3 (ORCPT + 99 others); Wed, 25 Apr 2018 02:13:29 -0400 Received: from mail-io0-f180.google.com ([209.85.223.180]:38112 "EHLO mail-io0-f180.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751064AbeDYGNZ (ORCPT ); Wed, 25 Apr 2018 02:13:25 -0400 Received: by mail-io0-f180.google.com with SMTP id z4-v6so1874281iof.5 for ; Tue, 24 Apr 2018 23:13:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ffwll.ch; s=google; h=mime-version:sender:in-reply-to:references:from:date:message-id :subject:to:cc:content-transfer-encoding; bh=jR0W8FCfk3hjagi4MduCK3mk8oW1ORsrZgCtiV27dyI=; b=IlIbblf87EOMHcJmvsD55Slns/MDziEpPGQhq2A4D5u5vlvAPTH86hYfvSWLkyTGEd 2T8Oq51ppRrRaZv+Xd5/KeyQcU49ebUoXVzmry9HsOPDY1hXhPOaOogcM4PUKSXBE4Df wh6InSTesdQ6m98CdWoKVSpT87spCmtNz8c70= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:sender:in-reply-to:references:from :date:message-id:subject:to:cc:content-transfer-encoding; bh=jR0W8FCfk3hjagi4MduCK3mk8oW1ORsrZgCtiV27dyI=; b=X6c7w1L/roNmgcnvVZuhviGy/9InEdtJzH0aykpo/zs4RhC24zUUpigpOOd6bRR8v8 4CPO19X5lB+qqT4vkk6s/Nd5c0IEwwJFgiHOD8ktDZs6HX8J7kI1/o1kUyeb4PzH40LA N9xP4V4Q8BeUQoFk0OIXX3Qd1aiP02Gy2OIsxPHZeDZqHDvya45jwOXjUllyMhLF1B+A x/KPxcR2oTMM0CD/mygCAgwYel/jnZiAU1iP014lTrgnOzBtyn3EGTSPEgmc3lDvVBDj JImwedq61awDyrfSN8FgDAJk9vwUVG/tSN2yEuMAO5XqMEsY/Qy2lqbjZTeMre3xlMVi TvLg== X-Gm-Message-State: ALQs6tCfHNHcEKFxJXNCLTWQ50WHxXKnPvLpxZbH+KDY5RyMZoUXFsIJ VKQ2Fncd0tpNrDhyUTwoSexaDjl9+Uf1Lpi9I7FSRg== X-Received: by 2002:a6b:10a0:: with SMTP id 32-v6mr20213799ioq.78.1524636804844; Tue, 24 Apr 2018 23:13:24 -0700 (PDT) MIME-Version: 1.0 Received: by 2002:a4f:5b42:0:0:0:0:0 with HTTP; Tue, 24 Apr 2018 23:13:24 -0700 (PDT) X-Originating-IP: [2a02:168:5635:0:39d2:f87e:2033:9f6] In-Reply-To: <20180425054855.GA17038@infradead.org> References: <20180419081657.GA16735@infradead.org> <20180420071312.GF31310@phenom.ffwll.local> <3e17afc5-7d6c-5795-07bd-f23e34cf8d4b@gmail.com> <20180420101755.GA11400@infradead.org> <20180420124625.GA31078@infradead.org> <20180420152111.GR31310@phenom.ffwll.local> <20180424184847.GA3247@infradead.org> <20180425054855.GA17038@infradead.org> From: Daniel Vetter Date: Wed, 25 Apr 2018 08:13:24 +0200 X-Google-Sender-Auth: TiDhQHRVijyDbxaKRETNQazVEBY Message-ID: Subject: Re: [Linaro-mm-sig] [PATCH 4/8] dma-buf: add peer2peer flag To: Christoph Hellwig Cc: =?UTF-8?Q?Christian_K=C3=B6nig?= , "moderated list:DMA BUFFER SHARING FRAMEWORK" , Linux Kernel Mailing List , amd-gfx list , Jerome Glisse , dri-devel , Dan Williams , Logan Gunthorpe , "open list:DMA BUFFER SHARING FRAMEWORK" Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, Apr 25, 2018 at 7:48 AM, Christoph Hellwig wrot= e: > On Tue, Apr 24, 2018 at 09:32:20PM +0200, Daniel Vetter wrote: >> Out of curiosity, how much virtual flushing stuff is there still out >> there? At least in drm we've pretty much ignore this, and seem to be >> getting away without a huge uproar (at least from driver developers >> and users, core folks are less amused about that). > > As I've just been wading through the code, the following architectures > have non-coherent dma that flushes by virtual address for at least some > platforms: > > - arm [1], arm64, hexagon, nds32, nios2, parisc, sh, xtensa, mips, > powerpc > > These have non-coherent dma ops that flush by physical address: > > - arc, arm [1], c6x, m68k, microblaze, openrisc, sparc > > And these do not have non-coherent dma ops at all: > > - alpha, h8300, riscv, unicore32, x86 > > [1] arm =D1=95eems to do both virtually and physically based ops, further > audit needed. > > Note that using virtual addresses in the cache flushing interface > doesn't mean that the cache actually is virtually indexed, but it at > least allows for the possibility. > >> > I think the most important thing about such a buffer object is that >> > it can distinguish the underlying mapping types. While >> > dma_alloc_coherent, dma_alloc_attrs with DMA_ATTR_NON_CONSISTENT, >> > dma_map_page/dma_map_single/dma_map_sg and dma_map_resource all give >> > back a dma_addr_t they are in now way interchangable. And trying to >> > stuff them all into a structure like struct scatterlist that has >> > no indication what kind of mapping you are dealing with is just >> > asking for trouble. >> >> Well the idea was to have 1 interface to allow all drivers to share >> buffers with anything else, no matter how exactly they're allocated. > > Isn't that interface supposed to be dmabuf? Currently dma_map leaks > a scatterlist through the sg_table in dma_buf_map_attachment / > ->map_dma_buf, but looking at a few of the callers it seems like they > really do not even want a scatterlist to start with, but check that > is contains a physically contiguous range first. So kicking the > scatterlist our there will probably improve the interface in general. I think by number most drm drivers require contiguous memory (or an iommu that makes it look contiguous). But there's plenty others who have another set of pagetables on the gpu itself and can scatter-gather. Usually it's the former for display/video blocks, and the latter for rendering. >> dma-buf has all the functions for flushing, so you can have coherent >> mappings, non-coherent mappings and pretty much anything else. Or well >> could, because in practice people hack up layering violations until it >> works for the 2-3 drivers they care about. On top of that there's the >> small issue that x86 insists that dma is coherent (and that's true for >> most devices, including v4l drivers you might want to share stuff >> with), and gpus really, really really do want to make almost >> everything incoherent. > > How do discrete GPUs manage to be incoherent when attached over PCIe? It has a non-coherent transaction mode (which the chipset can opt to not implement and still flush), to make sure the AGP horror show doesn't happen again and GPU folks are happy with PCIe. That's at least my understanding from digging around in amd the last time we had coherency issues between intel and amd gpus. GPUs have some bits somewhere (in the pagetables, or in the buffer object description table created by userspace) to control that stuff. For anything on the SoC it's presented as pci device, but that's extremely fake, and we can definitely do non-snooped transactions on drm/i915. Again, controlled by a mix of pagetables and userspace-provided buffer object description tables. -Daniel --=20 Daniel Vetter Software Engineer, Intel Corporation +41 (0) 79 365 57 48 - http://blog.ffwll.ch