Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp1165189yba; Thu, 4 Apr 2019 05:39:35 -0700 (PDT) X-Google-Smtp-Source: APXvYqzWpDAoIUWtd2rtC0npWs1g5ubk2BOuBhyckulGM+qNNxQd9NOtV5QE7ZuIi4ZXIvobP6Ts X-Received: by 2002:a63:4101:: with SMTP id o1mr5379618pga.17.1554381575069; Thu, 04 Apr 2019 05:39:35 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1554381575; cv=none; d=google.com; s=arc-20160816; b=fRlCkHJTkSvSVqUR/ut74mM5GpW32v9B0hKfioc2QQRP1CApzfit28nTyve1zx++G9 ZGI1dgDjeOI4wYsfUpKnoqAHH3vZCVd4svJm2lbxTCUz8IiuqMxmu6wwHtiOyjUFMEmP pY2FDCrIzadNUcPCJNxQ0Wu7mbS7Z/Zm5q2+aFWkJHy8V/tzNicCYkEbnnB4QUOk2WDx VJjxYFfBJRov14E2qtxtZa7lbevijWL4nqKxXTrzOHwHMUhOunSG2TbyzU9Dk6kH99fY jiaiQkMM0tsDWa9c9qaoekiXA439r2Py49DHeCD5Bgd9+vsiZSY9nzrTyXMpnPkmvfV1 KZfQ== 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:mime-version :user-agent:organization:references:in-reply-to:date:cc:to:from :subject:message-id; bh=3cgrIir0ObGPE7C8HP9VjS35AWaTymDd3Hun1EZOiXg=; b=a78a69p9bkwCPKpK81M3CNXjBsUa+zVl2MbfU/OOnefiu3pYeHFpf9d6Z+ySgJufIz bLiJtrKdwYd/w7tU8WAfwX4Z5YFTSmUYB/AHGCUi4Xr6TZlhxXg6pU0CfnuS1XpbHU/+ ZVpPqLVlhnrux1Sl9G/uc8iggbnWB6TsFTkKdrnwyWLkkBWkY6Tfq6sh9Mt08XD+M9K/ RnFJnIzkuzz0SvErvFuFpWi+sGO+WDiSp14QZIbn3i+fyz8eEZU0Yyl+qn1mgnO0hedQ fibeqlp1W9/8FhDgy+3hOVv8TkMT8IJuYMtz04iOuQHmhYl9hpJyqu5OQDt6pUs9fs7x rbXQ== ARC-Authentication-Results: i=1; mx.google.com; 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 c2si16015794pls.226.2019.04.04.05.39.19; Thu, 04 Apr 2019 05:39:35 -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; 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 S1729295AbfDDMin (ORCPT + 99 others); Thu, 4 Apr 2019 08:38:43 -0400 Received: from relay11.mail.gandi.net ([217.70.178.231]:36411 "EHLO relay11.mail.gandi.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726790AbfDDMin (ORCPT ); Thu, 4 Apr 2019 08:38:43 -0400 Received: from aptenodytes (aaubervilliers-681-1-89-125.w90-88.abo.wanadoo.fr [90.88.30.125]) (Authenticated sender: paul.kocialkowski@bootlin.com) by relay11.mail.gandi.net (Postfix) with ESMTPSA id AF92110004D; Thu, 4 Apr 2019 12:38:38 +0000 (UTC) Message-ID: <23336c399cd31738750fa060854f5a076b722300.camel@bootlin.com> Subject: Re: [PATCH v4 4/4] drm/vc4: Allocate binner bo when starting to use the V3D From: Paul Kocialkowski To: Eric Anholt , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Cc: David Airlie , Daniel Vetter , Thomas Petazzoni , Maxime Ripard , Eben Upton , Daniel Stone Date: Thu, 04 Apr 2019 14:38:38 +0200 In-Reply-To: <87ftqyor88.fsf@anholt.net> References: <20190403154856.9470-1-paul.kocialkowski@bootlin.com> <20190403154856.9470-5-paul.kocialkowski@bootlin.com> <87ftqyor88.fsf@anholt.net> Organization: Bootlin Content-Type: text/plain; charset="UTF-8" User-Agent: Evolution 3.32.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi, Le mercredi 03 avril 2019 à 11:53 -0700, Eric Anholt a écrit : > Paul Kocialkowski writes: > > > The binner bo is not required until the V3D is in use, so avoid > > allocating it at probe and do it on the first non-dumb BO allocation. > > Keep track of which clients are using the V3D and liberate the buffer > > when there is none left. > > > > We also want to keep it alive during runtime suspend/resume to avoid > > failing to allocate it at resume. This happens when the CMA pool is > > full at that point and results in a hard crash. > > > > Signed-off-by: Paul Kocialkowski > > --- > > drivers/gpu/drm/vc4/vc4_bo.c | 32 ++++++++++++++++++++++++++++++++ > > drivers/gpu/drm/vc4/vc4_drv.c | 9 +++++++++ > > drivers/gpu/drm/vc4/vc4_drv.h | 4 ++++ > > drivers/gpu/drm/vc4/vc4_v3d.c | 13 ------------- > > 4 files changed, 45 insertions(+), 13 deletions(-) > > > > diff --git a/drivers/gpu/drm/vc4/vc4_bo.c b/drivers/gpu/drm/vc4/vc4_bo.c > > index 88ebd681d7eb..b941f09b9378 100644 > > --- a/drivers/gpu/drm/vc4/vc4_bo.c > > +++ b/drivers/gpu/drm/vc4/vc4_bo.c > > @@ -799,6 +799,30 @@ vc4_prime_import_sg_table(struct drm_device *dev, > > return obj; > > } > > > > +static int vc4_prepare_bin_bo(struct drm_device *dev, > > + struct drm_file *file_priv) > > +{ > > + struct vc4_file *vc4file = file_priv->driver_priv; > > + struct vc4_dev *vc4 = to_vc4_dev(dev); > > + int ret; > > + > > + if (!vc4->v3d) > > + return -ENODEV; > > + > > + if (!vc4file->needs_bin_bo) { > > + atomic_inc(&vc4->bin_bo_usecnt); > > + vc4file->needs_bin_bo = true; > > + } > > + > > + if (!vc4->bin_bo) { > > + ret = vc4_v3d_allocate_bin_bo(vc4); > > + if (ret) > > + return ret; > > + } > > + > > This atomic usage looks really racy. For example, multiple clients > could call allocate at the same time and leak one. Or this timeline: > > us them > dec count to 0 > inc count > check bin_bo > free bin_bo Oh, you're definitely right. Sorry I missed that. > vc4_v3d_allocate_bin_bo should probably be a vc4_v3d_bin_bo_get() > returning a kref on the BO, called under a lock protecting both one > file_priv being dereferenced by multiple threads in the kernel at the > same time (so file_priv doesn't try to double-get its ref) and multiple > file_privs trying to get the bin_bo at once. Sounds good, I'll look into it and spin up a new revision soon. Cheers, Paul -- Paul Kocialkowski, Bootlin Embedded Linux and kernel engineering https://bootlin.com