Received: by 2002:a25:683:0:0:0:0:0 with SMTP id 125csp1132191ybg; Thu, 11 Jun 2020 01:36:54 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyvfwdZD2P7gjSGgt2YPNhvSvoGqMZDk1YDSzShd/74UIqz2+6ZF8X0NcTKqMWerSzokoDN X-Received: by 2002:aa7:c74e:: with SMTP id c14mr5876511eds.322.1591864613663; Thu, 11 Jun 2020 01:36:53 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1591864613; cv=none; d=google.com; s=arc-20160816; b=X7GbvwliknscSDMptyfkydQqaOuVrgmXJCoVacElxq8cZwk1/02VKfM0q1lx3y5yTQ HCD2E5LdIrwq4RO6nAkHUUdCrY+wJfAslmlvYcpSwgkirkX2p5qavIQtfRkMHM1zmKb5 T5RAWIRumk91KXfUr6nuoHKwCFn6lXCCJSw6FL9hhHhbjv3Nj5GqEptSIM7cl9TYuYzw 9eY+vtIw/gMJbcrMNumQrXT846Sz68eCCH0QPcuLdaAa9rHCC70mpTbA0wLiDFtGw9lO eILcbKxck6UesVtsuujLrw0dzC/ZMk3EthMmLW48rI+nAXC3vwIQ53pdcFNUxsLWb9j7 F0PQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:in-reply-to:content-transfer-encoding :content-disposition:mime-version:references:mail-followup-to :message-id:subject:cc:to:from:date:dkim-signature; bh=QepdUMREFHwlEXMSFJDNAoF8iHTQk6RVQGlxwgtSrqY=; b=z/qPUIwuVohFhHh7+65a2gjvSJh+7D5QM0qPT8+PDjr5ke5NpwqPmFsXLkmRQQkbor 5Y8qjvtfwnNG0d0qq2BWMj9tMawioznnCdO6neHJyHG6vydIKujoQJDN72Cxb4K9sm0P C4Kpt25UP45gtA2rDiNn1N/1VgpQ/3nsEbGSK3jL4+TNQOqPRTdF1DqC2rai7gBBJJhZ MTQywAJ5b9FovqEOTqu5Ae57wj5F/aHkJXh+9r1fb4zKx016Gsf+9+7J3z01vOngRXSk wQEmb0kf/YyMccLRly8Am6lP48cgUsC488OUN3Lu50iLlpD2kJY3Wm2hx1ZM0MlK2fv/ DgTQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@ffwll.ch header.s=google header.b="E74LG/P+"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id n10si1604013ejj.375.2020.06.11.01.36.31; Thu, 11 Jun 2020 01:36:53 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@ffwll.ch header.s=google header.b="E74LG/P+"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726760AbgFKIeh (ORCPT + 99 others); Thu, 11 Jun 2020 04:34:37 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:32932 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726776AbgFKIef (ORCPT ); Thu, 11 Jun 2020 04:34:35 -0400 Received: from mail-wr1-x443.google.com (mail-wr1-x443.google.com [IPv6:2a00:1450:4864:20::443]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7DBF8C08C5C1 for ; Thu, 11 Jun 2020 01:34:34 -0700 (PDT) Received: by mail-wr1-x443.google.com with SMTP id q11so5220678wrp.3 for ; Thu, 11 Jun 2020 01:34:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ffwll.ch; s=google; h=date:from:to:cc:subject:message-id:mail-followup-to:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to; bh=QepdUMREFHwlEXMSFJDNAoF8iHTQk6RVQGlxwgtSrqY=; b=E74LG/P+ZUE+YX56Cn6Zjyn3Qy68LzAK09BYAfg4YVk4oZ+KoKLm9RShaZSnfhXsyb lY/VAxAlqoD8wTaWeNQg/oJboc+vBicFQYrjFpdGQgCMIStdwNU8BV2ZJqMlutdLuJxA smQ33DorgG243Y/dKZ/bnO59viWQm2qRYJC1o= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id :mail-followup-to:references:mime-version:content-disposition :content-transfer-encoding:in-reply-to; bh=QepdUMREFHwlEXMSFJDNAoF8iHTQk6RVQGlxwgtSrqY=; b=B5fBCigcQPDuZ/Gxpr1uw3eZqaBN4zGWS7GOXkCVuG+WRwslseJ45xHVOMjKLfhD9c 38FNoVSvcAHvXwgv8CSvOXb8fAIRgQzeoO/0R/Go6FR7gioHOJ8eDyCPJXvjFEsgbNBA Qi+KWvoESva3y00IYomtKmwkIJ5R/kUBAKwjLDSXewXPGcAjdAisb/UCz71AL3+2crdD rA274D8VGIrKDE9Z/QEllbHtzlZ3GKyx/yeXpXnUkkuc9i5npWS4WjNj+bTqg5BeTwcW LHjh6AEBcdX/OVP8mEBHblWYq9JB60gcao5AvRA683lsT3oUbwqRw59a8HUG+vgPvFmq IsoA== X-Gm-Message-State: AOAM530C6oBuItAbHaKzCJqW7REsZHGHIfMksBx6grgJCq6uG9PwEdcx bAdxtB1DHhW2gfUZ5ANgZ+2QWg== X-Received: by 2002:a5d:42cd:: with SMTP id t13mr8054435wrr.355.1591864473075; Thu, 11 Jun 2020 01:34:33 -0700 (PDT) Received: from phenom.ffwll.local ([2a02:168:57f4:0:efd0:b9e5:5ae6:c2fa]) by smtp.gmail.com with ESMTPSA id b14sm2955283wmj.47.2020.06.11.01.34.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 11 Jun 2020 01:34:32 -0700 (PDT) Date: Thu, 11 Jun 2020 10:34:30 +0200 From: Daniel Vetter To: Thomas =?iso-8859-1?Q?Hellstr=F6m_=28Intel=29?= Cc: Daniel Vetter , DRI Development , linux-rdma@vger.kernel.org, Intel Graphics Development , Maarten Lankhorst , LKML , amd-gfx@lists.freedesktop.org, linaro-mm-sig@lists.linaro.org, Thomas Hellstrom , Daniel Vetter , linux-media@vger.kernel.org, Christian =?iso-8859-1?Q?K=F6nig?= , Mika Kuoppala Subject: Re: [Linaro-mm-sig] [PATCH 04/18] dma-fence: prime lockdep annotations Message-ID: <20200611083430.GD20149@phenom.ffwll.local> Mail-Followup-To: Thomas =?iso-8859-1?Q?Hellstr=F6m_=28Intel=29?= , DRI Development , linux-rdma@vger.kernel.org, Intel Graphics Development , Maarten Lankhorst , LKML , amd-gfx@lists.freedesktop.org, linaro-mm-sig@lists.linaro.org, Thomas Hellstrom , Daniel Vetter , linux-media@vger.kernel.org, Christian =?iso-8859-1?Q?K=F6nig?= , Mika Kuoppala References: <20200604081224.863494-1-daniel.vetter@ffwll.ch> <20200604081224.863494-5-daniel.vetter@ffwll.ch> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: X-Operating-System: Linux phenom 5.6.0-1-amd64 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Jun 11, 2020 at 09:30:12AM +0200, Thomas Hellstr?m (Intel) wrote: > > On 6/4/20 10:12 AM, Daniel Vetter wrote: > > Two in one go: > > - it is allowed to call dma_fence_wait() while holding a > > dma_resv_lock(). This is fundamental to how eviction works with ttm, > > so required. > > > > - it is allowed to call dma_fence_wait() from memory reclaim contexts, > > specifically from shrinker callbacks (which i915 does), and from mmu > > notifier callbacks (which amdgpu does, and which i915 sometimes also > > does, and probably always should, but that's kinda a debate). Also > > for stuff like HMM we really need to be able to do this, or things > > get real dicey. > > > > Consequence is that any critical path necessary to get to a > > dma_fence_signal for a fence must never a) call dma_resv_lock nor b) > > allocate memory with GFP_KERNEL. Also by implication of > > dma_resv_lock(), no userspace faulting allowed. That's some supremely > > obnoxious limitations, which is why we need to sprinkle the right > > annotations to all relevant paths. > > > > The one big locking context we're leaving out here is mmu notifiers, > > added in > > > > commit 23b68395c7c78a764e8963fc15a7cfd318bf187f > > Author: Daniel Vetter > > Date: Mon Aug 26 22:14:21 2019 +0200 > > > > mm/mmu_notifiers: add a lockdep map for invalidate_range_start/end > > > > that one covers a lot of other callsites, and it's also allowed to > > wait on dma-fences from mmu notifiers. But there's no ready-made > > functions exposed to prime this, so I've left it out for now. > > > > v2: Also track against mmu notifier context. > > > > v3: kerneldoc to spec the cross-driver contract. Note that currently > > i915 throws in a hard-coded 10s timeout on foreign fences (not sure > > why that was done, but it's there), which is why that rule is worded > > with SHOULD instead of MUST. > > > > Also some of the mmu_notifier/shrinker rules might surprise SoC > > drivers, I haven't fully audited them all. Which is infeasible anyway, > > we'll need to run them with lockdep and dma-fence annotations and see > > what goes boom. > > > > v4: A spelling fix from Mika > > > > Cc: Mika Kuoppala > > Cc: Thomas Hellstrom > > Cc: linux-media@vger.kernel.org > > Cc: linaro-mm-sig@lists.linaro.org > > Cc: linux-rdma@vger.kernel.org > > Cc: amd-gfx@lists.freedesktop.org > > Cc: intel-gfx@lists.freedesktop.org > > Cc: Chris Wilson > > Cc: Maarten Lankhorst > > Cc: Christian K?nig > > Signed-off-by: Daniel Vetter > > --- > > Documentation/driver-api/dma-buf.rst | 6 ++++ > > drivers/dma-buf/dma-fence.c | 41 ++++++++++++++++++++++++++++ > > drivers/dma-buf/dma-resv.c | 4 +++ > > include/linux/dma-fence.h | 1 + > > 4 files changed, 52 insertions(+) > > I still have my doubts about allowing fence waiting from within shrinkers. > IMO ideally they should use a trywait approach, in order to allow memory > allocation during command submission for drivers that > publish fences before command submission. (Since early reservation object > release requires that). Yeah it is a bit annoying, e.g. for drm/scheduler I think we'll end up with a mempool to make sure it can handle it's allocations. > But since drivers are already waiting from within shrinkers and I take your > word for HMM requiring this, Yeah the big trouble is HMM and mmu notifiers. That's the really awkward one, the shrinker one is a lot less established. I do wonder whether the mmu notifier constraint should only be set when mmu notifiers are enabled, since on a bunch of arm-soc gpu drivers that stuff just doesn't matter. But I expect that sooner or later these arm gpus will show up in bigger arm cores, where you might want to have kvm and maybe device virtualization and stuff, and then you need mmu notifiers. Plus having a very clear and consistent cross-driver api contract is imo better than leaving this up to drivers and then having incompatible assumptions. I've pinged a bunch of armsoc gpu driver people and ask them how much this hurts, so that we have a clear answer. On x86 I don't think we have much of a choice on this, with userptr in amd and i915 and hmm work in nouveau (but nouveau I think doesn't use dma_fence in there). I think it'll take us a while to really bottom out on this specific question here. -Daniel > > Reviewed-by: Thomas Hellstr?m > > -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch