Received: by 10.223.185.116 with SMTP id b49csp3963437wrg; Mon, 19 Feb 2018 08:44:54 -0800 (PST) X-Google-Smtp-Source: AH8x225WMXNXne+1QuJAxeS86t73kxLZ6gmHHb7cLZkA3zSZ5W3EETpb/09VgZOnpIUJ8t2iYcEL X-Received: by 2002:a17:902:27:: with SMTP id 36-v6mr14795191pla.128.1519058694646; Mon, 19 Feb 2018 08:44:54 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1519058694; cv=none; d=google.com; s=arc-20160816; b=ehk7bD9vn39kq8/bAofe0eqeeqKrgHP50j9lB1AZ+dgY0WxXRncRG3poi69Th5EOTN 4DKc5kc4B0RJQ94bJvySXrjAAKPAAaN/HN6lpEUlKt1qcDYQJrwCmNS69fUia9QnSBnU eRKmIdcEVlUBvFILRenqq/em1JuMLN+0gXHpU2HAahoghGbN9E6XY4i6Q31G03vPbLzx l0GpXdt7ltZBBFijdTsgLbvrf1vYQmeGgcER+Q0QklmqFOyrRtrA+AQ4EiP4noF3Q01F lALEcEUcBe8b7+64FQ/1XW4yNdhOYGA+tUbwMVbIJT1bgwsdMEdEUfGZWRX40377DuRj 2Gxg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-transfer-encoding:content-disposition:mime-version :references:mail-followup-to:message-id:subject:cc:to:from:date :dkim-signature:arc-authentication-results; bh=3UKhR2YzV8DenmU/WnTrp2ORZJBlbo+KwCy5doPZu8M=; b=ubitS/dm+x7H41KlPeWBRp7uBDwcGbMbTovvPKkretmXATRO3eyv2pAx6KtQq4iMX/ dGOQRkNPCUioWw8rlJvRDKIsIkyamJeylVAmXt2+z3zhBiLiUNppWG+U4ASm1U60CMU2 kXdMnZJ3mScWqpgZYnvVA0MEUqRjszFytOFEvtyjTr66FIfJyECE1Z5zdacb+Y3PpaEP 36ui+9LFE/z+Sk9DXY6wHWalkUcC/Jsl7Y0HL7he4iyT/sb33QcwXYQkq1cCwU9Nj4R6 iSG2g4T2Hwit6ID1Q4Rrchg3e9/oKvYOi190wn2A5/1atiTmAonmYsx5Fy64OIgzkQWZ V8bw== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@ffwll.ch header.s=google header.b=TKK+YpHi; 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 h8si8184882pfi.117.2018.02.19.08.44.39; Mon, 19 Feb 2018 08:44:54 -0800 (PST) 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=TKK+YpHi; 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 S1753233AbeBSQn7 (ORCPT + 99 others); Mon, 19 Feb 2018 11:43:59 -0500 Received: from mail-wm0-f52.google.com ([74.125.82.52]:51633 "EHLO mail-wm0-f52.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753182AbeBSQn6 (ORCPT ); Mon, 19 Feb 2018 11:43:58 -0500 Received: by mail-wm0-f52.google.com with SMTP id h21so8978499wmd.1 for ; Mon, 19 Feb 2018 08:43:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ffwll.ch; s=google; h=sender:date:from:to:cc:subject:message-id:mail-followup-to :references:mime-version:content-disposition :content-transfer-encoding:in-reply-to:user-agent; bh=3UKhR2YzV8DenmU/WnTrp2ORZJBlbo+KwCy5doPZu8M=; b=TKK+YpHi89dC1OFy6D1VIT8SvjexnNLulNJ/Tt9sq/rLdYcUtGIOSQpWB/7NefWg5R 3vpd+vBJn4bZG9Y8LY4aP0pXGHItDwwaJos3ZGyIeq/I2POHnoZe9KYEqGrS30z81gLY 8sYg3497iqfJ/FAfUxykden9hZ8ozEn9oJq78= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:date:from:to:cc:subject:message-id :mail-followup-to:references:mime-version:content-disposition :content-transfer-encoding:in-reply-to:user-agent; bh=3UKhR2YzV8DenmU/WnTrp2ORZJBlbo+KwCy5doPZu8M=; b=b7V11rfQ4pEvQy86B+WmyK8ZuFw+1x46iGFM+lRzRhatNEUkaJUFOMw5sbeHp/E5ET J9JFjjFG7dZZrfIcRMgYj+DnejvczDX0PtCmBo+6TxWFj9XmgqYYc8QHSysf/ZncyUN1 6G7P8QV0aFh/pGfcNNrm201+ViGyDCQZh3zo93YKlAnOTaeMVyGTaRWM35nkjFZD/t44 xlpOstLThC5G6cS4Tq0m5MbQojJjvIG/EnkBzElf42kTVYSs7gt2UrCrQpTkylAs7nF3 O8LJw1rh66mCY5Scr7gQdrs5I3D3CkNcmL8m1LN/YIw602zB1+bh5eVP4gcoosxU+5YD yJ6w== X-Gm-Message-State: APf1xPDRI+as1YrW3PpACeZfi8/uArWYMyVt98EMckYMn1iWMo35mTHH 5IPg2Fvkhr304pvrzLFob7xZ+A== X-Received: by 10.80.170.69 with SMTP id p5mr20372733edc.10.1519058637006; Mon, 19 Feb 2018 08:43:57 -0800 (PST) Received: from phenom.ffwll.local (212-51-149-109.fiber7.init7.net. [212.51.149.109]) by smtp.gmail.com with ESMTPSA id a23sm13952193edd.28.2018.02.19.08.43.55 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 19 Feb 2018 08:43:55 -0800 (PST) Date: Mon, 19 Feb 2018 17:43:54 +0100 From: Daniel Vetter To: christian.koenig@amd.com Cc: dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH 1/3] locking/ww_mutex: cleanup lock->ctx usage in amdgpu Message-ID: <20180219164354.GB22199@phenom.ffwll.local> Mail-Followup-To: christian.koenig@amd.com, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org References: <20180215141944.4332-1-christian.koenig@amd.com> <20180219152421.GQ22199@phenom.ffwll.local> <20180219161544.GY22199@phenom.ffwll.local> <2e696981-6b4a-e292-c16a-0f3477dbf8ce@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <2e696981-6b4a-e292-c16a-0f3477dbf8ce@gmail.com> X-Operating-System: Linux phenom 4.14.0-3-amd64 User-Agent: Mutt/1.9.3 (2018-01-21) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Feb 19, 2018 at 05:29:46PM +0100, Christian K?nig wrote: > Am 19.02.2018 um 17:15 schrieb Daniel Vetter: > > On Mon, Feb 19, 2018 at 04:41:55PM +0100, Christian K?nig wrote: > > > Am 19.02.2018 um 16:24 schrieb Daniel Vetter: > > > > On Thu, Feb 15, 2018 at 03:19:42PM +0100, Christian K?nig wrote: > > > > > amdgpu needs to verify if userspace sends us valid addresses and the simplest > > > > > way of doing this is to check if the buffer object is locked with the ticket > > > > > of the current submission. > > > > > > > > > > Clean up the access to the ww_mutex internals by providing a function > > > > > for this and extend the check to the thread owning the underlying mutex. > > > > > > > > > > Signed-off-by: Christian K?nig > > > > > --- > > > > > drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 3 ++- > > > > > include/linux/ww_mutex.h | 17 +++++++++++++++++ > > > > > 2 files changed, 19 insertions(+), 1 deletion(-) > > > > > > > > > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c > > > > > index eaa3cb0c3ad1..4c04b560e358 100644 > > > > > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c > > > > > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c > > > > > @@ -1594,7 +1594,8 @@ int amdgpu_cs_find_mapping(struct amdgpu_cs_parser *parser, > > > > > *map = mapping; > > > > > /* Double check that the BO is reserved by this CS */ > > > > > - if (READ_ONCE((*bo)->tbo.resv->lock.ctx) != &parser->ticket) > > > > > + if (!ww_mutex_is_owned_by(&(*bo)->tbo.resv->lock, current, > > > > > + &parser->ticket)) > > > > > return -EINVAL; > > > > > if (!((*bo)->flags & AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS)) { > > > > > diff --git a/include/linux/ww_mutex.h b/include/linux/ww_mutex.h > > > > > index 39fda195bf78..dd580db289e8 100644 > > > > > --- a/include/linux/ww_mutex.h > > > > > +++ b/include/linux/ww_mutex.h > > > > > @@ -358,4 +358,21 @@ static inline bool ww_mutex_is_locked(struct ww_mutex *lock) > > > > > return mutex_is_locked(&lock->base); > > > > > } > > > > > +/** > > > > > + * ww_mutex_is_owned_by - is the w/w mutex locked by this task in that context > > > > > + * @lock: the mutex to be queried > > > > > + * @task: the task structure to check > > > > > + * @ctx: the w/w acquire context to test > > > > > + * > > > > > + * Returns true if the mutex is locked in the context by the given task, false > > > > > + * otherwise. > > > > > + */ > > > > > +static inline bool ww_mutex_is_owned_by(struct ww_mutex *lock, > > > > > + struct task_struct *task, > > > > > + struct ww_acquire_ctx *ctx) > > > > > +{ > > > > > + return likely(__mutex_owner(&lock->base) == task) && > > > > > + READ_ONCE(lock->ctx) == ctx; > > > > Just comparing the context should be good enough. If you ever pass a > > > > ww_acquire_ctx which does not belong to your own thread your seriously > > > > wreaking things much worse already (and if we do catch that, should > > > > probably lock the ctx to a given task when ww-mutex debugging is enabled). > > > > > > > > That also simplifies the function signature. > > > > > > > > Of course that means if you don't have a ctx, you can't test ownership of > > > > a ww_mute, but I think that's not a really valid use-case. > > > Well exactly that is the use case in TTM, see patch #3 in this series. > > > > > > In TTM the evicted BOs are trylocked and so we need a way of testing for > > > ownership without a context. > > I don't think your final patch to keep ww_mutex locked until the end > > works. You can't really nest ww_mutex_trylock with ww_mutex at will (since > > trylock bypasses the entire deadlock avoidance). > > Well that is not a problem at all. See we don't nest trylock with normal > lock acquiring, cause that would indeed bypass the whole deadlock detection. > > Instead we first use ww_mutex_acquire to lock all BOs which are needed for a > command submission, including the deadlock detection. > > Then all additional BOs which needed to be evicted to fulfill the current > request are trylocked. Yeah it's the lock; trylock; lock combo that deadlocks. If lockdep indeed catches that one (and not some other recursion combo) then I think we don't have to worry about holding tons of trylock'ed locks. > > > If this is really what you want to do, then we need a > > ww_mutex_trylock_ctx, which also fills out the ctx value (so that other > > threads can correctly resolve deadlocks when you hold that lock while > > trying to grab additional locks). In which case you really don't need the > > task pointer. > > Actually considered that as well, but it turned out that this is exactly > what I don't want. > > Cause then we wouldn't be able to distinct ww_mutex locked with a context > (because they are part of the submission) and without (because TTM trylocked > them). Out of curiosity, why do you need to know that? > > Yes it's a disappointment that lockdep doesn't correctly track trylocks, > > it just does basic sanity checks, but then drops them on the floor wrt > > depency tracking. Just in case you wonder why you're not getting a > > lockdeps splat for this. Unfortunately I don't understand lockdep enough > > to be able to fix this gap. > > Sorry to disappoint you, but lockdep is indeed capable to correctly track > those trylocked BOs. > > Got quite a bunch of warning before I was able to resolve to this solution. Hm, I thought it didn't detect a lock; trylock; lock combo because the trylock didn't show up in the dependency stack. Maybe that got fixed meanwhile. Assuming that we indeed need both, could we split up the two use-cases for clarity? I.e. ww_mutex_is_owned_by_ctx, which only takes the ctx (and forgoes checking for a task, since that's implied) and requires a non-NULL ctx. And ww_mutex_is_owned_by_task, which only takes the task (and maybe we should limit it to trylock and _single locks, i.e. WARN_ON(lock->ctx) if ww-mutex debugging is enabled). Or does that hit another requirement of your use-case? -Daniel > > Christian. > > > -Daniel > > > > > Christian. > > > > > > > And not needed > > > > for cmd submission, where you need the ctx anyway. > > > > > > > > Besides this interface nit looks all good. With the task check¶meter > > > > removed: > > > > > > > > Reviewed-by: Daniel Vetter > > > > > > > > -Daniel > > > > > > > > > +} > > > > > + > > > > > #endif > > > > > -- > > > > > 2.14.1 > > > > > > > > > > _______________________________________________ > > > > > dri-devel mailing list > > > > > dri-devel@lists.freedesktop.org > > > > > https://lists.freedesktop.org/mailman/listinfo/dri-devel > > > _______________________________________________ > > > dri-devel mailing list > > > dri-devel@lists.freedesktop.org > > > https://lists.freedesktop.org/mailman/listinfo/dri-devel > > _______________________________________________ > dri-devel mailing list > dri-devel@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/dri-devel -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch